Referencia de solicitud y respuesta de recursos personalizados de CloudFormation
CloudFormation administra los recursos personalizados mediante un protocolo de solicitud-respuesta que se comunica con su proveedor de recursos personalizados. Cada solicitud incluye un tipo de solicitud (Create, Update o Delete) y sigue este flujo de trabajo de alto nivel:
-
Un desarrollador de plantillas define un recurso personalizado con un
ServiceTokenyServiceTimeouten la plantilla e inicia una operación de pila. -
CloudFormation envía una solicitud JSON al proveedor de recursos personalizados a través de SNS o Lambda.
-
El proveedor de recursos personalizados procesa la solicitud y devuelve una respuesta JSON a una URL de bucket de Amazon S3 prefirmada antes de que venza el tiempo de espera.
-
CloudFormation lee la respuesta y continúa con la operación de la pila. Si no se recibe respuesta alguna antes de que finalice el tiempo de espera, se considera que la solicitud no se ha realizado en la forma correcta y la operación de la pila fallará.
Para obtener más información, consulte Cómo funcionan los recursos personalizados.
En esta sección se describen la estructura, los parámetros y las respuestas esperadas para cada tipo de solicitud.
nota
El tamaño total del cuerpo de la respuesta no puede superar los 4096 bytes.
Configuración de la plantilla
Al definir un recurso personalizado en una plantilla, el desarrollador de la plantilla utiliza AWS::CloudFormation::CustomResource con las siguientes propiedades:
ServiceToken-
Un ARN de tema de Amazon SNS o un ARN de función de Lambda de la misma región que la pila.
Obligatorio: sí
Tipo: cadena
ServiceTimeout-
El tiempo máximo, en segundos, antes de que una operación de recurso personalizado agote el tiempo de espera. Este valor debe estar entre 1 y 3600. Valor predeterminado: 3600 segundos (1 hora).
Obligatorio: no
Tipo: cadena
Se admiten las propiedades del recurso adicional. Las propiedades de los recursos se incluirán como ResourceProperties en la solicitud. El proveedor de recursos personalizados debe determinar qué propiedades son válidas y sus valores aceptables.
Objeto de solicitud
Objeto de respuesta
El proveedor de recursos personalizados envía una respuesta a la URL prefirmada para todos los tipos de recursos. Si el proveedor de recursos personalizados no envía una respuesta, CloudFormation espera hasta que se agote el tiempo de espera de la operación.
La respuesta debe ser un objeto JSON con los campos siguientes:
Status-
Debe ser
SUCCESSoFAILED.Obligatorio: sí
Tipo: cadena
RequestId-
Un ID único para la solicitud. Copie este valor exactamente como aparece en la solicitud.
Obligatorio: sí
Tipo: cadena
StackId-
El nombre de recurso de Amazon (ARN) que identifica la pila que contiene el recurso personalizado. Copie este valor exactamente como aparece en la solicitud.
Obligatorio: sí
Tipo: cadena
LogicalResourceId-
El nombre elegido por el desarrollador de la plantilla (ID lógico) del recurso personalizado en la plantilla de CloudFormation. Copie este valor exactamente como aparece en la solicitud.
Obligatorio: sí
Tipo: cadena
PhysicalResourceId-
Este valor debe ser un identificador exclusivo del proveedor de recursos personalizados y puede tener un tamaño máximo de 1 KB. El valor debe ser una cadena que no esté vacía y debe ser idéntica para todas las respuestas del mismo recurso.
Al actualizar los recursos personalizados, el valor devuelto para
PhysicalResourceIddetermina el comportamiento de la actualización. Si el valor devuelto es el mismo, CloudFormation lo considera una actualización normal. Si el valor cambia, CloudFormation interpreta la actualización como un reemplazo y envía una solicitud de eliminación al antiguo recurso. Para obtener más información, consulte AWS::CloudFormation::CustomResource.Obligatorio: sí
Tipo: cadena
Reason-
Describe el motivo de una respuesta de error.
Obligatorio si
StatusesFAILED. De lo contrario, es opcional.Obligatorio: condicional
Tipo: cadena
NoEcho-
Indique si se enmascara la salida del recurso personalizado cuando se recupera con la función
Fn::GetAtt. Si se establece entrue, todos los valores devueltos se enmascaran con asteriscos (*****), excepto los almacenados en la secciónMetadatade la plantilla. CloudFormation no transforma, modifica ni redacta ninguna información que incluya en la secciónMetadata. El valor predeterminado esfalse.Para obtener más información sobre el uso de
NoEchopara enmascarar información confidencial, consulte la práctica recomendada de No integre credenciales en sus plantillas.Disponible solo para respuestas
CreateyUpdate. No se admite para las respuestasDelete.Obligatorio: no
Tipo: booleano
Data-
Los pares de nombre-valor definidos por el proveedor de recursos personalizados que se enviarán con la respuesta. Puede acceder a los valores proporcionados aquí por nombre en la plantilla con
Fn::GetAtt.Disponible solo para respuestas
CreateyUpdate. No se admite para las respuestasDelete.importante
Si los pares nombre-valor contienen información confidencial, debe usar el campo
NoEchopara enmascarar la salida del recurso personalizado. De lo contrario, los valores son visibles a través de las API que muestran valores de propiedades (comoDescribeStackEvents).Obligatorio: no
Tipo: objeto JSON
Ejemplos de respuestas satisfactorias
Respuesta Create y Update
{
"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"
}
}
DeleteRespuesta de
{
"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"
}
Respuesta de ejemplo con error
{
"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"
}