

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Tutorial: Creación de extensiones personalizadas AWS AppConfig
<a name="working-with-appconfig-extensions-creating-custom"></a>

Para crear una AWS AppConfig extensión personalizada, complete las siguientes tareas. Cada tarea se describe más detalladamente en temas posteriores.

**nota**  
Puede ver ejemplos de AWS AppConfig extensiones personalizadas en GitHub:  
[Ejemplo de extensión que impide las implementaciones con un calendario de moratorias de `blocked day` mediante Calendario de cambios de Systems Manager](https://github.com/aws-samples/aws-appconfig-change-calendar-extn)
[Ejemplo de extensión que evita que los secretos se filtren en los datos de configuración mediante git-secrets](https://github.com/aws-samples/aws-appconfig-git-secrets-extn)
[Ejemplo de extensión que evita que la información de identificación personal (PII) se filtre en los datos de configuración mediante Amazon Comprehend](https://github.com/aws-samples/aws-appconfig-pii-extn)

**1. [Cree una AWS Lambda función](https://docs.aws.amazon.com/appconfig/latest/userguide/working-with-appconfig-extensions-creating-custom-lambda.html)**  
En la mayoría de los casos de uso, para crear una extensión personalizada, debe crear una AWS Lambda función para realizar cualquier cálculo y procesamiento definidos en la extensión. Una excepción a esta regla es si se crean versiones *personalizadas* de las [extensiones de notificación creadas de AWS](https://docs.aws.amazon.com/appconfig/latest/userguide/working-with-appconfig-extensions-about-predefined.html) para añadir o eliminar puntos de acción. Para obtener más información sobre esta excepción, consulte [Paso 3: Cree una extensión personalizada AWS AppConfig](working-with-appconfig-extensions-creating-custom-extensions.md).

**2. [Configura los permisos para tu extensión personalizada](https://docs.aws.amazon.com/appconfig/latest/userguide/working-with-appconfig-extensions-creating-custom-permissions.html)**  
Para configurar los permisos para su extensión personalizada, puede hacer una de las siguientes acciones:  
+ Cree un rol de servicio AWS Identity and Access Management (IAM) que incluya `InvokeFunction` permisos. 
+ Cree una política de recursos mediante la acción de la [AddPermission](https://docs.aws.amazon.com/lambda/latest/dg/API_AddPermission.html)API Lambda.
Este tutorial describe cómo crear el rol de servicio de IAM.

**3. [Cree una extensión](https://docs.aws.amazon.com/appconfig/latest/userguide/working-with-appconfig-extensions-creating-custom-extensions.html)**  
Puedes crear una extensión mediante la AWS AppConfig consola o mediante una llamada a la acción de la [CreateExtension](https://docs.aws.amazon.com/appconfig/2019-10-09/APIReference/API_CreateExtension.html)API desde el AWS CLI Herramientas de AWS para PowerShell, o el SDK. En el tutorial se utiliza la consola.

**4. [Crea una asociación de extensiones](https://docs.aws.amazon.com/appconfig/latest/userguide/working-with-appconfig-extensions-creating-custom-association.html)**  
Puedes crear una asociación de extensiones mediante la AWS AppConfig consola o mediante una llamada a la acción de la [CreateExtensionAssociation](https://docs.aws.amazon.com/appconfig/2019-10-09/APIReference/API_CreateExtensionAssociation.html)API desde el AWS CLI Herramientas de AWS para PowerShell, o el SDK. En el tutorial se utiliza la consola.

**5. Realizar una acción que invoque la extensión**  
Tras crear la asociación, AWS AppConfig invoca la extensión cuando se producen los puntos de acción definidos por la extensión para ese recurso. Por ejemplo, si asocia una extensión que contiene una acción de `PRE_CREATE_HOSTED_CONFIGURATION_VERSION`, se invocará la extensión cada vez que cree una nueva versión de la configuración alojada.

En los temas de esta sección, se describen las tareas necesarias para crear una extensión personalizada de AWS AppConfig . Cada tarea se describe en el contexto de un caso de uso en el que un cliente desea crear una extensión que haga automáticamente una copia de seguridad de una configuración en un bucket de Amazon Simple Storage Service (Amazon S3). La extensión se ejecuta cada vez que se crea (`PRE_CREATE_HOSTED_CONFIGURATION_VERSION`) o se implementa (`PRE_START_DEPLOYMENT`) una configuración alojada.

**Topics**
+ [Paso 1: Crear una función Lambda para una extensión personalizada AWS AppConfig](working-with-appconfig-extensions-creating-custom-lambda.md)
+ [Paso 2: Configurar los permisos para una extensión personalizada AWS AppConfig](working-with-appconfig-extensions-creating-custom-permissions.md)
+ [Paso 3: Cree una extensión personalizada AWS AppConfig](working-with-appconfig-extensions-creating-custom-extensions.md)
+ [Paso 4: Cree una asociación de extensiones para una extensión personalizada AWS AppConfig](working-with-appconfig-extensions-creating-custom-association.md)

# Paso 1: Crear una función Lambda para una extensión personalizada AWS AppConfig
<a name="working-with-appconfig-extensions-creating-custom-lambda"></a>

En la mayoría de los casos de uso, para crear una extensión personalizada, debe crear una AWS Lambda función para realizar cualquier cálculo y procesamiento definidos en la extensión. En esta sección se incluye un código de ejemplo de una función Lambda para una extensión personalizada AWS AppConfig . En esta sección también se incluyen detalles de referencia sobre la solicitud y la respuesta de la carga. Para obtener más información acerca de cómo crear funciones de Lambda, consulte [Introducción a Lambda](https://docs.aws.amazon.com/lambda/latest/dg/getting-started.html) en la *Guía del desarrollador de AWS Lambda *.

## Código de muestra
<a name="working-with-appconfig-extensions-creating-custom-lambda-code-sample"></a>

El siguiente código de ejemplo para una función Lambda, cuando se invoca, realiza automáticamente una copia de seguridad de la AWS AppConfig configuración en un bucket de Amazon S3. Se hace una copia de seguridad de la configuración cada vez que se crea o implementa una nueva configuración. El ejemplo emplea parámetros en la extensión, por lo que el nombre del bucket no tiene que estar codificado en la función de Lambda. Al usar parámetros en la extensión, el usuario puede adjuntar la extensión a varias aplicaciones y hacer copias de seguridad de las configuraciones en diferentes buckets. El ejemplo de código incluye comentarios que explican mejor la función.

**Ejemplo de función Lambda para una extensión 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 desea utilizar este ejemplo durante este tutorial, guárdelo con el nombre **MyS3ConfigurationBackUpExtension** y copie el nombre de recurso de Amazon (ARN) de la función. El ARN se especifica al crear la función de asunción AWS Identity and Access Management (IAM) en la siguiente sección. El ARN y el nombre se especifican al crear la extensión.

## Referencia de carga
<a name="working-with-appconfig-extensions-creating-custom-lambda-payload"></a>

En esta sección se incluyen los detalles de referencia de las solicitudes y respuestas de carga útil para trabajar con extensiones personalizadas. AWS AppConfig 

**Estructura de la solicitud**  
*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'
}
```

**Estructura de la solicitud**  
*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'
}
```

**Eventos asíncronos**  


*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'
}
```

**Estructura de una respuesta**  
Los siguientes ejemplos muestran lo que devuelve la función Lambda en respuesta a la solicitud de una extensión personalizada AWS AppConfig .

*Eventos sincrónicos PRE\$1\$1: respuesta exitosa*

Si desea transformar el contenido, utilice lo siguiente:

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

*Eventos sincrónicos AT\$1\$1: respuesta exitosa*

Si desea controlar los siguientes pasos de una implementación (continuar una implementación o revertirla), defina los atributos `Directive` y `Description` en la respuesta. 

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

`Directive` admite dos valores: `CONTINUE` o `ROLL_BACK`. Use estas enumeraciones en su respuesta de carga útil para controlar los siguientes pasos de una implementación.

*Eventos sincrónicos: respuesta exitosa*

Si desea transformar el contenido, utilice lo siguiente:

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

Si no quiere transformar el contenido, no devuelva nada.

*Eventos asíncronos: respuesta exitosa*

Devuelve: nada

*Todos los eventos de error*

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

# Paso 2: Configurar los permisos para una extensión personalizada AWS AppConfig
<a name="working-with-appconfig-extensions-creating-custom-permissions"></a>

*Utilice el siguiente procedimiento para crear y configurar un rol de servicio AWS Identity and Access Management (o asumir un rol) de servicio (IAM).* AWS AppConfig utiliza este rol para invocar la función Lambda.

**Para crear un rol de servicio de IAM y permitir AWS AppConfig asumirlo**

1. Abra la consola de IAM en [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. En el panel de navegación, seleccione **Roles** y luego seleccione **Crear rol**.

1. En **Seleccionar entidad de confianza**, elija **Tipo de entidad de confianza**.

1. Pegue la siguiente política JSON en el campo **Política de confianza personalizada**.

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

****  

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

------

   Elija **Siguiente**.

1. En la página **Asociar política de permisos**, seleccione **Crear política**. La página **Create policy (Crear política)** se abre en una pestaña nueva.

1. Elija la pestaña **JSON** y pegue la siguiente política personalizada en el editor. La acción de `lambda:InvokeFunction` se usa para los puntos de acción de `PRE_*`. La acción de `lambda:InvokeAsync` se usa para los puntos de acción de `ON_*`. *Your Lambda ARN*Sustitúyalo por el Amazon Resource Name (ARN) de su 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. Elija **Siguiente: etiquetas**.

1. En la página **Agregar etiquetas (Opcional)**, añada uno o más pares clave-valor y, a continuación, elija **Siguiente: Revisión**.

1. En la página **Revisar política**, ingrese un nombre y una descripción, y luego elija **Crear política**.

1. En la pestaña del navegador de su política de confianza personalizada, seleccione el icono Actualizar y, a continuación, busque la política de permisos que acaba de crear.

1. Seleccione la casilla de verificación de la política y, a continuación, elija **Siguiente**.

1. En la página **Nombrar, revisar y crear**, ingrese un nombre en el cuadro **Nombre del rol** y, a continuación, escriba una descripción.

1. Elija **Create role**. El sistema le devuelve a la página **Roles**. Elija **Ver rol** en el banner.

1. Copie el ARN. Este ARN se especifica al crear la extensión.

# Paso 3: Cree una extensión personalizada AWS AppConfig
<a name="working-with-appconfig-extensions-creating-custom-extensions"></a>



Una extensión define una o más acciones que realiza durante un AWS AppConfig flujo de trabajo. Por ejemplo, la `AWS AppConfig deployment events to Amazon SNS` extensión AWS creada incluye una acción para enviar una notificación a un tema de Amazon SNS. Cada acción se invoca cuando interactúa AWS AppConfig o cuando se AWS AppConfig realiza un proceso en su nombre. Se denominan *puntos de acción*. AWS AppConfig las extensiones admiten los siguientes puntos de acción:

**Puntos de acción PRE\$1\$1**: las acciones de extensión configuradas en los puntos de acción `PRE_*` se aplican después de la validación de la solicitud, pero antes de que AWS AppConfig realice la actividad correspondiente al nombre del punto de acción. Estas invocaciones de acciones se procesan al mismo tiempo que una solicitud. Si se realiza más de una solicitud, las invocaciones a las acciones se ejecutan de forma secuencial. Tenga en cuenta también que los puntos de acción de `PRE_*` reciben y pueden cambiar el contenido de una configuración. Los puntos de acción `PRE_*` también pueden responder a un error e impedir que se lleve a cabo una acción. 
+ `PRE_CREATE_HOSTED_CONFIGURATION_VERSION`
+ `PRE_START_DEPLOYMENT`

**Puntos de acción ON\$1\$1**: una extensión también se puede ejecutar en paralelo con un AWS AppConfig flujo de trabajo mediante un punto de `ON_*` acción. `ON_*`los puntos de acción se invocan de forma asíncrona. `ON_*`los puntos de acción no reciben el contenido de una configuración. Si una extensión experimenta un error durante un punto de acción de `ON_*`, el servicio ignora el error y continúa con el flujo de trabajo.
+ `ON_DEPLOYMENT_START`
+ `ON_DEPLOYMENT_STEP`
+ `ON_DEPLOYMENT_BAKING`
+ `ON_DEPLOYMENT_COMPLETE`
+ `ON_DEPLOYMENT_ROLLED_BACK`

**Puntos de acción AT\$1\$1**: las acciones de extensión configuradas en los puntos de acción `AT_*` se invocan de forma sincrónica y paralela a un flujo de trabajo de AWS AppConfig . Si una extensión experimenta un error durante un punto de acción `AT_*`, el servicio detiene el flujo de trabajo y revierte la implementación.
+ `AT_DEPLOYMENT_TICK`

El punto de acción `AT_DEPLOYMENT_TICK` admite la integración de la supervisión de terceros. `AT_DEPLOYMENT_TICK` se invoca durante la configuración, la implementación, el procesamiento y la orquestación. Si utilizas una solución de monitorización de terceros (por ejemplo, Datadog o New Relic), puedes crear una AWS AppConfig extensión que compruebe si hay alarmas en el punto de `AT_DEPLOYMENT_TICK` acción y, como barrera de seguridad, anule el despliegue si se activa una alarma. 

Si utilizas una solución de monitorización de terceros, como Datadog o New Relic, puedes crear una AWS AppConfig extensión que compruebe si hay alarmas en el punto de `AT_DEPLOYMENT_TICK` acción y, como barrera de seguridad, anule el despliegue si se activa una alarma. Para obtener más información, consulta los siguientes ejemplos de integración de Datadog y New Relic en: 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)

Para obtener más información sobre AWS AppConfig las extensiones, consulte los siguientes temas:
+ [Ampliación AWS AppConfig de los flujos de trabajo mediante extensiones](working-with-appconfig-extensions.md)
+ [Tutorial: Creación de extensiones personalizadas AWS AppConfig](working-with-appconfig-extensions-creating-custom.md)

**Ejemplo de extensión de**  
El siguiente ejemplo de extensión define una acción que llama al punto de acción de `PRE_CREATE_HOSTED_CONFIGURATION_VERSION`. En el campo `Uri`, la acción especifica el nombre de recurso de Amazon (ARN) de la función de Lambda de `MyS3ConfigurationBackUpExtension` creada anteriormente en este tutorial. La acción también especifica el ARN del rol de asunción AWS Identity and Access Management (IAM) creado anteriormente en este tutorial.

**Ejemplo de extensión AWS AppConfig **

```
{
    "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
        }
    }
}
```

**nota**  
Para ver la sintaxis de las solicitudes y las descripciones de los campos al crear una extensión, consulta el [CreateExtension](https://docs.aws.amazon.com/appconfig/2019-10-09/APIReference/API_CreateExtension.html)tema en la *Referencia de la AWS AppConfig API*.

**Crear una extensión (consola)**

1. Abre la AWS Systems Manager consola en [https://console.aws.amazon.com/systems-manager/appconfig/](https://console.aws.amazon.com/systems-manager/appconfig/).

1. En el panel de navegación, elija **AWS AppConfig**.

1. En la pestaña **Extensiones**, elija **Crear extensión**.

1. En **Nombre de extensión**, escriba un nombre único. Para este tutorial, introduzca **MyS3ConfigurationBackUpExtension**. Si lo desea, introduzca una descripción.

1. En la sección **Acciones**, elija **Añadir nueva acción**.

1. En **Nombre de acción**, escriba un nombre único. Para este tutorial, introduzca **PreCreateHostedConfigVersionActionForS3Backup**. Este nombre describe el punto de acción utilizado por la acción y el propósito de la extensión.

1. En la lista **Punto de acción**, elija **PRE\$1CREATE\$1HOSTED\$1CONFIGURATION\$1VERSION**.

1. Para **Uri**, elija **Función de Lambda** y, a continuación, elija la función en la lista **Función de Lambda**. Si no ve la función, compruebe que se encuentra en el mismo Región de AWS lugar donde la creó.

1. Para el **rol de IAM**, elija el rol que creó anteriormente en este tutorial.

1. En la sección **Parámetros de extensión (opcional)**, elija **Agregar nuevo parámetro**. 

1. En **Nombre de parámetro**, introduzca un nombre. Para este tutorial, introduzca **S3\$1BUCKET**.

1. Repita los pasos del 5 al 11 para crear una segunda acción para el punto de acción de `PRE_START_DEPLOYMENT`.

1. Elija **Crear extensión**.

# Personalización de las extensiones AWS de notificación creadas
<a name="working-with-appconfig-extensions-creating-custom-notification"></a>

No es necesario crear una Lambda o una extensión para utilizar las [extensiones de notificación creadas de AWS](https://docs.aws.amazon.com/appconfig/latest/userguide/working-with-appconfig-extensions-about-predefined.html). Solo hay que crear una asociación de extensión y, a continuación, realizar una operación que llame a uno de los puntos de acción admitidos. De forma predeterminada, las extensiones de notificación AWS creadas admiten los siguientes puntos de acción: 
+ `ON_DEPLOYMENT_START`
+ `ON_DEPLOYMENT_COMPLETE`
+ `ON_DEPLOYMENT_ROLLED_BACK`

Si crea versiones personalizadas de la extensión `AWS AppConfig deployment events to Amazon SNS` y extensiones de `AWS AppConfig deployment events to Amazon SQS`, puede especificar los puntos de acción de los que desea recibir notificaciones. 

**nota**  
La extensión `AWS AppConfig deployment events to EventBridge` no admite los puntos de acción `PRE_*`. Puede crear una versión personalizada si desea eliminar algunos de los puntos de acción predeterminados asignados a la versión AWS creada.

No necesita crear una función de Lambda si crea versiones personalizadas de las extensiones de notificación creadas de AWS . Solo necesita especificar un nombre de recurso de Amazon (ARN) en el campo `Uri` para la nueva versión de la extensión.
+ Para una extensión de EventBridge notificación personalizada, introduzca el ARN de los eventos EventBridge predeterminados en el `Uri` campo.
+ Para una extensión de notificación de Amazon SNS personalizada, introduzca el ARN de un tema de Amazon SNS en el campo `Uri`.
+ Para una extensión de notificación de Amazon SQS personalizada, introduzca el ARN de una cola de mensajes de Amazon SQS en el campo `Uri`.

# Paso 4: Cree una asociación de extensiones para una extensión personalizada AWS AppConfig
<a name="working-with-appconfig-extensions-creating-custom-association"></a>

Para crear una extensión o configurar una extensión AWS creada, debe definir los puntos de acción que invocan una extensión cuando se utiliza un AWS AppConfig recurso específico. Por ejemplo, puede optar por ejecutar la extensión de `AWS AppConfig deployment events to Amazon SNS` y recibir notificaciones sobre un tema de Amazon SNS cada vez que se inicie una implementación de configuración para una aplicación específica. *Definir qué puntos de acción invocan una extensión para un AWS AppConfig recurso específico se denomina asociación de extensiones.* Una asociación de extensiones es una relación especificada entre una extensión y un AWS AppConfig recurso, como una aplicación o un perfil de configuración.

Una sola AWS AppConfig aplicación puede incluir varios entornos y perfiles de configuración. Si asocia una extensión a una aplicación o un entorno, AWS AppConfig invoca la extensión para cualquier flujo de trabajo relacionado con los recursos de la aplicación o el entorno, si corresponde.

Por ejemplo, supongamos que tiene una AWS AppConfig aplicación llamada MobileApps que incluye un perfil de configuración llamado AccessList. Supongamos que la MobileApps aplicación incluye entornos beta, de integración y de producción. Debe crear una asociación de extensión para la extensión AWS de notificación de Amazon SNS creada y asociar la extensión a MobileApps la aplicación. La extensión de notificación de Amazon SNS se invoca cada vez que se implementa la configuración de la aplicación en cualquiera de los tres entornos. 

Utilice los siguientes procedimientos para crear una asociación AWS AppConfig de extensiones mediante la AWS AppConfig consola.

**Para crear una extensión de asociación (consola)**

1. Abra la AWS Systems Manager consola en [https://console.aws.amazon.com/systems-manager/appconfig/](https://console.aws.amazon.com/systems-manager/appconfig/).

1. En el panel de navegación, elija **AWS AppConfig**.

1. En la pestaña **Extensiones**, elija un botón de opción para una extensión y, a continuación, seleccione **Añadir al recurso**. **Para los fines de este tutorial, elija myS3. ConfigurationBackUpExtension**

1. En la sección de **detalles del recurso de la extensión**, en **Tipo de recurso**, elija un tipo de AWS AppConfig recurso. Según el recurso que elija, AWS AppConfig le solicitará que elija otros recursos. Para este tutorial, elija **Aplicación**.

1. Elija su aplicación en la lista.

1. En la sección **Parámetros**, compruebe que **S3\$1BUCKET** aparezca en el campo **Clave**. En el campo **Valor**, pegue el ARN de las extensiones de Lambda. Por ejemplo: `arn:aws:lambda:aws-region:111122223333:function:MyS3ConfigurationBackUpExtension`.

1. Elija **Crear una asociación al recurso**.

Tras crear la asociación, puede invocar la extensión `MyS3ConfigurationBackUpExtension` creando un nuevo perfil de configuración que especifique `hosted` para su `SourceUri`. Como parte del flujo de trabajo para crear la nueva configuración, AWS AppConfig encuentra el punto de `PRE_CREATE_HOSTED_CONFIGURATION_VERSION` acción. Al encontrar este punto de acción, se invoca la extensión `MyS3ConfigurationBackUpExtension`, que automáticamente hace una copia de seguridad de la configuración que se acaba de crear en el bucket de S3 especificado en la sección `Parameter` de la asociación de extensión.