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 sobre el registro de CloudFormation, consulte Uso del registro de AWS CloudFormation.

Los recursos personalizados le permiten escribir la lógica de aprovisionamiento personalizada en plantillas que AWS CloudFormation ejecuta cada vez que cree, actualice (si ha cambiado el recurso personalizado) o elimine pilas. Por ejemplo, es posible que desee incluir recursos que no están disponibles como tipos de recursos de AWS CloudFormation. Puede incluir esos recursos usando recursos personalizados. De esta forma, puede seguir administrando todos los recursos relacionados en una sola pila.

Utilice el tipo de recurso AWS::CloudFormation::CustomResource o Custom::MyCustomResourceTypeName para definir los recursos personalizados de las plantillas. Los recursos personalizados requieren una propiedad: el token de servicio, que especifica a dónde envía AWS CloudFormation las solicitudes, como un tema de Amazon SNS.

nota

Si utiliza la característica de punto de enlace de la VPC, los recursos personalizados en la VPC deben tener acceso a buckets de S3 específicos de AWS CloudFormation. Los recursos personalizados deben enviar las respuestas a una URL de Amazon S3 prefirmada. Si no puede enviar las respuestas a Amazon S3, AWS 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 y responder a las solicitudes de AWS CloudFormation. custom resource provider debe proporcionar un token de servicio que usa template developer.

AWS 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 AWS 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, AWS 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, AWS CloudFormation incluye información como el tipo de solicitud y una dirección URL de Amazon Simple Storage Service prefirmada, a las 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 AWS CloudFormation en una solicitud:

    { "RequestType" : "Create", "ResponseURL" : "http://pre-signed-S3-url-for-response", "StackId" : "arn:aws:cloudformation:us-west-2:123456789012:stack/stack-name/guid", "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 AWS CloudFormation crear una carga personalizada que se enviará a la función de Lambda.

  3. El proveedor de recursos personalizado procesa la solicitud de AWS CloudFormation y devuelve una respuesta de 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 cómo usar NoEcho para enmascarar información confidencial, consulte la práctica recomendada No incluya 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 y responder a las notificaciones que se envían al ARN de un tema específico. AWS 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/stack-name/guid", "RequestId" : "unique id for this create request", "LogicalResourceId" : "MyTestResource", "Data" : { "OutputName1" : "Value1", "OutputName2" : "Value2", } }
  4. Después de obtener una respuesta de SUCCESS, AWS CloudFormation avanza 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.