代码之家  ›  专栏  ›  技术社区  ›  RKh

如何从代码管道调用awscli命令?

  •  0
  • RKh  · 技术社区  · 7 年前

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

    是否可以使用Lambda函数调用它?如果是,任何小样本脚本都会很有帮助。

    1 回复  |  直到 7 年前
        1
  •  1
  •   zhngha    7 年前

    是的,您可以向管道中添加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