在使用AWS CloudFormation模板创建Athena工作组时,有时会遇到“查询结果位置”属性不起作用的问题。这可能是由于模板中缺少必要的配置或错误的属性值导致的。下面是一个解决方法,包括一个示例CloudFormation模板和一些代码:
"AthenaWorkGroup": {
"Type": "AWS::Athena::WorkGroup",
"Properties": {
"Name": "MyAthenaWorkGroup",
"State": "ENABLED",
"Configuration": {
"ResultConfiguration": {
"OutputLocation": "s3://your-bucket-name/path/"
}
}
}
}
在这个示例中,我们设置了Athena工作组的名称为"MyAthenaWorkGroup",并将查询结果位置设置为"s3://your-bucket-name/path/"。请确保你将"s3://your-bucket-name/path/"替换为你实际的S3存储桶和路径。
aws athena list-work-groups
如果你看到了你在CloudFormation模板中定义的工作组名称,则表示你具有足够的权限。
"AthenaServiceRole": {
"Type": "AWS::IAM::Role",
"Properties": {
"AssumeRolePolicyDocument": {
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "athena.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
},
"Policies": [
{
"PolicyName": "AthenaServiceRolePolicy",
"PolicyDocument": {
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetBucketLocation",
"s3:ListBucket",
"s3:ListBucketMultipartUploads"
],
"Resource": [
"arn:aws:s3:::your-bucket-name"
]
},
{
"Effect": "Allow",
"Action": [
"s3:AbortMultipartUpload",
"s3:DeleteObject",
"s3:GetObject",
"s3:ListMultipartUploadParts",
"s3:PutObject"
],
"Resource": [
"arn:aws:s3:::your-bucket-name/*"
]
}
]
}
}
]
}
},
在这个示例中,我们定义了一个名为"AthenaServiceRole"的IAM角色,并为Athena服务设置了必要的S3权限。请确保你将"arn:aws:s3:::your-bucket-name"和"arn:aws:s3:::your-bucket-name/*"替换为你实际的S3存储桶ARN。
aws cloudformation create-stack --stack-name MyAthenaStack --template-body file://template.json
确保将"template.json"替换为你实际的CloudFormation模板文件名,并将"MyAthenaStack"替换为你想要的堆栈名称。
这些步骤应该可以解决“查询结果位置”属性不起作用的问题。你可以通过在AWS管理控制台中查看Athena