gpt4 book ai didi

amazon-web-services - 如何为 AWS Elastic 搜索注册手动备份?

转载 作者:行者123 更新时间:2023-12-02 22:13:30 25 4
gpt4 key购买 nike

我正在尝试将我的 elasticsearch 索引备份到文件夹中的 S3 存储桶。我正在使用以下代码注册路径:

from boto.connection import AWSAuthConnection

类 ESConnection(AWSAuthConnection):

def __init__(self, region, **kwargs):
super(ESConnection, self).__init__(**kwargs)
self._set_auth_region_name(region)
self._set_auth_service_name("es")

def _required_auth_capability(self):
return ['hmac-v4']

如果 name == "ma​​in":

client = ESConnection(
region='us-east-1',
host='search-weblogs-etrt4mbbu254nsfupy6oiytuz4.us-east-1.es.a9.com',
aws_access_key_id='my-access-key-id',
aws_secret_access_key='my-access-key', is_secure=False)

print 'Registering Snapshot Repository'
resp = client.make_request(method='POST',
path='/_snapshot/weblogs-index-backups/test_dir',
data='{"type": "s3","settings": { "bucket": "es-index-backups","region": "us-east-1","role_arn": "arn:aws:iam::123456789012:role/MyElasticsearchRole"}}')
body = resp.read()
print body

对于给定的路径,我得到错误:找不到 uri [/_snapshot/weblogs-index-backups/test_dir] 和方法 [POST]

的处理程序

有什么建议吗

谢谢。

最佳答案

1) 创建 IAM 策略并将其附加到角色:示例角色如下所示:

{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"Service": "es.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}

像这样的示例策略应该附加到以前的角色:

 {
"Version":"2012-10-17",
"Statement":[
{
"Action":[
"s3:ListBucket"
],
"Effect":"Allow",
"Resource":[
"arn:aws:s3:::es-index-backups"
]
},
{
"Action":[
"s3:GetObject",
"s3:PutObject",
"s3:DeleteObject",
"iam:PassRole"
],
"Effect":"Allow",
"Resource":[
"arn:aws:s3:::es-index-backups/*"
]
}
]
}

2) 注册快照目录

作为有权访问新角色的 IAM 用户,您必须在拍摄手动索引快照之前向 Amazon Elasticsearch Service 注册快照目录。这一一次性操作要求您使用向 Amazon ES 授予权限的 IAM 角色签署您的 AWS 请求。

保存以下示例 Python 代码并修改以下值:region:您创建快照存储库的 AWS 区域端点:您的 Amazon ES 域的端点aws_access_key_id:IAM 凭证aws_secret_access_key:IAM 凭证path:快照仓库所在位置

注意:Python 客户端要求在您要注册快照存储库的计算机上安装 boto 包。

from boto.connection import AWSAuthConnection

class ESConnection(AWSAuthConnection):

def __init__(self, region, **kwargs):
super(ESConnection, self).__init__(**kwargs)
self._set_auth_region_name(region)
self._set_auth_service_name("es")

def _required_auth_capability(self):
return ['hmac-v4']

if __name__ == "__main__":

client = ESConnection(
region='us-east-1',
host='search-weblogs-etrt4mbbu254nsfupy6oiytuz4.us-east-1.es.a9.com',
aws_access_key_id='my-access-key-id',
aws_secret_access_key='my-access-key', is_secure=False)

print 'Registering Snapshot Repository'
resp = client.make_request(method='PUT',
path='/_snapshot/weblogs-index-backups',
data='{"type": "s3","settings": { "bucket": "es-index-backups","region": "us-east-1","role_arn": "arn:aws:iam::123456789012:role/MyElasticsearchRole"}}')
body = resp.read()
print body

注册 S3 存储库后,您将能够使用 curl 手动拍摄和恢复快照。例如:

手动拍摄快照:

curl -XPUT 'http://<Elasticsearch_domain_endpoint>/_snapshot/snapshot_repository/snapshot_name'

手动恢复快照:

curl -XPOST 'http://search-weblogs-abcdefghijklmnojiu.us-east-1.a9.com/_snapshot/weblogs-index-backups/snapshot_1/_restore'

注意:您无法将索引的快照还原到已包含同名索引的 Amazon ES 集群。目前,Amazon ES 不支持 Elasticsearch _close API,因此您必须使用以下替代方法之一:删除同一 Amazon ES 域上的索引,然后恢复快照将快照还原到不同的 Amazon ES 域

关于amazon-web-services - 如何为 AWS Elastic 搜索注册手动备份?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36098285/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com