java - 如何通过非硬编码 key 使用 Redshift COPY

标签 java amazon-web-services copy amazon-redshift

以下是我尝试过的方法,但没有成功。我认为问题是生成的 key 仅针对 EC2 实例的范围生成。因此,当 Redshift 尝试使用该命令调用 COPY 命令时,它无法被识别。

AWSCredentialsProvider credentialProvider = new DefaultAWSCredentialsProviderChain();
        return new StringBuilder("COPY ").append(tmpPrefix)
                .append(tableName)
                .append(" FROM '")
                .append(filePath)
                .append("' WITH CREDENTIALS 'aws_access_key_id=")
                .append(credentialProvider.getCredentials().getAWSAccessKeyId())
                .append(";aws_secret_access_key=")
                .append(credentialProvider.getCredentials().getAWSSecretKey())
                .append("' JSON 'auto' GZIP ACCEPTINVCHARS ' ' TRUNCATECOLUMNS TRIMBLANKS;")
                .toString();

以下是我遇到的错误

[Amazon](500310) Invalid operation: S3ServiceException:The AWS Access Key Id you provided does not exist in our records.,Status 403,Error InvalidAccessKeyId....

知道如何让它工作吗?

最佳答案

您正在使用 IAM 角色(它为您创建一组临时凭证 + token )。

当您使用临时凭证(访问权限、 secret 、 token )执行 COPY 命令时,您还提供了 token : credentials 'aws_access_key_id=<temporary-access-key-id>;aws_secret_access_key=<temporary-secret-access-key>;token=<temporary-token>';

查看文档 http://docs.aws.amazon.com/redshift/latest/dg/t_loading-tables-from-s3.html

关于java - 如何通过非硬编码 key 使用 Redshift COPY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33171069/

相关文章:

Java:使用 lambda 向文件添加行号的优雅方式

amazon-web-services - 在浏览器中打开对象 URL 时 AWS S3 访问被拒绝

java - 如何在 DynamoDB 中使用 Set <String> 属性?

amazon-web-services - 允许跨区域访问 AWS SQS 队列

java - XSLT xsl :copy and xsl:for-each on attributes

java - 使用 NetBeans 自动填充 jTextField

java - 我如何编写一段 java 代码,让一个实例只发生一次?

java - 如何使用 RxJava 过滤列表并对所有匹配的元素进行分组

Git:从另一个分支复制目录中的所有文件

javascript - JQuery - 复制元素的尺寸和绝对位置