我有一个// …
module.exports = {
// …
module: {
preLoaders: [
{
test: /\.(js|jsx)$/,
loader: 'eslint',
include: paths.appSrc,
}
]
}
// …
};
模板,该模板具有CloudFormation
函数资源,该资源在注册新的Lambda
时由CloudWatch事件触发。在Lambda资源块中,我在AMI
属性中传递了内联代码。如果Code
ID是返回事件中解析的所需ID,则该函数将触发SSM
自动化文档执行。出于问题的考虑,我们在模板中将此资源称为AMI
。因此,我的问题是,在模板中,我该如何在My Doc
资源的Code
属性的内嵌代码中引用自动化文档资源?我在下面粘贴了一个代码示例以帮助说明这一点。
模板中的资源块:
Lambda
答案 0 :(得分:3)
如果我理解正确,那么为了使您的Lambda能够获取该文档,您首先必须将文档的逻辑ID传递给Lambda。您可以在Lambda Environment variables中使用!Ref MyDoc
进行操作,然后可以在函数中提取该变量并使用GetDocument API call来获取文档。
答案 1 :(得分:1)
为此,您可以使用Sub内在函数代替Join。甚至组合Join和Sub功能-由您决定。
因此,结果代码如下所示:
"Code": {
"ZipFile": {
"Fn::Join": [
"\n",
[
"import json",
"import boto3",
"def lambda_handler(event, context):",
" ssm = boto3.client('ssm')",
" amiId = event['AMI-ID']",
" if 'base_ami in amiId:",
{
"Fn::Sub": [
" ssm.start_automation_execution(DocumentName=${MyDocumentName})",
{ "MyDocumentName": {"Ref" : "MyDoc" }}
]
}
" else:",
" print("Not the base AMI id.")"
]
]
}
}
当然,这仅适用于内联代码,否则,应使用@Deiv编写的Lambda环境变量。