【发布时间】:2024-05-14 21:35:05
【问题描述】:
目标
我的目标是将数据从 Postgres RDS 实例导出到 s3 存储桶。我只是想证明这个概念适用于我的 VPC,所以我使用的是虚拟数据。
到目前为止我所尝试的
我使用控制台和 cli 遵循了文档 here。
-
创建了一个 s3 存储桶(我选择阻止所有公共访问)
-
使用以下设置创建了一个 RDS 实例:
- 在 2 个公共子网上创建
- 公共可访问性:否
- 出站安全组规则:CIDR/IP - 入站 0.0.0.0/0
- 入站安全组规则:CIDR/IP - 入站 0.0.0.0/0
-
如示例所示创建了一个策略:
aws iam create-policy --policy-name rds-s3-export-policy --policy-document '{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "s3export",
"Action": [
"S3:PutObject"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::your-s3-bucket/*"
]
}
]
}'
- 创建了一个 IAM 角色,例如:
aws iam create-role --role-name rds-s3-export-role --assume-role-policy-document '{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "rds.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}'
- 将策略附加到以下角色:
aws iam attach-role-policy --policy-arn your-policy-arn --role-name rds-s3-export-role
- 向数据库添加了 IAM 角色,例如:
aws rds add-role-to-db-instance \
--db-instance-identifier my-db-instance \
--feature-name s3Export \
--role-arn your-role-arn \
--region your-region
- 是否满足 PSQL 中的所有要求,例如:
CREATE EXTENSION IF NOT EXISTS aws_s3 CASCADE;
CREATE TABLE sample_table (bid bigint PRIMARY KEY, name varchar(80));
INSERT INTO sample_table (bid,name) VALUES (1, 'Monday'), (2,'Tuesday'), (3, 'Wednesday');
SELECT aws_commons.create_s3_uri(
'dummy-data-bucket-path',
'',
'us-west-2'
) AS s3_uri_1 \gset
什么不起作用
当我尝试通过以下方式进行实际导出时:
SELECT * FROM aws_s3.query_export_to_s3('SELECT * FROM sample_table', :'s3_uri_1');
我得到错误:
ERROR: could not upload to Amazon S3
DETAIL: Amazon S3 client returned 'Unable to connect to endpoint'.
CONTEXT: SQL function "query_export_to_s3" statement 1
我尝试过的其他事情:
我尝试过使用Access analyzer for S3,但我的存储桶似乎没有出现在列表中。我相信存储桶本身没有附加政策。
如何调试此问题?我究竟做错了什么?如果需要,我很乐意分享更多详细信息。
【问题讨论】:
标签: postgresql amazon-web-services