从 lambda 函数中检索 cloudformation 堆栈名称
Posted
技术标签:
【中文标题】从 lambda 函数中检索 cloudformation 堆栈名称【英文标题】:retrieve the cloudformation stack name from the lambda function 【发布时间】:2017-10-20 10:19:57 【问题描述】:我从cloudformation
模板中的custom resource
调用lambda function
。此自定义资源有一个属性:cloudformation
堆栈的名称。我需要 lambda 函数中的这个属性值,以便我可以获取堆栈的其他变量,如 parameters
和 outputs
。这里是custom resource
:
"DeployApp":
"Type" : "Custom::deployapplication",
"Properties" :
"ServiceToken": "Fn::GetAtt" : ["lambda" , "Arn"] ,
"StackName": "Ref": "AWS::StackName"
目前,我通过这种方式在 lambda 函数中获取堆栈名称:
import boto3
def lambda_handler(event, context):
cf_client = boto3.client('cloudformation')
# Get the name of the stack
stack = context.invoked_function_arn.split(':')[6]
stack = stack.split('-')[:4]
stack_name = stack[0]+'-'+stack[1]+'-'+stack[2]+'-'+stack[3]
print('CloudFormation stack name : '+stack_name)
在这里,我总是将堆栈的名称设置为这样的:
stack-cfn-lambda-app
: 4 个单词被 '-' 分割
但我想让它更通用,以便接受所有名称格式。
在不知道格式将如何的情况下,如何做到这一点并获得堆栈的确切名称?
换句话说,我如何在 python 中从这个字符串中获取(函数 lambda ARN):
arn:aws:lambda:eu-west-1:53436693423891:function:stackName-ELATEDLEXZPS
:function:
和 ELATEDLEXZPS
之间的字符串?
【问题讨论】:
【参考方案1】:如果您已经将堆栈名称放在函数属性中,就像您在第一个代码示例中所做的那样,您可以简单地通过事件对象访问这些属性。
StackInfo:
Type: Custom::StackInfo
Properties:
ServiceToken: !GetAtt StackInfoFunction2.Arn
StackName:
Ref: "AWS::StackName"
Lambda 代码:
import json
import cfnresponse
def handler(event, context):
print("stack name: " + event['ResourceProperties']['StackName'])
cfnresponse.send(event, context, cfnresponse.SUCCESS, )
【讨论】:
是的!我明白了 非常感谢。实际上,事件变量只是简单化了事情以上是关于从 lambda 函数中检索 cloudformation 堆栈名称的主要内容,如果未能解决你的问题,请参考以下文章
如何从AWS Lambda检索数据并将其显示在AWS S3托管的静态网站上?
Alexa Skill - 如何在 Lambda 函数中检索槽值
使用 AWS SDK for Java 调用 AWS Lambda 函数时如何检索 context.done() 消息?