我想将工件从账户1的S3存储桶复制到账户2的S3存储桶。虽然我能够设置复制,但是我想知道是否存在从管道内部调用AWS CLI命令的方法。
可以使用Lambda函数调用它吗?如果是,那么任何小的示例脚本都将有所帮助。
答案 0 :(得分:1)
是的,您可以将Lambda Invoke操作添加到管道中以调用copyobject API。 Lambda函数的核心部分如下。
exports.copyRepoToProdS3 = (event, context) => {
const jobId = event['CodePipeline.job'].id
const s3Location = event['CodePipeline.job'].data.inputArtifacts[0].location.s3Location
const cpParams = JSON.parse(event['CodePipeline.job'].data.actionConfiguration.configuration.UserParameters)
let promises = []
for (let bucket of prodBuckets) {
let params = {
Bucket: bucket,
CopySource: s3Location['bucketName'] + '/' + s3Location['objectKey'],
Key: cpParams['S3ObjectKey']
}
promises.push(s3.copyObject(params).promise())
}
return Promise.all(promises)
.then((data) => {
console.log('Successfully copied repo to buckets!')
}).catch((error) => {
console.log('Failed to copy repo to buckets!', error)
})
}
在以下链接中可以找到将角色和报告处理结果添加到CodePipeline的更多详细步骤。 https://medium.com/@codershunshun/how-to-invoke-aws-lambda-in-codepipeline-d7c77457af95