英文:
aws cli command output as value in cloudformation template
问题
我有一个独立的Lambda层,ARN是使用以下CLI命令检索的。
aws lambda list-layer-versions --layer-name my-custom-lambda-layer --region us-east-1 --query 'LayerVersions[0].LayerVersionArn'
我该如何将这个输出引用到我的云堆栈模板中,如下所示,
Resources:
Parameters:
MYLAYERARN: $(aws lambda list-layer-versions --layer-name my-custom-lambda-layer --region us-east-1 --query 'LayerVersions[0].LayerVersionArn')
或者直接在我的任何Lambda函数中使用,如下所示,
Resources:
MyLambdaFuntion:
handler: Hello.lambda_handler
timeout: 60
memorySize: 256
layers:
- $(aws lambda list-layer-versions --layer-name my-custom-lambda-layer --region us-east-1 --query 'LayerVersions[0].LayerVersionArn')
目前它不执行AWS CLI命令,而是将CLI命令作为值。
英文:
I have an independent lambda layer, the arn is retrieved using the below CLI command.
aws lambda list-layer-versions --layer-name my-custom-lambda-layer --region us-east-1 --query 'LayerVersions[0].LayerVersionArn'
How can I refer this output to my cloud formation template, like below,
Resources:
Parameters:
MYLAYERARN: $(aws lambda list-layer-versions --layer-name my-custom-lambda-layer --region us-east-1 --query 'LayerVersions[0].LayerVersionArn')
Or use it directly in any of my lambda function as below,
Resources:
MyLambdaFuntion:
handler: Hello.lambda_handler
timeout: 60
memorySize: 256
layers:
- $(aws lambda list-layer-versions --layer-name my-custom-lambda-layer --region us-east-1 --query 'LayerVersions[0].LayerVersionArn')
Currenlty it is not executing the AWS CLI command, but taking the CLI command as the value
答案1
得分: 4
这是不可能的,因为你无法在CloudFormation模板中评估这种表达式。
最简单的解决方案是将已经评估过的表达式作为参数传递。
或者,如果你必须使用CloudFormation解决方案,那么你可以利用CloudFormation宏来调用一个Lambda函数,该函数执行自定义代码(在这种情况下,代码将具有等效于AWS CLI命令的SDK代码)。
更多关于CloudFormation宏的信息:
https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-macros.html
宏示例:https://stackoverflow.com/a/70475459/3390419
英文:
That is not possible, as you can't evaluate such expressions in a CloudFormation template.
The easiest solution would be to pass in the already-evaluated expression as a parameter.
Alternatively, if you must use a CloudFormation solution, then you could leverage a CloudFormation macro to invoke a lambda function which executes custom code (in this case, the code would have the SDK equivalent of the AWS CLI command).
More on CloudFormation macros:
https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-macros.html
Macro example: https://stackoverflow.com/a/70475459/3390419
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论