如何使用Redshift COPY与非硬编码键

时间:2015-10-16 12:55:35

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

以下是我尝试过的,但它没有用。我认为问题是生成的密钥只是为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....

知道如何让这个工作吗?

1 个答案:

答案 0 :(得分:2)

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

当您使用临时信誉(访问,秘密,令牌)执行COPY命令时,您也提供了令牌: 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