web-dev-qa-db-ja.com

CloudFormationテンプレートでSub関数とGetAtt関数を同時に使用する方法は?

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"

これらの機能を一緒に使用して、望ましい結果を得るにはどうすればよいですか?

12
Gleb Kosteiko

ここで!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組み込み関数を使用した場合と同じ値を返します。

24
Stefano

AWS CloudFormationは、スタックの管理に役立ついくつかの組み込み関数を提供します。テンプレートで組み込み関数を使用して、実行時まで使用できないプロパティに値を割り当てます。

AWSからのソース

Fn::GetAtt組み込み関数は、テンプレート内のリソースから属性の値を返します。

宣言

  • [〜#〜] json [〜#〜]
    • { "Fn::GetAtt" : [ "logicalNameOfResource", "attributeName" ] }
  • [〜#〜] yaml [〜#〜]
    • 完全な関数名の構文:
    • Fn::GetAtt: [ logicalNameOfResource, attributeName ]
  • 短い形式の構文:
    • !GetAtt logicalNameOfResource.attributeName

注:二重コロンと混同しないでください:Fn::GetAtt のようなものです Fn_GetAtt

5
Premraj

私はそれが古い質問であることを知っていますが、それでも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}
3
Cristian Marin

最初にFn::短い形式を使用する場合、ネストされた組み込み関数に!を使用できます。そう

!Sub "arn:aws:apigateway:us-east-1:lambda:path/2015-03-31/functions/$(Fn::GetAtt:[TestLambda, Arn])/invocations"
0
Gleb Kosteiko