AWS 集群设置
在 AWS 上设置 Quickwit 集群需要配置三个元素:
- AWS 凭证
- AWS 区域
- 网络配置
AWS 凭证
当启动一个节点时,Quickwit 会使用由 rusoto_core::ChainProvider 实现的凭证提供链来查找 AWS 凭证,并按以下顺序查找凭证:
-
环境变量
AWS_ACCESS_KEY_ID
、AWS_SECRET_ACCESS_KEY
或AWS_SESSION_TOKEN
(可选)。 -
凭证配置文件,通常位于
~/.aws/credentials
,或者通过环境变量AWS_SHARED_CREDENTIALS_FILE
和AWS_PROFILE
指定(如果设置了且不为空)。 -
Amazon ECS 容器凭证,如果环境变量
AWS_CONTAINER_CREDENTIALS_RELATIVE_URI
设置了,则从 Amazon ECS 容器加载。 -
实例配置文件凭证,在 Amazon EC2 实例上使用,并通过 Amazon EC2 元数据服务传递。
如果在提供链中未找到任何凭证,则返回错误。
AWS 区域
Quickwit 会在多个位置查找 AWS 区域,并按照以下优先级顺序:
-
环境变量 (
AWS_REGION
然后是AWS_DEFAULT_REGION
)。 -
配置文件,通常位于
~/.aws/config
,或者通过环境变量AWS_CONFIG_FILE
指定(如果设置了且不为空)。 -
Amazon EC2 实例元数据服务,指示当前运行的 Amazon EC2 实例所在的区域。
-
默认值:
us-east-1
。
AWS 凭证或区域解析 可能需要几秒钟,特别是当 Amazon EC2 实例元数据服务较慢或不可用时。
IAM 权限
Amazon S3
所需授权操作:
ListBucket
(直接在存储桶上)GetObject
PutObject
DeleteObject
ListMultipartUploadParts
AbortMultipartUpload
以下是一个存储桶策略的示例:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::my-bucket"
]
},
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:DeleteObject",
"s3:ListMultipartUploadParts",
"s3:AbortMultipartUpload"
],
"Resource": [
"arn:aws:s3:::my-bucket/*"
]
}
]
}
您可以运行以下命令来验证 AWS 凭证、区域和 IAM 权限是否正确配置了 Amazon S3:
MY_BUCKET=<bucket name>
aws s3 ls $MY_BUCKET
echo "Hello, World!" | aws s3 cp - $MY_BUCKET/hello
aws s3 ls $MY_BUCKET/hello
aws s3 cp $MY_BUCKET/hello -
aws s3 rm $MY_BUCKET/hello
Amazon Kinesis
GetRecords
GetShardIterator
ListShards
您可以运行以下命令来验证 AWS 凭证、区域和 IAM 权限是否正确配置了 Amazon Kinesis:
MY_STREAM=<my stream name>
# List the shards in the stream and select the first one.
SHARD_ID=$(
aws kinesis list-shards --stream-name $MY_STREAM \
| jq -r .Shards[0].ShardId
)
# Get a shard iterator for the selected shard.
SHARD_ITERATOR=$(
aws kinesis get-shard-iterator --stream-name $MY_STREAM \
--shard-id $SHARD_ID \
--shard-iterator-type TRIM_HORIZON \
| jq -r .ShardIterator
)
# Fetch some records from the shard and display the first one.
aws kinesis get-records --shard-iterator $SHARD_ITERATOR | jq -r .Records[0]
网络配置
安全组
为了相互通信,节点必须位于允许入站和出站流量的一个 UDP 端口和两个 TCP 端口的安全组中。更多详细信息,请参阅 端口配置 页面。
常见错误
如果您设置了错误的凭证,您将在终端看到带有 Unauthorized
的错误消息:
Command failed: Another error occurred. `Metastore error`. Cause: `StorageError(kind=Unauthorized, source=failed to fetch object: s3://quickwit-dev/my-hdfs/metastore.json)`
如果您设置了错误的区域,您将看到以下错误消息:
Command failed: Another error occurred. `Metastore error`. Cause: `StorageError(kind=Internal, source=failed to fetch object: s3://your-bucket/your-index/metastore.json)`.