CloudFormation yamlテンプレートを作成し、「AWS :: ApiGateway :: Method」統合URIの!GetAtt "TestLambda.Arn"
関数の一部として!Sub
を使用する必要があります。
...
Type: "AWS::ApiGateway::Method"
Properties:
RestApiId:
Ref: "RestApi"
ResourceId:
Ref: "TestResource"
HttpMethod: "GET"
AuthorizationType: "NONE"
Integration:
Type: "AWS_PROXY"
IntegrationHttpMethod: "POST"
Uri: !Sub "arn:aws:apigateway:us-east-1:lambda:path/2015-03-31/functions/[[place where I want to use !GetAtt "TestLambda.Arn"]]/invocations"
...
結果として、私はそのような値を取得したい:
"arn:aws:apigateway:us-east-1:lambda:path/2015-03-31/functions/my-endpoint-lambda/invocations"
これらの機能を一緒に使用して、望ましい結果を得るにはどうすればよいですか?
ここで!GetAtt
を使用する必要はありません。プレースホルダーに値を配置すると、!Sub
は自動的に値を解凍します。
Uri: !Sub arn:aws:apigateway:us-east-1:lambda:path/2015-03-31/functions/${TestLambda.Arn}/invocations
これは docs で説明されています:
${InstanceTypeParameter}
などのテンプレートパラメーター名またはリソース論理IDを指定すると、AWS CloudFormationはRef組み込み関数を使用した場合と同じ値を返します。${MyInstance.PublicIp}
などのリソース属性を指定すると、AWS CloudFormationは、Fn::GetAtt
組み込み関数を使用した場合と同じ値を返します。
AWS CloudFormationは、スタックの管理に役立ついくつかの組み込み関数を提供します。テンプレートで組み込み関数を使用して、実行時まで使用できないプロパティに値を割り当てます。
Fn::GetAtt
組み込み関数は、テンプレート内のリソースから属性の値を返します。
宣言
{ "Fn::GetAtt" : [ "logicalNameOfResource", "attributeName" ] }
Fn::GetAtt: [ logicalNameOfResource, attributeName ]
!GetAtt logicalNameOfResource.attributeName
注:二重コロンと混同しないでください:Fn::GetAtt
のようなものです Fn_GetAtt
私はそれが古い質問であることを知っていますが、それでもGoogleでの最初の結果:
Parameters:
path:
Type: String
Default: something/script.sh
Resources:
Bucket:
Type: AWS::S3::Bucket
Outputs:
ScriptUrl:
Description: Script Url
Value:
Fn::Sub:
- ${url}${the_path}
- {url: !GetAtt Bucket.WebsiteURL, the_path: !Ref path}
最初にFn::
短い形式を使用する場合、ネストされた組み込み関数に!
を使用できます。そう
!Sub "arn:aws:apigateway:us-east-1:lambda:path/2015-03-31/functions/$(Fn::GetAtt:[TestLambda, Arn])/invocations"