

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Utilisation AWS Lambda avec CloudFormation
<a name="services-cloudformation"></a>

Dans un AWS CloudFormation modèle, vous pouvez spécifier une fonction Lambda comme cible d'une ressource personnalisée. Utilisez des ressources personnalisées pour traiter les paramètres, récupérer les valeurs de configuration ou appeler d'autres personnes Services AWS lors des événements du cycle de vie de la pile.

L’exemple suivant appelle une fonction qui est définie ailleurs dans le modèle.

**Example – Définition de ressource personnalisée**  

```
Resources:
  primerinvoke:
    Type: [AWS::CloudFormation::CustomResource](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cfn-customresource.html)
    Version: "1.0"
    Properties:
      ServiceToken: !GetAtt primer.Arn
      FunctionName: !Ref randomerror
```

Le jeton de service est l'Amazon Resource Name (ARN) de la fonction CloudFormation invoquée lorsque vous créez, mettez à jour ou supprimez la pile. Vous pouvez également inclure des propriétés supplémentaires telles que`FunctionName`, qui CloudFormation sont transmises telles quelles à votre fonction.

CloudFormation invoque votre [fonction](invocation-async.md) Lambda de manière asynchrone avec un événement qui inclut une URL de rappel.

**Example — événement de CloudFormation message**  

```
{
    "RequestType": "Create",
    "ServiceToken": "arn:aws:lambda:us-east-1:123456789012:function:lambda-error-processor-primer-14ROR2T3JKU66",
    "ResponseURL": "https://cloudformation-custom-resource-response-useast1.s3-us-east-1.amazonaws.com/arn%3Aaws%3Acloudformation%3Aus-east-1%3A123456789012%3Astack/lambda-error-processor/1134083a-2608-1e91-9897-022501a2c456%7Cprimerinvoke%7C5d478078-13e9-baf0-464a-7ef285ecc786?AWSAccessKeyId=AKIAIOSFODNN7EXAMPLE&Expires=1555451971&Signature=28UijZePE5I4dvukKQqM%2F9Rf1o4%3D",
    "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/lambda-error-processor/1134083a-2608-1e91-9897-022501a2c456",
    "RequestId": "5d478078-13e9-baf0-464a-7ef285ecc786",
    "LogicalResourceId": "primerinvoke",
    "ResourceType": "AWS::CloudFormation::CustomResource",
    "ResourceProperties": {
        "ServiceToken": "arn:aws:lambda:us-east-1:123456789012:function:lambda-error-processor-primer-14ROR2T3JKU66",
        "FunctionName": "lambda-error-processor-randomerror-ZWUC391MQAJK"
    }
}
```

La fonction se charge de renvoyer à l’URL de rappel une réponse indiquant le succès ou l’échec. Pour obtenir la syntaxe de réponse complète, consultez [Objets de réponse des ressources personnalisées](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/crpg-ref-responses.html).

**Example — réponse CloudFormation personnalisée aux ressources**  

```
{
    "Status": "SUCCESS",
    "PhysicalResourceId": "2019/04/18/[$LATEST]b3d1bfc65f19ec610654e4d9b9de47a0",
    "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/lambda-error-processor/1134083a-2608-1e91-9897-022501a2c456",
    "RequestId": "5d478078-13e9-baf0-464a-7ef285ecc786",
    "LogicalResourceId": "primerinvoke"
}
```

CloudFormation fournit une bibliothèque appelée `cfn-response` qui gère l'envoi de la réponse. Si vous définissez votre fonction dans un modèle, vous pouvez demander le nom de la bibliothèque. CloudFormation ajoute ensuite la bibliothèque au package de déploiement qu'elle crée pour la fonction.

Si votre fonction qu’une ressource personnalisée utilise possède une [interface réseau Elastic](configuration-vpc.md#configuration-vpc-enis) qui lui est associée, ajoutez les ressources suivantes à la politique VPC où **region** est la région dans laquelle se trouve la fonction sans les tirets. Par exemple, `us-east-1` est `useast1`. Cela permettra à la ressource personnalisée de répondre à l'URL de rappel qui renvoie un signal à la CloudFormation pile.

```
arn:aws:s3:::cloudformation-custom-resource-response-region",
"arn:aws:s3:::cloudformation-custom-resource-response-region/*",
```

L’exemple de fonction suivant appelle une deuxième fonction. Si l'appel aboutit, la fonction envoie une réponse de confirmation à CloudFormation, et la mise à jour de la pile se poursuit. Le modèle utilise le type de [AWS::Serverless::Function](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-resource-function.html)ressource fourni par AWS Serverless Application Model.

**Example – Fonction de ressource personnalisée**  

```
Transform: 'AWS::Serverless-2016-10-31'
Resources:
  primer:
    Type: [AWS::Serverless::Function](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-resource-function.html)
    Properties:
      Handler: index.handler
      Runtime: nodejs16.x
      InlineCode: |
        var aws = require('aws-sdk');
        var response = require('cfn-response');
        exports.handler = function(event, context) {
            // For Delete requests, immediately send a SUCCESS response.
            if (event.RequestType == "Delete") {
                response.send(event, context, "SUCCESS");
                return;
            }
            var responseStatus = "FAILED";
            var responseData = {};
            var functionName = event.ResourceProperties.FunctionName
            var lambda = new aws.Lambda();
            lambda.invoke({ FunctionName: functionName }, function(err, invokeResult) {
                if (err) {
                    responseData = {Error: "Invoke call failed"};
                    console.log(responseData.Error + ":\n", err);
                }
                else responseStatus = "SUCCESS";
                response.send(event, context, responseStatus, responseData);
            });
        };
      Description: Invoke a function to create a log stream.
      MemorySize: 128
      Timeout: 8
      Role: !GetAtt role.Arn
      Tracing: Active
```

Si la fonction invoquée par la ressource personnalisée n'est pas définie dans un modèle, vous pouvez obtenir le code source à `cfn-response` partir du [module cfn-response](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-lambda-function-code-cfnresponsemodule.html) dans le guide de l' AWS CloudFormation utilisateur.

Pour plus d’informations sur les ressources personnalisées, consultez [Ressources personnalisées](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-custom-resources.html) dans le *Guide de l’utilisateur AWS CloudFormation *.