1

テンプレートのcustom resourceからlambda functionを呼び出します。このカスタムリソースには、cloudformationスタックの名前のプロパティがあります。ラムダ関数でこのプロパティ値が必要なので、スタックのparametersoutputsのような他の変数を得ることができます。ここでcustom resourceは次のとおりです。ラムダ関数から雲情報スタック名を取得する

"DeployApp": { 
    "Type" : "Custom::deployapplication", 
    "Properties" : { 
    "ServiceToken": { "Fn::GetAtt" : ["lambda" , "Arn"] }, 
    "StackName": { "Ref": "AWS::StackName" } 
    } 
} 

瞬間のために、私はラムダ関数で、このようにスタック名を取得:

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語を ' - 'で区切ります。 しかし、すべての名前の形式が受け入れられるように、より一般的にしたいと考えています。 これを行うにはどうすれば、フォーマットの仕組みがわからなくてもスタックの正確な名前を得ることができますか?

arn:aws:lambda:eu-west-1:53436693423891:function:stackName-ELATEDLEXZPS 

:function:ELATEDLEXZPSの間の文字列を:pythonで私はこの文字列(関数ラムダARN)から取得することができますどのように言い換えれば

、?

答えて

1

すでに関数のプロパティにスタック名を配置している場合は、最初のコードサンプルの場合と同様に、イベントオブジェクトを通じてこれらのプロパティに簡単にアクセスできます。

StackInfo: 
    Type: Custom::StackInfo 
    Properties: 
     ServiceToken: !GetAtt StackInfoFunction2.Arn 
     StackName: 
     Ref: "AWS::StackName" 

ラムダコード:

import json 
import cfnresponse 
def handler(event, context): 
    print("stack name: " + event['ResourceProperties']['StackName']) 
    cfnresponse.send(event, context, cfnresponse.SUCCESS, {}) 
+0

はい!私はそれを得た非常にありがとう。効果的なイベント変数は、物事を単純にすることです – Somar

関連する問題