Skip to main content

AWS 集群设置

在 AWS 上设置 Quickwit 集群需要配置三个元素:

  • AWS 凭证
  • AWS 区域
  • 网络配置

AWS 凭证

当启动一个节点时,Quickwit 会使用由 rusoto_core::ChainProvider 实现的凭证提供链来查找 AWS 凭证,并按以下顺序查找凭证:

  1. 环境变量 AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEYAWS_SESSION_TOKEN(可选)。

  2. 凭证配置文件,通常位于 ~/.aws/credentials,或者通过环境变量 AWS_SHARED_CREDENTIALS_FILEAWS_PROFILE 指定(如果设置了且不为空)。

  3. Amazon ECS 容器凭证,如果环境变量 AWS_CONTAINER_CREDENTIALS_RELATIVE_URI 设置了,则从 Amazon ECS 容器加载。

  4. 实例配置文件凭证,在 Amazon EC2 实例上使用,并通过 Amazon EC2 元数据服务传递。

如果在提供链中未找到任何凭证,则返回错误。

AWS 区域

Quickwit 会在多个位置查找 AWS 区域,并按照以下优先级顺序:

  1. 环境变量 (AWS_REGION 然后是 AWS_DEFAULT_REGION)。

  2. 配置文件,通常位于 ~/.aws/config,或者通过环境变量 AWS_CONFIG_FILE 指定(如果设置了且不为空)。

  3. Amazon EC2 实例元数据服务,指示当前运行的 Amazon EC2 实例所在的区域。

  4. 默认值:us-east-1

note

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)`.