Recursos personalizados - AWS CloudFormation

Recursos personalizados

nota

El registro de CloudFormation ofrece varias ventajas sobre los recursos personalizados, incluidas las siguientes:

  • Compatibilidad con el modelado, el aprovisionamiento y la administración de recursos de aplicaciones de terceros

  • Compatibilidad con las operaciones Create, Read, Update, Delete y List (CRUDL)

  • Compatibilidad con la detección de desviaciones en tipos de recursos privados y de terceros

A diferencia de los recursos personalizados, los recursos basados en registros no necesitarán asociar un tema de Amazon SNS o una función de Lambda para realizar operaciones CRUDL. Para obtener más información, consulte Uso del registro de AWS CloudFormation.

Los recursos personalizados le permiten escribir la lógica de aprovisionamiento personalizada en sus plantillas de CloudFormation y hacer que CloudFormation la ejecute cada vez que cree, actualice (si ha cambiado el recurso personalizado) o elimine una pila. Esto puede resultar útil cuando sus requisitos de aprovisionamiento implican una lógica compleja o flujos de trabajo que no se pueden expresar con los tipos de recursos integrados de CloudFormation.

Por ejemplo, es posible que desee incluir recursos que no están disponibles como tipos de recursos de CloudFormation. Puede incluir esos recursos usando recursos personalizados. De esta forma, puede seguir administrando todos los recursos relacionados en una sola pila.

Para definir un recurso personalizado en su plantilla de CloudFormation, se usan los tipos de recurso AWS::CloudFormation::CustomResource o Custom::MyCustomResourceTypeName. Los recursos personalizados requieren una propiedad, el token de servicio, que especifica a dónde envía CloudFormation las solicitudes, como un tema de Amazon SNS o una función de Lambda.

En los siguientes temas se proporciona información sobre cómo utilizar recursos personalizados.

nota

Si utiliza la característica de punto de conexión de VPC, los recursos personalizados de la VPC deben tener acceso a buckets de S3 específicos de CloudFormation. Los recursos personalizados deben enviar las respuestas a una URL de Amazon S3 prefirmada. Si no pueden enviar respuestas a Amazon S3, CloudFormation no recibirá una respuesta y la operación de pila producirá un error. Para obtener más información, consulte Configuración de puntos de enlace de la VPC para AWS CloudFormation.

Cómo funcionan los recursos personalizados

Cualquier acción realizada por un recurso personalizado implica tres partes.

template developer

Crea una plantilla que incluya un tipo de recurso personalizado. El token template developer especifica el token del servicio y los datos de entrada en la plantilla.

custom resource provider

Posee el recurso personalizado y determina cómo administrar las solicitudes de CloudFormation y responder a ellas. custom resource provider debe proporcionar un token de servicio que usa template developer.

CloudFormation

Durante una operación de pila, envía una solicitud a un token de servicio que se especifica en la plantilla y, a continuación, espera una respuesta antes de continuar con la operación de la pila.

El template developer y el custom resource provider pueden ser la misma persona o entidad, pero el proceso es el mismo. Los siguientes pasos describen el proceso general:

  1. template developer define un recurso personalizado en su plantilla, que incluye un token de servicio y los parámetros de datos de entrada. En función del recurso personalizado, los datos de entrada pueden ser obligatorios; sin embargo, el token de servicio siempre es necesario.

    El token de servicio especifica a dónde envía CloudFormation las solicitudes, como un ARN de tema de Amazon SNS o un ARN de función de AWS Lambda. Para obtener más información, consulte AWS::CloudFormation::CustomResource. El token de servicio y la estructura de los datos de entrada los define custom resource provider.

  2. Cada vez que alguien usa la plantilla para crear, actualizar o eliminar un recurso personalizado, CloudFormation envía una solicitud al token del servicio especificado. El token de servicio debe estar la misma región en la que está creando la pila.

    En la solicitud, CloudFormation incluye información como el tipo de solicitud y una dirección URL de Amazon Simple Storage Service prefirmada, a la que el recurso personalizado envía respuestas. Para obtener más información acerca de lo que se incluye en la solicitud, consulte Objetos de solicitudes de recursos personalizados.

    Los siguientes datos de ejemplo muestran lo que incluye CloudFormation en una solicitud:

    { "RequestType" : "Create", "ResponseURL" : "http://pre-signed-S3-url-for-response", "StackId" : "arn:aws:cloudformation:us-west-2:123456789012:stack/mystack/5b918d10-cd98-11ea-90d5-0a9cd3354c10", "RequestId" : "unique id for this create request", "ResourceType" : "Custom::TestResource", "LogicalResourceId" : "MyTestResource", "ResourceProperties" : { "Name" : "Value", "List" : [ "1", "2", "3" ] } }
    nota

    En este ejemplo, ResourceProperties permite a CloudFormation crear una carga personalizada que se enviará a la función de Lambda.

  3. El proveedor de recursos personalizados procesa la solicitud de CloudFormation y devuelve una respuesta SUCCESS o FAILED a la URL prefirmada. custom resource provider proporciona la respuesta en un archivo con formato JSON y la carga a la URL de S3 prefirmada. Para obtener más información, consulte Uploading objects using pre-signed URLs (Carga de objetos con URL prefirmadas) en la Guía para usuarios de Amazon Simple Storage Service.

    En la respuesta, el custom resource provider también puede incluir pares de nombre-valor a los que el template developer puede obtener acceso. Por ejemplo, la respuesta puede incluir datos de salida si la solicitud ha funcionado o un mensaje de error si ha fallado. Para obtener más información acerca de las respuestas, consulte Objetos de respuesta de recursos personalizados.

    importante

    Si los pares nombre-valor contienen información confidencial, debe usar el campo NoEcho para enmascarar la salida del recurso personalizado. De lo contrario, los valores son visibles a través de las API que muestran valores de propiedades (como DescribeStackEvents).

    Para obtener más información sobre el uso de NoEcho para enmascarar información confidencial, consulte la práctica recomendada de No integre credenciales en sus plantillas.

    custom resource provider es responsable de escuchar y responder a la solicitud. Por ejemplo, en el caso de las notificaciones de Amazon SNS, el proveedor de recursos personalizados debe escuchar las notificaciones que se envían al ARN de un tema específico y responder a ellas. CloudFormation espera y escucha una respuesta en la ubicación de la URL prefirmada.

    Los siguientes datos de ejemplo muestran lo que un recurso personalizado podría incluir en una respuesta:

    { "Status" : "SUCCESS", "PhysicalResourceId" : "TestResource1", "StackId" : "arn:aws:cloudformation:us-west-2:123456789012:stack/mystack/5b918d10-cd98-11ea-90d5-0a9cd3354c10", "RequestId" : "unique id for this create request", "LogicalResourceId" : "MyTestResource", "Data" : { "OutputName1" : "Value1", "OutputName2" : "Value2", } }
  4. Después de obtener una respuesta SUCCESS, CloudFormation continúa con la operación de la pila. Si se recibe una respuesta FAILED o ninguna respuesta, la operación genera un error. Todo dato de salida del recurso personalizado se almacena en la ubicación de la URL prefirmada. El template developer puede recuperar los datos usando la función Fn::GetAtt.