Ich rufe einen lambda function
von einem custom resource
in cloudformation
Vorlage. Diese benutzerdefinierte Ressource hat eine Eigenschaft: den Namen des cloudformation
Stapels. Ich brauche diesen Eigenschaftswert in der Lambda-Funktion, damit ich andere Variablen wie parameters
und outputs
des Stapels bekommen kann. Hier ist das ist custom resource
:Abrufen des Namens des Wolkenbildungsstapels aus der Lambda-Funktion
"DeployApp": {
"Type" : "Custom::deployapplication",
"Properties" : {
"ServiceToken": { "Fn::GetAtt" : ["lambda" , "Arn"] },
"StackName": { "Ref": "AWS::StackName" }
}
}
Im Moment habe ich den Stapel Namen in der Lambda-Funktion auf diese Weise:
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)
hier immer habe ich den Namen des Stapels etwas wie folgt aus:
stack-cfn-lambda-app
: 4 Wörter geteilt durch '-' Aber ich möchte es allgemeiner machen, so dass alle Namen Formate akzeptiert werden. Wie man das macht und den genauen Namen des Stapels erhält, ohne bereits zu wissen, wie das Format sein wird?
Mit anderen Worten, wie in Python kann ich aus dieser Zeichenfolge (Funktion Lambda ARN) erhalten:
arn:aws:lambda:eu-west-1:53436693423891:function:stackName-ELATEDLEXZPS
die Zeichenfolge zwischen :function:
und ELATEDLEXZPS
?
Ja! Ich habe es Vielen Dank. Effektiv Ereignisvariable ist einfach das Ding – Somar