以下是我尝试过的方法,但没有成功。我认为问题是生成的 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/