¿Cómo configuro la propiedad de una pila única de un recurso AWS::StepFunctions::Activity en CloudFormation?

Última actualización: 15/09/2021

Quiero que mi recurso AWS::StepFunctions::Activity sea propiedad de una única pila en AWS CloudFormation.

Descripción corta

Puede mantener la propiedad de un recurso de AWS::StepFunctions::Activity de varias pilas. Por ejemplo, puede crear StackA (Pila A) con la primera plantilla de CloudFormation y StackB (Pila B) con la segunda plantilla.

Plantilla para StackA:

AWSTemplateFormatVersion: "2010-09-09"
Description: Template for StackA
Resources:
  MyActivity:
    Type: AWS::StepFunctions::Activity
    Properties:
      Name: myActivity

Plantilla para StackB:

AWSTemplateFormatVersion: "2010-09-09"
Description: Template for StackB
Resources:
 MyActivityDuplicate:
 Type: AWS::StepFunctions::Activity
 Properties:
 Name: myActivity
 Tags:
 - Key: Key1
   Value: Val1
....

StackA y StackB mostrarán el recurso como CREATE_COMPLETE. Sin embargo, el recurso Activity (Actividad) al que se hace referencia en StackA y StackB tiene las propiedades definidas en la plantilla de StackA. La operación parece correcta, pero las propiedades del recurso no coinciden con la plantilla utilizada por StackA. Cuando se elimina una de las pilas, también se elimina la actividad. No hay ninguna indicación en las otras pilas de que el recurso ya no exista.

Cuando se utiliza CloudFormation, se recomienda asegurarse de que la configuración de un recurso compartido se mantiene en una única pila de CloudFormation. Al hacerlo, se proporciona una única fuente de información para la configuración del recurso. La pila de CloudFormation que mantiene el recurso compartido puede proporcionar el nombre de recurso de Amazon (ARN) del recurso como salida de pila. A continuación, cualquier otra pila que dependa del recurso compartido puede hacer referencia al recurso compartido, como la actividad Step Functions. Para obtener más información sobre las referencias de pila cruzada, consulte Tutorial: Consulte las salidas de recursos de otra pila de AWS CloudFormation.

Resolución

Para resolver el problema, siga los siguientes pasos para cada recurso de AWS::StepFunctions::Activity que se mantenga en varias pilas:

1.    Identifique los ARN compartidos en AWS Personal Health Dashboard de las pilas de CloudFormation que mantienen el recurso AWS::StepFunctions::Activity.

2.    Designe una de las pilas como pila única para mantener la actividad en el futuro.

Complete los siguientes pasos dentro de la pila identificada:

1.    Si no hay ninguna sección Outputs (Salidas) en su plantilla de CloudFormation, agregue una sección Outputs (Salidas) a su plantilla.

2.    Agregue un nuevo resultado a la sección Outputs (Salidas). La nueva salida debe incluir lo siguiente:

  • Un identificador lógico exclusivo para la salida. Por ejemplo: MyActivityArn. Usará su identificador lógico único como clave para la salida en la sección Outputs (Salidas) de la plantilla.
  • Una propiedad Value (Valor) dentro de la salida de la pila. La propiedad Value (Valor) utiliza Ref (Referencia) con el identificador lógico de la actividad como argumento para recuperar el ARN de la actividad.
  • Una propiedad Export (Exportar) a la salida de la pila, con su valor como objeto con una única propiedad Name (Nombre). El valor de la propiedad Name (Nombre) es una cadena que se utiliza para hacer referencia al ARN de esta actividad de otras pilas de CloudFormation. Por ejemplo:
AWSTemplateFormatVersion: "2010-09-09"
Description: Template for StackA
Resources:
  MyActivity:
    Type: AWS::StepFunctions::Activity
    Properties:
      Name: myActivity
Outputs:
  MyActivityArn:
    Value: 
      Ref: MyActivity
    Export:
      Name: MyActivityArn

3.    Actualice su pila con los cambios anteriores.

4.    Compruebe que los recursos que hacen referencia a la actividad sigan utilizando el ARN correcto.

Complete los siguientes pasos para cada pila que haga referencia al recurso de actividad:

1.    En la consola de CloudFormation, identifique el ID lógico del recurso de actividad en la pestaña Resources (Resources) de la pila.

2.    Agregue una propiedad DeletionPolicy a la declaración de recursos de la actividad, si la propiedad no está allí todavía. Defina el valor en Retain (Retener). Por ejemplo:

AWSTemplateFormatVersion: "2010-09-09"
Description: Template for StackB
Resources:
  MyActivityDuplicate:
    Type: AWS::StepFunctions::Activity
    DeletionPolicy: Retain
    Properties:
      Name: myActivity
      Tags:
        - Key: Key1
          Value: Val1
...

3.    Actualice su pila con los cambios anteriores.

4.    Determine qué otros recursos de la plantilla hacen referencia al ARN de esta actividad.

5.    Para cada uno de los recursos que identificó en el paso 4, reemplace la referencia al ARN de la actividad por la función intrínseca Fn::ImportValue. Pase el nombre de exportación que especificó al crear una nueva salida anteriormente como argumento de la función intrínseca. Por ejemplo:

AWSTemplateFormatVersion: "2010-09-09"
Description: Template for StackB
Resources:
  # MyActivityDuplicate:
  #   DeletionPolicy: Retain
  #   Type: AWS::StepFunctions::Activity
  #   Properties:
  #     Name: myActivity
  #     Tags:
  #       - Key: Key1
  #         Value: Val1
  MyStateMachine:
    Type: AWS::StepFunctions::StateMachine
    Properties:
      StateMachineName: MyStateMachine
      RoleArn: arn:aws:iam::111122223333:role/service-role/StatesExecutionRole-us-east-1
      DefinitionString: 
        Fn::Sub:
          - |
              {
                "Comment": "An example using a Task state.",
                "StartAt": "getGreeting",
                "Version": "1.0",
                "TimeoutSeconds": 300,
                "States":
                {
                  "getGreeting": {
                    "Type": "Task",
                    "Resource": "${ActivityArn}",
                    "End": true
                  }
                }
              }
          - ActivityArn:
              Fn::ImportValue: MyActivityArn

6.    Elimine la entrada de la actividad en la sección Resources (Recursos).

7.    Actualice su pila con los cambios anteriores.

8.    Compruebe que los recursos que hacen referencia a la actividad sigan utilizando el ARN correcto.


¿Le resultó útil este artículo?


¿Necesita asistencia técnica o con la facturación?