Je crée un modèle yaml CloudFormation et je dois utiliser !GetAtt "TestLambda.Arn"
dans le cadre de la fonction !Sub
dans "AWS :: ApiGateway :: Method". Uri d'intégration:
...
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"
...
En conséquence, je veux obtenir une valeur quelque chose comme ça:
"arn:aws:apigateway:us-east-1:lambda:path/2015-03-31/functions/my-endpoint-lambda/invocations"
Comment puis-je utiliser ces fonctions ensemble et obtenir le résultat souhaité?
Vous n'avez pas besoin d'utiliser !GetAtt
ici, !Sub
décompressera automatiquement les valeurs si vous les placez dans l'espace réservé:
Uri: !Sub arn:aws:apigateway:us-east-1:lambda:path/2015-03-31/functions/${TestLambda.Arn}/invocations
Ceci est expliqué dans la docs :
Si vous spécifiez des noms de paramètre de modèle ou des ID logiques de ressources, tels que
${InstanceTypeParameter}
, AWS CloudFormation renvoie les mêmes valeurs que si vous utilisiez la fonction intrinsèque Ref. Si vous spécifiez des attributs de ressource, tels que${MyInstance.PublicIp}
, AWS CloudFormation renvoie les mêmes valeurs que si vous utilisiez la fonction intrinsèqueFn::GetAtt
.
AWS CloudFormation fournit plusieurs fonctions intégrées qui vous aident à gérer vos piles. Utilisez des fonctions intrinsèques dans vos modèles pour affecter des valeurs à des propriétés qui ne sont disponibles qu'au moment de l'exécution.
La fonction intrinsèque Fn::GetAtt
renvoie la valeur d'un attribut à partir d'une ressource du modèle.
Déclaration
{ "Fn::GetAtt" : [ "logicalNameOfResource", "attributeName" ] }
Fn::GetAtt: [ logicalNameOfResource, attributeName ]
!GetAtt logicalNameOfResource.attributeName
Remarque: ne doit pas être confondu avec un double-point: Fn::GetAtt
est comme Fn_GetAtt
Nous pouvons utiliser Fn::
pour les fonctions intrinsèques imbriquées si vous utilisez d'abord la forme abrégée !
. Alors
!Sub "arn:aws:apigateway:us-east-1:lambda:path/2015-03-31/functions/$(Fn::GetAtt:[TestLambda, Arn])/invocations"