如何从CodePipeline调用AWS CLI命令?

时间:2018-10-20 09:10:19

标签: amazon-web-services amazon-s3 aws-lambda aws-cli

我想将工件从账户1的S3存储桶复制到账户2的S3存储桶。虽然我能够设置复制,但是我想知道是否存在从管道内部调用AWS CLI命令的方法。

可以使用Lambda函数调用它吗?如果是,那么任何小的示例脚本都将有所帮助。

1 个答案:

答案 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