

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.

# CloudFormation demande de ressource personnalisée et référence de réponse
<a name="crpg-ref"></a>

CloudFormation gère les ressources personnalisées via un protocole de demande-réponse qui communique avec votre fournisseur de ressources personnalisées. Chaque demande inclut un type de demande (`Create``Update`, ou`Delete`) et suit ce flux de travail de haut niveau :

1. Un développeur de modèles définit une ressource personnalisée avec un `ServiceToken` et `ServiceTimeout` dans le modèle et lance une opération de pile.

1. CloudFormation envoie une demande JSON au fournisseur de ressources personnalisées via SNS ou Lambda.

1. Le fournisseur de ressources personnalisées traite la demande et renvoie une réponse JSON à une URL de compartiment Amazon S3 présignée avant l'expiration du délai d'expiration.

1. CloudFormation lit la réponse et poursuit l'opération de pile. Si aucune réponse n'est reçue avant la fin du délai imparti, la demande est considérée comme infructueuse et l'opération de pile échoue.

Pour de plus amples informations, veuillez consulter [Fonctionnement des ressources personnalisées](template-custom-resources.md#how-custom-resources-work).

Cette section décrit la structure, les paramètres et les réponses attendues pour chaque type de demande.

**Note**  
La taille totale du corps de la réponse ne peut pas dépasser 4 096 octets.

## Configuration du modèle
<a name="crpg-ref-template-setup"></a>

Lors de la définition d'une ressource personnalisée dans un modèle, le développeur du modèle utilise [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-cloudformation-customresource.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-cloudformation-customresource.html)les propriétés suivantes :

`ServiceToken`  
Un ARN de rubrique Amazon SNS ou un ARN de fonction Lambda provenant de la même région que la pile.  
*Obligatoire* : oui  
*Type* : chaîne

`ServiceTimeout`  
Durée maximale, en secondes, avant l'expiration d'une opération sur une ressource personnalisée. Il doit s'agir d'une valeur comprise entre 1 et 3 600. Par défaut : 3 600 secondes (1 heure).  
*Obligatoire* : non  
*Type* : chaîne

Des propriétés de ressources supplémentaires sont prises en charge. Les propriétés des ressources seront incluses comme `ResourceProperties` dans la demande. Le fournisseur de ressources personnalisées doit déterminer quelles propriétés sont valides et quelles sont leurs valeurs acceptables.

## Objet Requête
<a name="crpg-ref-requesttypes"></a>

------
#### [ Create ]

Lorsque le développeur du modèle crée une pile contenant une ressource personnalisée, il CloudFormation envoie une demande avec `RequestType` set to`Create`.

Les requêtes de création contiennent les champs suivants :

`RequestType`  
`Create`.  
*Obligatoire* : oui  
*Type* : chaîne

`RequestId`  
Un ID unique pour la demande.  
La combinaison de `StackId` avec `RequestId` forme une valeur que vous pouvez utiliser pour identifier de manière unique une demande sur une ressource personnalisée spécifique.  
*Obligatoire* : oui  
*Type* : chaîne

`StackId`  
L’Amazon Resource Name (ARN) qui identifie la pile contenant la ressource personnalisée.  
La combinaison de `StackId` avec `RequestId` forme une valeur que vous pouvez utiliser pour identifier de manière unique une demande sur une ressource personnalisée spécifique.  
*Obligatoire* : oui  
*Type* : chaîne

`ResponseURL`  
L'URL de réponse identifie un compartiment S3 présigné qui reçoit les réponses du fournisseur de ressources personnalisées à CloudFormation.  
*Obligatoire* : oui  
*Type* : chaîne

`ResourceType`  
Type de ressource personnalisée choisi par le développeur de modèle dans le modèle CloudFormation . Le nom des types de ressources personnalisées ne doit pas dépasser 60 caractères. Il peut inclure des caractères alphanumériques, ainsi que les caractères suivants : `_@-`.  
*Obligatoire* : oui  
*Type* : chaîne

`LogicalResourceId`  
Le nom, choisi par le développeur du modèle, (ID logique) de la ressource personnalisée dans le modèle CloudFormation .  
*Obligatoire* : oui  
*Type* : chaîne

`ResourceProperties`  
Ce champ contient le contenu de l'objet `Properties` envoyé par le développeur du modèle. Son contenu est défini par le custom resource provider.  
*Obligatoire* : non  
*Type* : objet JSON

*Exemple*

```
{
   "RequestType" : "Create",
   "RequestId" : "unique-request-id",
   "StackId" : "arn:aws:cloudformation:us-west-2:123456789012:stack/mystack/id",
   "ResponseURL" : "pre-signed-url-for-create-response",
   "ResourceType" : "Custom::MyCustomResourceType",
   "LogicalResourceId" : "resource-logical-id",
   "ResourceProperties" : {
      "key1" : "string",
      "key2" : [ "list" ],
      "key3" : { "key4" : "map" }
   }
}
```

------
#### [ Update ]

Lorsque le développeur du modèle modifie les propriétés d'une ressource personnalisée dans le modèle et met à jour la pile, CloudFormation envoie une demande au fournisseur de ressources personnalisées avec la valeur `RequestType` définie sur`Update`. Cela signifie que le code de votre ressource personnalisée n’a pas besoin de détecter les modifications dans les propriétés, puisqu’il sait que celles-ci ont été modifiées lorsque le type de requête est `Update`.

Les demandes de mise à jour contiennent les champs suivants :

`RequestType`  
`Update`.  
*Obligatoire* : oui  
*Type* : chaîne

`RequestId`  
Un ID unique pour la demande.  
La combinaison de `StackId` avec `RequestId` forme une valeur que vous pouvez utiliser pour identifier de manière unique une demande sur une ressource personnalisée spécifique.  
*Obligatoire* : oui  
*Type* : chaîne

`StackId`  
L’Amazon Resource Name (ARN) qui identifie la pile contenant la ressource personnalisée.  
La combinaison de `StackId` avec `RequestId` forme une valeur que vous pouvez utiliser pour identifier de manière unique une demande sur une ressource personnalisée spécifique.  
*Obligatoire* : oui  
*Type* : chaîne

`ResponseURL`  
L'URL de réponse identifie un compartiment S3 présigné qui reçoit les réponses du fournisseur de ressources personnalisées à CloudFormation.  
*Obligatoire* : oui  
*Type* : chaîne

`ResourceType`  
Type de ressource personnalisée choisi par le développeur de modèle dans le modèle CloudFormation . Le nom des types de ressources personnalisées ne doit pas dépasser 60 caractères. Il peut inclure des caractères alphanumériques, ainsi que les caractères suivants : `_@-`. Vous ne pouvez pas modifier le type pendant une mise à jour.  
*Obligatoire* : oui  
*Type* : chaîne

`LogicalResourceId`  
Le nom, choisi par le développeur du modèle, (ID logique) de la ressource personnalisée dans le modèle CloudFormation .  
*Obligatoire* : oui  
*Type* : chaîne

`PhysicalResourceId`  
Un identifiant physique personnalisé défini par le fournisseur de ressources qui est unique pour ce fournisseur.  
*Obligatoire* : oui  
*Type* : chaîne

`ResourceProperties`  
Ce champ contient le contenu de l'objet `Properties` envoyé par le développeur du modèle. Son contenu est défini par le custom resource provider.  
*Obligatoire* : non  
*Type* : objet JSON

`OldResourceProperties`  
Utilisé uniquement pour les demandes `Update`. Valeurs des propriétés de ressource qui ont été déclarées précédemment par le template developer dans le modèle CloudFormation .  
*Obligatoire* : oui  
*Type* : objet JSON

*Exemple*

```
{
   "RequestType" : "Update",
   "RequestId" : "unique-request-id",
   "StackId" : "arn:aws:cloudformation:us-west-2:123456789012:stack/mystack/id",
   "ResponseURL" : "pre-signed-url-for-update-response",
   "ResourceType" : "Custom::MyCustomResourceType",
   "LogicalResourceId" : "resource-logical-id",
   "PhysicalResourceId" : "provider-defined-physical-id",
   "ResourceProperties" : {
      "key1" : "new-string",
      "key2" : [ "new-list" ],
      "key3" : { "key4" : "new-map" }
   },
   "OldResourceProperties" : {
      "key1" : "string",
      "key2" : [ "list" ],
      "key3" : { "key4" : "map" }
   }
}
```

------
#### [ Delete ]

Lorsque le développeur du modèle supprime la pile ou supprime la ressource personnalisée du modèle, puis met à jour la pile, CloudFormation envoie une demande avec `RequestType` set to`Delete`.

Les requêtes de suppression contiennent les champs suivants :

`RequestType`  
`Delete`.  
*Obligatoire* : oui  
*Type* : chaîne

`RequestId`  
Un ID unique pour la demande.  
*Obligatoire* : oui  
*Type* : chaîne

`StackId`  
L’Amazon Resource Name (ARN) qui identifie la pile contenant la ressource personnalisée.  
*Obligatoire* : oui  
*Type* : chaîne

`ResponseURL`  
L'URL de réponse identifie un compartiment S3 présigné qui reçoit les réponses du fournisseur de ressources personnalisées à CloudFormation.  
*Obligatoire* : oui  
*Type* : chaîne

`ResourceType`  
Type de ressource personnalisée choisi par le développeur de modèle dans le modèle CloudFormation . Le nom des types de ressources personnalisées ne doit pas dépasser 60 caractères. Il peut inclure des caractères alphanumériques, ainsi que les caractères suivants : `_@-`.  
*Obligatoire* : oui  
*Type* : chaîne

`LogicalResourceId`  
Le nom, choisi par le développeur du modèle, (ID logique) de la ressource personnalisée dans le modèle CloudFormation .  
*Obligatoire* : oui  
*Type* : chaîne

`PhysicalResourceId`  
Un identifiant physique personnalisé défini par le fournisseur de ressources qui est unique pour ce fournisseur.  
*Obligatoire* : oui  
*Type* : chaîne

`ResourceProperties`  
Ce champ contient le contenu de l'objet `Properties` envoyé par le développeur du modèle. Son contenu est défini par le custom resource provider.  
*Obligatoire* : non  
*Type* : objet JSON

*Exemple*

```
{
   "RequestType" : "Delete",
   "RequestId" : "unique-request-id",
   "StackId" : "arn:aws:cloudformation:us-west-2:123456789012:stack/mystack/id",
   "ResponseURL" : "pre-signed-url-for-delete-response",
   "ResourceType" : "Custom::MyCustomResourceType",
   "LogicalResourceId" : "resource-logical-id",
   "PhysicalResourceId" : "provider-defined-physical-id",
   "ResourceProperties" : {
      "key1" : "string",
      "key2" : [ "list" ],
      "key3" : { "key4" : "map" }
   }
}
```

------

## Objet Réponse
<a name="crpg-ref-responses"></a>

Le fournisseur de ressources personnalisées envoie une réponse à l'URL pré-signée pour tous les types de demandes. Si le fournisseur de ressources personnalisées n'envoie pas de réponse, CloudFormation attend la fin de l'opération.

La réponse doit être un objet JSON avec les champs suivants :

`Status`  
Doit être `SUCCESS` ou `FAILED`.  
*Obligatoire* : oui  
*Type* : chaîne

`RequestId`  
Un ID unique pour la demande. Copiez cette valeur exactement telle qu'elle apparaît dans la demande.  
*Obligatoire* : oui  
*Type* : chaîne

`StackId`  
L’Amazon Resource Name (ARN) qui identifie la pile contenant la ressource personnalisée. Copiez cette valeur exactement telle qu'elle apparaît dans la demande.  
*Obligatoire* : oui  
*Type* : chaîne

`LogicalResourceId`  
Le nom, choisi par le développeur du modèle, (ID logique) de la ressource personnalisée dans le modèle CloudFormation . Copiez cette valeur exactement telle qu'elle apparaît dans la demande.  
*Obligatoire* : oui  
*Type* : chaîne

`PhysicalResourceId`  
Cette valeur doit être un identifiant unique pour le fournisseur de ressources personnalisées et sa taille ne peut pas dépasser 1 Ko. La valeur doit être une chaîne non vide et doit être identique pour toutes les réponses pour la même ressource.  
Lors de la mise à jour de ressources personnalisées, la valeur renvoyée pour `PhysicalResourceId` détermine le comportement de mise à jour. Si la valeur reste la même, CloudFormation considère qu'il s'agit d'une mise à jour normale. Si la valeur change, CloudFormation interprète la mise à jour comme un remplacement et envoie une demande de suppression à l'ancienne ressource. Pour de plus amples informations, veuillez consulter [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-cloudformation-customresource.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-cloudformation-customresource.html).  
*Obligatoire* : oui  
*Type* : chaîne

`Reason`  
Décrit le motif d'une réponse à un échec.  
Obligatoire si `Status` a pour valeur `FAILED`. Sinon, c'est facultatif.  
*Obligatoire* : Conditionnelle  
*Type* : chaîne

`NoEcho`  
Indique s'il faut masquer la sortie de la ressource personnalisée lorsque celle-ci est récupérée à l'aide de la fonction `Fn::GetAtt`. Si la valeur est définie sur `true`, toutes les valeurs renvoyées sont masquées par des astérisques (\$1\$1\$1\$1\$1), *à l'exception de celles stockées dans la section `Metadata` du modèle*. CloudFormation ne transforme pas, ne modifie pas et ne censure aucune information que vous incluez dans la section `Metadata`. La valeur par défaut est `false`.  
Pour plus d’informations sur l’utilisation de `NoEcho` pour masquer les informations sensibles, consultez la bonne pratique [N'incorporez pas d'informations d'identification dans vos modèles](security-best-practices.md#creds).  
Disponible uniquement pour `Create` et pour `Update` les réponses. Non pris en charge pour `Delete` les réponses.  
*Obligatoire* : non  
*Type* : valeur booléenne

`Data`  
Les paires nom-valeur définies par le custom resource provider à envoyer avec la réponse. Vous pouvez accéder aux valeurs fournies ici par nom dans le modèle avec `Fn::GetAtt`.  
Disponible uniquement pour `Create` et pour `Update` les réponses. Non pris en charge pour `Delete` les réponses.  
Si les paires nom-valeur contiennent des informations sensibles, vous devez utiliser le champ `NoEcho` pour masquer la sortie de la ressource personnalisée. Dans le cas contraire, les valeurs sont visibles à travers APIs les valeurs des propriétés de cette surface (telles que`DescribeStackEvents`).
*Obligatoire* : non  
*Type* : objet JSON

### Exemples de réponses réussies
<a name="crpg-ref-success-response-examples"></a>

#### `Create`et `Update` réponse
<a name="crpg-ref-success-response-example-1"></a>

```
{
   "Status": "SUCCESS",
   "RequestId": "unique-request-id",
   "StackId": "arn:aws:cloudformation:us-west-2:123456789012:stack/name/id",
   "LogicalResourceId": "resource-logical-id", 
   "PhysicalResourceId": "provider-defined-physical-id",
   "NoEcho": true,
   "Data": {
      "key1": "value1",
      "key2": "value2"
   }
}
```

#### Réponse d'`Delete`
<a name="crpg-ref-success-response-example-2"></a>

```
{
   "Status": "SUCCESS",
   "RequestId": "unique-request-id",
   "StackId": "arn:aws:cloudformation:us-west-2:123456789012:stack/name/id",
   "LogicalResourceId": "resource-logical-id", 
   "PhysicalResourceId": "provider-defined-physical-id"
}
```

### Exemple de réponse échouée
<a name="crpg-ref-failed-response-example"></a>

```
{
   "Status": "FAILED",
   "RequestId": "unique-request-id",
   "StackId": "arn:aws:cloudformation:us-west-2:123456789012:stack/name/id",
   "LogicalResourceId": "resource-logical-id",
   "PhysicalResourceId": "provider-defined-physical-id",
   "Reason": "Required failure reason string"
}
```