我想使用 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)