小编men*_*ann的帖子

AWS CodePipeline:将 Lambda 函数输出传递给 CloudFormation

我想使用 CodePipeline 运行 CloudFormation 模板。此模板需要一个需要包含当前日期/时间的输入参数。不幸的是,CloudFormation 本身无法立即生成当前的 DateTime。

我的方法是首先运行一个简单的 Lambda 函数来创建当前时间戳并将其保存为OutputArtifacts. 随后的 CloudFormation 任务将此工件导入为InputArtifacts并从 DateTime 属性中获取值,然后通过ParameterOverrides指令将其传递给 CloudFormation 。

不幸的是,CodePipeline 一直说DateTimeInput参数无效(显然 GetArtifactAtt 查找失败)。我假设 lambda 输出(python:print)没有正确保存为工件?

您是否知道如何正确传递 lambda 输出,或者您是否知道如何以更好的方式实现这一目标?

所有管道组件都使用 CloudFormation 定义为 YAML。以下是相关部分:

拉姆达函数:

Resources:
  ...
  GetDateTimeFunction:
    Type: AWS::Lambda::Function
    Properties:
      Handler: index.lambda_handler
      Runtime: python2.7
      Timeout: '10'
      Role: !GetAtt GetDateTimeFunctionExecutionRole.Arn
      Code:
        ZipFile: |
                import datetime
                import boto3
                import json

                code_pipeline = boto3.client('codepipeline')

                def lambda_handler(event, context):
                  now = datetime.datetime.now().strftime("%Y%m%d%H%M%S")
                  responseData = {'DateTime':now}
                  print json.dumps(responseData)
                  response = code_pipeline.put_job_success_result(jobId=event['CodePipeline.job']['id']) …
Run Code Online (Sandbox Code Playgroud)

lambda artifact aws-cloudformation aws-codepipeline

6
推荐指数
1
解决办法
2770
查看次数