

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.

# Procédure pas à pas : création d'extensions personnalisées AWS AppConfig
<a name="working-with-appconfig-extensions-creating-custom"></a>

Pour créer une AWS AppConfig extension personnalisée, effectuez les tâches suivantes. Chaque tâche est décrite plus en détail dans les rubriques suivantes.

**Note**  
Vous pouvez consulter des exemples d' AWS AppConfig extensions personnalisées sur GitHub :  
[Exemple d'extension qui empêche les déploiements avec un calendrier de `blocked day` moratoire à l'aide de Systems Manager Change Calendar](https://github.com/aws-samples/aws-appconfig-change-calendar-extn)
[Exemple d'extension qui empêche les secrets de s'infiltrer dans les données de configuration à l'aide de git-secrets](https://github.com/aws-samples/aws-appconfig-git-secrets-extn)
[Exemple d'extension qui empêche la fuite d'informations personnelles (PII) dans les données de configuration à l'aide d'Amazon Comprehend](https://github.com/aws-samples/aws-appconfig-pii-extn)

**1. [Création d'une AWS Lambda fonction](https://docs.aws.amazon.com/appconfig/latest/userguide/working-with-appconfig-extensions-creating-custom-lambda.html)**  
Dans la plupart des cas d'utilisation, pour créer une extension personnalisée, vous devez créer une AWS Lambda fonction pour effectuer les calculs et les traitements définis dans l'extension. Il existe une exception à cette règle si vous créez des versions *personnalisées* des [extensions de notification AWS créées](https://docs.aws.amazon.com/appconfig/latest/userguide/working-with-appconfig-extensions-about-predefined.html) pour ajouter ou supprimer des points d'action. Pour plus de détails sur cette exception, consultez[Étape 3 : créer une AWS AppConfig extension personnalisée](working-with-appconfig-extensions-creating-custom-extensions.md).

**2. [Configurez les autorisations pour votre extension personnalisée](https://docs.aws.amazon.com/appconfig/latest/userguide/working-with-appconfig-extensions-creating-custom-permissions.html)**  
Pour configurer les autorisations pour votre extension personnalisée, vous pouvez effectuer l'une des opérations suivantes :  
+ Créez un rôle de service Gestion des identités et des accès AWS (IAM) incluant des `InvokeFunction` autorisations. 
+ Créez une politique de ressources à l'aide de l'action d'[AddPermission](https://docs.aws.amazon.com/lambda/latest/dg/API_AddPermission.html)API Lambda.
Cette procédure pas à pas décrit comment créer le rôle de service IAM.

**3. [Création d'une extension](https://docs.aws.amazon.com/appconfig/latest/userguide/working-with-appconfig-extensions-creating-custom-extensions.html)**  
Vous pouvez créer une extension à l'aide de la AWS AppConfig console ou en appelant l'action d'[CreateExtension](https://docs.aws.amazon.com/appconfig/2019-10-09/APIReference/API_CreateExtension.html)API depuis le AWS CLI SDK ou depuis le SDK. Outils AWS pour PowerShell La procédure pas à pas utilise la console.

**4. [Création d'une association d'extensions](https://docs.aws.amazon.com/appconfig/latest/userguide/working-with-appconfig-extensions-creating-custom-association.html)**  
Vous pouvez créer une association d'extension à l'aide de la AWS AppConfig console ou en appelant l'action d'[CreateExtensionAssociation](https://docs.aws.amazon.com/appconfig/2019-10-09/APIReference/API_CreateExtensionAssociation.html)API depuis AWS CLI le Outils AWS pour PowerShell SDK ou depuis le SDK. La procédure pas à pas utilise la console.

**5. Effectuez une action qui invoque l'extension**  
Après avoir créé l'association, AWS AppConfig invoque l'extension lorsque les points d'action définis par l'extension se produisent pour cette ressource. Par exemple, si vous associez une extension contenant une `PRE_CREATE_HOSTED_CONFIGURATION_VERSION` action, l'extension est invoquée chaque fois que vous créez une nouvelle version de configuration hébergée.

Les rubriques de cette section décrivent chaque tâche impliquée dans la création d'une AWS AppConfig extension personnalisée. Chaque tâche est décrite dans le contexte d'un cas d'utilisation où un client souhaite créer une extension qui sauvegarde automatiquement une configuration dans un compartiment Amazon Simple Storage Service (Amazon S3). L'extension s'exécute chaque fois qu'une configuration hébergée est créée (`PRE_CREATE_HOSTED_CONFIGURATION_VERSION`) ou déployée (`PRE_START_DEPLOYMENT`).

**Topics**
+ [Étape 1 : Création d'une fonction Lambda pour une extension personnalisée AWS AppConfig](working-with-appconfig-extensions-creating-custom-lambda.md)
+ [Étape 2 : configurer les autorisations pour une AWS AppConfig extension personnalisée](working-with-appconfig-extensions-creating-custom-permissions.md)
+ [Étape 3 : créer une AWS AppConfig extension personnalisée](working-with-appconfig-extensions-creating-custom-extensions.md)
+ [Étape 4 : Création d'une association d'extension pour une AWS AppConfig extension personnalisée](working-with-appconfig-extensions-creating-custom-association.md)

# Étape 1 : Création d'une fonction Lambda pour une extension personnalisée AWS AppConfig
<a name="working-with-appconfig-extensions-creating-custom-lambda"></a>

Dans la plupart des cas d'utilisation, pour créer une extension personnalisée, vous devez créer une AWS Lambda fonction pour effectuer les calculs et les traitements définis dans l'extension. Cette section inclut un exemple de code de fonction Lambda pour une extension personnalisée AWS AppConfig . Cette section inclut également les détails de référence des demandes de charge utile et des réponses. *Pour plus d'informations sur la création d'une fonction Lambda, voir [Getting started with Lambda](https://docs.aws.amazon.com/lambda/latest/dg/getting-started.html) dans le manuel du développeur.AWS Lambda *

## Exemple de code
<a name="working-with-appconfig-extensions-creating-custom-lambda-code-sample"></a>

L'exemple de code suivant pour une fonction Lambda, lorsqu'elle est invoquée, sauvegarde automatiquement une AWS AppConfig configuration dans un compartiment Amazon S3. La configuration est sauvegardée chaque fois qu'une nouvelle configuration est créée ou déployée. L'exemple utilise des paramètres d'extension afin que le nom du compartiment n'ait pas besoin d'être codé en dur dans la fonction Lambda. En utilisant les paramètres d'extension, l'utilisateur peut associer l'extension à plusieurs applications et sauvegarder les configurations dans différents buckets. L'exemple de code inclut des commentaires pour expliquer plus en détail la fonction.

**Exemple de fonction Lambda pour une extension AWS AppConfig **

```
from datetime import datetime
import base64
import json

import boto3


def lambda_handler(event, context):
    print(event)
    
    # Extensions that use the PRE_CREATE_HOSTED_CONFIGURATION_VERSION and PRE_START_DEPLOYMENT 
    # action points receive the contents of AWS AppConfig configurations in Lambda event parameters.
    # Configuration contents are received as a base64-encoded string, which the lambda needs to decode 
    # in order to get the configuration data as bytes. For other action points, the content 
    # of the configuration isn't present, so the code below will fail.
    config_data_bytes = base64.b64decode(event["Content"])
    
    # You can specify parameters for extensions. The CreateExtension API action lets you define  
    # which parameters an extension supports. You supply the values for those parameters when you 
    # create an extension association by calling the CreateExtensionAssociation API action.
    # The following code uses a parameter called S3_BUCKET to obtain the value specified in the 
    # extension association. You can specify this parameter when you create the extension 
    # later in this walkthrough.
    extension_association_params = event.get('Parameters', {})
    bucket_name = extension_association_params['S3_BUCKET']
    write_backup_to_s3(bucket_name, config_data_bytes)
    
    # The PRE_CREATE_HOSTED_CONFIGURATION_VERSION and PRE_START_DEPLOYMENT action points can 
    # modify the contents of a configuration. The following code makes a minor change 
    # for the purposes of a demonstration.
    old_config_data_string = config_data_bytes.decode('utf-8')
    new_config_data_string = old_config_data_string.replace('hello', 'hello!')
    new_config_data_bytes = new_config_data_string.encode('utf-8')
    
    # The lambda initially received the configuration data as a base64-encoded string 
    # and must return it in the same format.
    new_config_data_base64string = base64.b64encode(new_config_data_bytes).decode('ascii')
    
    return {
        'statusCode': 200,
        # If you want to modify the contents of the configuration, you must include the new contents in the 
        # Lambda response. If you don't want to modify the contents, you can omit the 'Content' field shown here.
        'Content': new_config_data_base64string
    }


def write_backup_to_s3(bucket_name, config_data_bytes):
    s3 = boto3.resource('s3')
    new_object = s3.Object(bucket_name, f"config_backup_{datetime.now().isoformat()}.txt")
    new_object.put(Body=config_data_bytes)
```

Si vous souhaitez utiliser cet exemple au cours de cette procédure pas à pas, enregistrez-le sous le nom **MyS3ConfigurationBackUpExtension** et copiez l'Amazon Resource Name (ARN) de la fonction. Vous spécifiez l'ARN lorsque vous créez le rôle Gestion des identités et des accès AWS (IAM) assume dans la section suivante. Vous spécifiez l'ARN et le nom lorsque vous créez l'extension.

## Référence de charge utile
<a name="working-with-appconfig-extensions-creating-custom-lambda-payload"></a>

Cette section inclut les informations de référence relatives aux demandes de charge utile et aux réponses pour travailler avec des AWS AppConfig extensions personnalisées.

**Structure de la demande**  
*AtDeploymentTick*

```
{
    'InvocationId': 'o2xbtm7',
    'Parameters': {
        'ParameterOne': 'ValueOne',
        'ParameterTwo': 'ValueTwo'
    },
    'Type': 'OnDeploymentStart',
    'Application': {
        'Id': 'abcd123'
    },
    'Environment': {
        'Id': 'efgh456'
    },
    'ConfigurationProfile': {
        'Id': 'ijkl789',
        'Name': 'ConfigurationName'
    },
    'DeploymentNumber': 2,
    'Description': 'Deployment description',
    'ConfigurationVersion': '2',
    'DeploymentState': 'DEPLOYING',
    'PercentageComplete': '0.0'
}
```

**Structure de la demande**  
*PreCreateHostedConfigurationVersion*

```
{
    'InvocationId': 'vlns753', // id for specific invocation
    'Parameters': {
        'ParameterOne': 'ValueOne',
        'ParameterTwo': 'ValueTwo'
    },
    'ContentType': 'text/plain',
    'ContentVersion': '2',
    'Content': 'SGVsbG8gZWFydGgh', // Base64 encoded content
    'Application': {
        'Id': 'abcd123',
        'Name': 'ApplicationName'
    },
    'ConfigurationProfile': {
        'Id': 'ijkl789',
        'Name': 'ConfigurationName'
    },
    'Description': '',
    'Type': 'PreCreateHostedConfigurationVersion',
    'PreviousContent': {
        'ContentType': 'text/plain',
        'ContentVersion': '1',
        'Content': 'SGVsbG8gd29ybGQh'
    }
}
```

*PreStartDeployment*

```
{
    'InvocationId': '765ahdm',
    'Parameters': {
        'ParameterOne': 'ValueOne',
        'ParameterTwo': 'ValueTwo'
    },
    'ContentType': 'text/plain',
    'ContentVersion': '2',
    'Content': 'SGVsbG8gZWFydGgh',
    'Application': {
        'Id': 'abcd123',
        'Name': 'ApplicationName'
    },
    'Environment': {
        'Id': 'ibpnqlq',
        'Name': 'EnvironmentName'
    },
    'ConfigurationProfile': {
        'Id': 'ijkl789',
        'Name': 'ConfigurationName'
    },
    'DeploymentNumber': 2,
    'Description': 'Deployment description',
    'Type': 'PreStartDeployment'
}
```

**Événements asynchrones**  


*OnStartDeployment, OnDeploymentStep, OnDeployment*

```
{
    'InvocationId': 'o2xbtm7',
    'Parameters': {
        'ParameterOne': 'ValueOne',
        'ParameterTwo': 'ValueTwo'
    },
    'Type': 'OnDeploymentStart',
    'Application': {
        'Id': 'abcd123'
    },
    'Environment': {
        'Id': 'efgh456'
    },
    'ConfigurationProfile': {
        'Id': 'ijkl789',
        'Name': 'ConfigurationName'
    },
    'DeploymentNumber': 2,
    'Description': 'Deployment description',
    'ConfigurationVersion': '2'
}
```

**Structure de réponse**  
Les exemples suivants montrent ce que renvoie votre fonction Lambda en réponse à la demande d'une extension personnalisée AWS AppConfig .

*PRE\$1\$1 Evénements synchrones - réponse réussie*

Si vous souhaitez transformer le contenu, utilisez ce qui suit :

```
"Content": "SomeBase64EncodedByteArray"
```

*AT\$1\$1 Evénements synchrones - réponse réussie*

Si vous souhaitez contrôler les étapes suivantes d'un déploiement (poursuivre un déploiement ou l'annuler), définissez `Directive` et `Description` attributs dans la réponse. 

```
"Directive": "ROLL_BACK"
"Description" "Deployment event log description"
```

`Directive`prend en charge deux valeurs : `CONTINUE` ou`ROLL_BACK`. Utilisez ces énumérations dans votre réponse à la charge utile pour contrôler les prochaines étapes d'un déploiement.

*Événements synchrones - réponse réussie*

Si vous souhaitez transformer le contenu, utilisez ce qui suit :

```
"Content": "SomeBase64EncodedByteArray"
```

Si vous ne souhaitez pas transformer le contenu, ne renvoyez rien.

*Événements asynchrones - réponse réussie*

Ne rien retourner.

*Tous les événements d'erreur*

```
{
        "Error": "BadRequestError",
        "Message": "There was malformed stuff in here",
        "Details": [{
            "Type": "Malformed",
            "Name": "S3 pointer",
            "Reason": "S3 bucket did not exist"
        }]
    }
```

# Étape 2 : configurer les autorisations pour une AWS AppConfig extension personnalisée
<a name="working-with-appconfig-extensions-creating-custom-permissions"></a>

Utilisez la procédure suivante pour créer et configurer un rôle de service Gestion des identités et des accès AWS (IAM) (ou *assumer un rôle*). AWS AppConfig utilise ce rôle pour appeler la fonction Lambda.

**Pour créer un rôle de service IAM et autoriser AWS AppConfig à l'assumer**

1. Ouvrez la console IAM à l’adresse [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. Dans le volet de navigation, sélectionnez **Rôles**, puis **Créer un rôle**.

1. Sous **Sélectionner le type d'entité de confiance**, choisissez **Politique de confiance personnalisée**.

1. Collez la politique JSON suivante dans le champ **Politique de confiance personnalisée**.

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Principal": {
           "Service": "appconfig.amazonaws.com"
         },
         "Action": "sts:AssumeRole"
       }
     ]
   }
   ```

------

   Choisissez **Suivant**.

1. Sur la page **Ajouter des autorisations**, choisissez **Créer une politique**. La page **Créer une stratégie** s'ouvre dans un nouvel onglet.

1. Choisissez l'onglet **JSON**, puis collez la politique d'autorisation suivante dans l'éditeur. L'`lambda:InvokeFunction`action est utilisée pour les points `PRE_*` d'action. L'`lambda:InvokeAsync`action est utilisée pour les points `ON_*` d'action. *Your Lambda ARN*Remplacez-le par le Amazon Resource Name (ARN) de votre Lambda.

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Sid": "VisualEditor0",
         "Effect": "Allow",
         "Action": [
           "lambda:InvokeFunction",
           "lambda:InvokeAsync"
         ],
         "Resource": "arn:aws:lambda:us-east-1:111122223333:function:function-name"
       }
     ]
   }
   ```

------

1. Choisissez **Suivant : Balises**.

1. Sur la page **Ajouter des balises (facultatif)**, ajoutez une ou plusieurs paires clé-valeur, puis choisissez **Suivant :** Réviser.

1. Sur la page **Révision de la politique**, entrez un nom et une description, puis choisissez **Créer une politique**.

1. Dans l'onglet du navigateur correspondant à votre politique de confiance personnalisée, cliquez sur l'icône Actualiser, puis recherchez la politique d'autorisation que vous venez de créer.

1. Cochez la case correspondant à votre politique d'autorisation, puis cliquez sur **Suivant**.

1. Sur la page **Nom, révision et création**, entrez un nom dans le champ **Nom du rôle**, puis entrez une description.

1. Sélectionnez **Créer un rôle**. Le système vous renvoie à la page **Rôles**. Choisissez **Afficher le rôle** dans la bannière.

1. Copiez l'ARN. Vous spécifiez cet ARN lorsque vous créez l'extension.

# Étape 3 : créer une AWS AppConfig extension personnalisée
<a name="working-with-appconfig-extensions-creating-custom-extensions"></a>



Une extension définit une ou plusieurs actions qu'elle exécute au cours d'un AWS AppConfig flux de travail. Par exemple, l'`AWS AppConfig deployment events to Amazon SNS`extension AWS créée inclut une action permettant d'envoyer une notification à une rubrique Amazon SNS. Chaque action est invoquée soit lorsque vous interagissez avec, AWS AppConfig AWS AppConfig soit lorsque vous exécutez un processus en votre nom. C'est ce que l'on appelle *des points d'action*. AWS AppConfig les extensions prennent en charge les points d'action suivants :

**Points d'action PRE\$1\$1** : les actions d'extension configurées sur les points `PRE_*` d'action sont appliquées après la validation de la demande, mais avant AWS AppConfig d'exécuter l'activité correspondant au nom du point d'action. Ces appels d'action sont traités en même temps qu'une demande. Si plusieurs demandes sont effectuées, les appels d'action s'exécutent de manière séquentielle. Notez également que les points `PRE_*` d'action reçoivent et peuvent modifier le contenu d'une configuration. `PRE_*`les points d'action peuvent également répondre à une erreur et empêcher une action de se produire. 
+ `PRE_CREATE_HOSTED_CONFIGURATION_VERSION`
+ `PRE_START_DEPLOYMENT`

**Points d'action ON\$1\$1** : une extension peut également s'exécuter en parallèle avec un AWS AppConfig flux de travail en utilisant un point d'`ON_*`action. `ON_*`les points d'action sont invoqués de manière asynchrone. `ON_*`les points d'action ne reçoivent pas le contenu d'une configuration. Si une extension rencontre une erreur pendant un point `ON_*` d'action, le service ignore l'erreur et poursuit le flux de travail.
+ `ON_DEPLOYMENT_START`
+ `ON_DEPLOYMENT_STEP`
+ `ON_DEPLOYMENT_BAKING`
+ `ON_DEPLOYMENT_COMPLETE`
+ `ON_DEPLOYMENT_ROLLED_BACK`

**Points d'action AT\$1\$1** : les actions d'extension configurées sur les points `AT_*` d'action sont invoquées de manière synchrone et en parallèle à un flux de travail. AWS AppConfig Si une extension rencontre une erreur pendant un point `AT_*` d'action, le service arrête le flux de travail et annule le déploiement.
+ `AT_DEPLOYMENT_TICK`

Le point `AT_DEPLOYMENT_TICK` d'action prend en charge l'intégration de la surveillance par des tiers. `AT_DEPLOYMENT_TICK`est invoqué lors de l'orchestration du traitement du déploiement de la configuration. Si vous utilisez une solution de surveillance tierce (par exemple, Datadog ou New Relic), vous pouvez créer une AWS AppConfig extension qui vérifie la présence d'alarmes au point `AT_DEPLOYMENT_TICK` d'action et, à titre de garde-fou, annule le déploiement s'il déclenche une alarme. 

Si vous utilisez une solution de surveillance tierce telle que Datadog ou New Relic, vous pouvez créer une AWS AppConfig extension qui vérifie la présence d'alarmes au point `AT_DEPLOYMENT_TICK` d'action et, à titre de garde-fou, annule le déploiement s'il déclenche une alarme. Pour plus d'informations, consultez les exemples d'intégration de Datadog et New Relic suivants sur : GitHub 
+ [Datadog](https://github.com/aws-samples/aws-appconfig-tick-extn-for-datadog)
+ [New Relic](https://github.com/aws-samples/sample-aws-appconfig-tick-extn-for-newrelic)

Pour plus d'informations sur les AWS AppConfig extensions, consultez les rubriques suivantes :
+ [Étendre AWS AppConfig les workflows à l'aide d'extensions](working-with-appconfig-extensions.md)
+ [Procédure pas à pas : création d'extensions personnalisées AWS AppConfig](working-with-appconfig-extensions-creating-custom.md)

**Exemple d'extension**  
L'exemple d'extension suivant définit une action qui appelle le point `PRE_CREATE_HOSTED_CONFIGURATION_VERSION` d'action. Sur le `Uri` terrain, l'action spécifie le nom de ressource Amazon (ARN) de la fonction `MyS3ConfigurationBackUpExtension` Lambda créée précédemment dans cette procédure pas à pas. L'action spécifie également l'ARN Gestion des identités et des accès AWS (IAM) assume le rôle créé précédemment dans cette procédure pas à pas.

**Exemple d' AWS AppConfig extension**

```
{
    "Name": "MySampleExtension",
    "Description": "A sample extension that backs up configurations to an S3 bucket.",
    "Actions": {
        "PRE_CREATE_HOSTED_CONFIGURATION_VERSION": [
            {
                "Name": "PreCreateHostedConfigVersionActionForS3Backup",
                "Uri": "arn:aws:lambda:aws-region:111122223333:function:MyS3ConfigurationBackUpExtension",
                "RoleArn": "arn:aws:iam::111122223333:role/ExtensionsTestRole"
            }
        ]
    },
    "Parameters" : {
        "S3_BUCKET": {
            "Required": false
        }
    }
}
```

**Note**  
Pour consulter la syntaxe des demandes et les descriptions des champs lors de la création d'une extension, consultez la [CreateExtension](https://docs.aws.amazon.com/appconfig/2019-10-09/APIReference/API_CreateExtension.html)rubrique du Guide de *référence des AWS AppConfig API*.

**Pour créer une extension (console)**

1. Ouvrez la AWS Systems Manager console à l'adresse [https://console.aws.amazon.com/systems-manager/appconfig/](https://console.aws.amazon.com/systems-manager/appconfig/).

1. Dans le panneau de navigation, sélectionnez **AWS AppConfig**.

1. Dans l'onglet **Extensions**, choisissez **Créer une extension**.

1. Pour **Nom de l'extension**, entrez un nom unique. Pour les besoins de cette procédure pas à pas, entrez**MyS3ConfigurationBackUpExtension**. Entrez éventuellement une description.

1. Dans la section **Actions**, choisissez **Ajouter une nouvelle action**.

1. Pour **Nom de l’action**, saisissez un nom unique. Pour les besoins de cette procédure pas à pas, entrez**PreCreateHostedConfigVersionActionForS3Backup**. Ce nom décrit le point d'action utilisé par l'action et le but de l'extension.

1. Dans la liste des **points d'action**, choisissez **PRE\$1CREATE\$1HOSTED\$1CONFIGURATION\$1VERSION**.

1. Pour **Uri**, choisissez fonction **Lambda, puis choisissez la fonction** dans la liste des fonctions **Lambda**. Si vous ne voyez pas votre fonction, vérifiez que vous vous trouvez bien à l' Région AWS endroit où vous l'avez créée.

1. Pour le rôle **IAM, choisissez le rôle** que vous avez créé plus tôt dans cette procédure pas à pas.

1. Dans la section **Paramètres d'extension (facultatif)**, choisissez **Ajouter un nouveau paramètre**. 

1. Pour **Nom du paramètre**, entrez un nom. Pour les besoins de cette procédure pas à pas, entrez**S3\$1BUCKET**.

1. Répétez les étapes 5 à 11 pour créer une deuxième action pour le point `PRE_START_DEPLOYMENT` d'action.

1. Choisissez **Créer une extension**.

# Personnalisation des extensions AWS de notification créées
<a name="working-with-appconfig-extensions-creating-custom-notification"></a>

Il n'est pas nécessaire de créer un Lambda ou une extension pour utiliser des extensions de notification [AWS créées par des auteurs.](https://docs.aws.amazon.com/appconfig/latest/userguide/working-with-appconfig-extensions-about-predefined.html) Vous pouvez simplement créer une association d'extension, puis effectuer une opération qui appelle l'un des points d'action pris en charge. Par défaut, les extensions de AWS notification créées prennent en charge les points d'action suivants : 
+ `ON_DEPLOYMENT_START`
+ `ON_DEPLOYMENT_COMPLETE`
+ `ON_DEPLOYMENT_ROLLED_BACK`

Si vous créez des versions personnalisées de l'`AWS AppConfig deployment events to Amazon SNS`extension et des `AWS AppConfig deployment events to Amazon SQS` extensions, vous pouvez spécifier les points d'action pour lesquels vous souhaitez recevoir des notifications. 

**Note**  
L'`AWS AppConfig deployment events to EventBridge`extension ne prend pas en charge les points `PRE_*` d'action. Vous pouvez créer une version personnalisée si vous souhaitez supprimer certains des points d'action par défaut attribués à la AWS version créée.

Il n'est pas nécessaire de créer une fonction Lambda si vous créez des versions personnalisées des extensions de notification AWS créées. Il vous suffit de spécifier un Amazon Resource Name (ARN) dans le `Uri` champ correspondant à la nouvelle version de l'extension.
+ Pour une extension de EventBridge notification personnalisée, entrez l'ARN des événements EventBridge par défaut dans le `Uri` champ.
+ Pour une extension de notification Amazon SNS personnalisée, entrez l'ARN d'une rubrique Amazon SNS dans le champ. `Uri`
+ Pour une extension de notification Amazon SQS personnalisée, entrez l'ARN d'une file de messages Amazon SQS dans le champ. `Uri`

# Étape 4 : Création d'une association d'extension pour une AWS AppConfig extension personnalisée
<a name="working-with-appconfig-extensions-creating-custom-association"></a>

Pour créer une extension ou configurer une extension AWS créée par un auteur, vous définissez les points d'action qui invoquent une extension lorsqu'une AWS AppConfig ressource spécifique est utilisée. Par exemple, vous pouvez choisir d'exécuter l'`AWS AppConfig deployment events to Amazon SNS`extension et de recevoir des notifications sur une rubrique Amazon SNS chaque fois qu'un déploiement de configuration est lancé pour une application spécifique. La définition des points d'action invoquant une extension pour une AWS AppConfig ressource spécifique s'appelle une *association d'extension*. Une association d'extension est une relation spécifiée entre une extension et une AWS AppConfig ressource, telle qu'une application ou un profil de configuration.

Une seule AWS AppConfig application peut inclure plusieurs environnements et profils de configuration. Si vous associez une extension à une application ou à un environnement, AWS AppConfig invoque l'extension pour tous les flux de travail liés à l'application ou aux ressources de l'environnement, le cas échéant.

Supposons, par exemple, que vous ayez une AWS AppConfig application appelée MobileApps qui inclut un profil de configuration appelé AccessList. Supposons que l' MobileApps application inclut des environnements bêta, d'intégration et de production. Vous créez une association d'extension pour l'extension AWS de notification Amazon SNS créée et vous associez l'extension à MobileApps l'application. L'extension de notification Amazon SNS est invoquée chaque fois que la configuration est déployée pour l'application dans l'un des trois environnements. 

Utilisez les procédures suivantes pour créer une association d' AWS AppConfig extension à l'aide de la AWS AppConfig console.

**Pour créer une association d'extensions (console)**

1. Ouvrez la AWS Systems Manager console à l'adresse [https://console.aws.amazon.com/systems-manager/appconfig/](https://console.aws.amazon.com/systems-manager/appconfig/).

1. Dans le panneau de navigation, sélectionnez **AWS AppConfig**.

1. Dans l'onglet **Extensions**, choisissez un bouton d'option pour une extension, puis choisissez **Ajouter à la ressource**. Pour les besoins de cette procédure pas à pas, choisissez **ConfigurationBackUpExtensionMyS3**.

1. Dans la section **Détails de la ressource d'extension**, pour **Type de ressource**, choisissez un type de AWS AppConfig ressource. En fonction de la ressource que vous choisissez, vous AWS AppConfig invite à choisir d'autres ressources. Pour les besoins de cette procédure pas à pas, choisissez **Application**.

1. Choisissez une application dans la liste.

1. Dans la section **Paramètres**, vérifiez que **S3\$1BUCKET** est répertorié dans le champ **Clé**. Dans le champ **Valeur**, collez l'ARN des extensions Lambda. Par exemple : `arn:aws:lambda:aws-region:111122223333:function:MyS3ConfigurationBackUpExtension`.

1. Choisissez **Créer une association à la ressource**.

Après avoir créé l'association, vous pouvez invoquer l'`MyS3ConfigurationBackUpExtension`extension en créant un nouveau profil de configuration qui `hosted` la spécifie`SourceUri`. Dans le cadre du flux de travail visant à créer la nouvelle configuration, AWS AppConfig rencontre le point `PRE_CREATE_HOSTED_CONFIGURATION_VERSION` d'action. La rencontre de ce point d'action appelle l'`MyS3ConfigurationBackUpExtension`extension, qui sauvegarde automatiquement la configuration nouvellement créée dans le compartiment S3 spécifié dans la `Parameter` section de l'association d'extensions.