我编写了一个 Java 程序,它包含在 oozie 工作流程中,它将文件从 HDFS 放到 S3 存储桶中。但是,我收到以下错误
com.amazonaws.services.s3.model.AmazonS3Exception:访问被拒绝(服务:Amazon S3;状态代码:403;错误代码:AccessDenied;请求 ID:310F08CD4FF8B5D9),S3 扩展请求 ID:fAysD1vgtriV8x+sf1zqHk58eAT89Y6HD+ziEokaPvFPKwaPrHDxt5yygsiA1Qn+
我在 oozie 工作流中动态创建 S3 存储桶中的关键路径。
例如:如果我的文件名是,abc_20171009.tsv.gz
那么这个文件应该上传到以下路径中的存储桶
tsvFile/year=2017/month=10/day=09/abc_20171009.tsv.gz
以类似的方式,应根据日期上传其他日期文件。
我的问题是在上传文件之前密钥路径是否应该预先存在于存储桶中,还是可以动态创建?
// Request server-side encryption.
BasicAWSCredentials awsCredentials = new BasicAWSCredentials(awsAccessKeyId, awsSecretKey);
AmazonS3Client s3Client = new AmazonS3Client(awsCredentials);
PutObjectRequest request = new PutObjectRequest("bucket_name", "key_name","");
ObjectMetadata objectMetadata = new ObjectMetadata();
objectMetadata.setSSEAlgorithm(ObjectMetadata.AES_256_SERVER_SIDE_ENCRYPTION);
request.setMetadata(objectMetadata);
PutObjectResult response = s3Client.putObject(request);
LOGGER.info("Server Side Encryption successful" +response.getSSEAlgorithm());
注意:我可以手动放置文件并通过 AWS CLI 连接到 S3 存储桶。