Comment configurer la propriété d'une pile unique d'une ressource AWS። StepFunctions። Activity dans CloudFormation ?

Dernière mise à jour : 15/09/2021

Je souhaite que ma ressource AWS። StepFunctions። Activity soit gérée par une seule pile dans AWS CloudFormation.

Brève description

Vous pouvez gérer la propriété d'une ressource AWS። StepFunctions። Activity à partir de plusieurs piles. Par exemple, vous pouvez créer StackA avec le premier modèle CloudFormation et StackB avec le second modèle.

Modèle pour StackA :

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

Modèle pour StackB :

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

StackA et StackB afficheront toutes deux la ressource comme CREATE_COMPLETE. Toutefois, la ressource Activité référencée dans StackA et StackB possède les propriétés définies dans le modèle pour StackA. L'opération semble avoir réussi, mais les propriétés de la ressource ne correspondent pas au modèle utilisé par StackA. Lorsque l'une des piles est supprimée, l'activité l'est également. Il n'y a aucune indication dans la ou les autres piles que la ressource n'existe plus.

Lorsque vous utilisez CloudFormation, il est recommandé de s'assurer que la configuration d'une ressource partagée est gérée dans une seule pile CloudFormation. Cela fournit une source unique de vérité pour la configuration de la ressource. La pile CloudFormation qui gère la ressource partagée peut fournir l'ARN de la ressource (Amazon Resource Name) en tant que sortie de pile. Ensuite, toute autre pile qui dépend de la ressource partagée peut référencer la ressource partagée, telle que l'activité Step Functions. Pour plus d'informations sur les références entre piles, consultez la section Procédure pas à pas : création de références à des sorties de ressources dans une autre pile AWS CloudFormation.

Résolution

Pour résoudre le problème, effectuez les étapes suivantes pour chaque ressource AWS። StepFunctions። Activity gérée dans plusieurs piles :

1.    Identifiez les ARN partagés dans le tableau AWS Personal Health Dashboard des piles CloudFormation qui gèrent la ressource AWS። StepFunctions። Activity.

2.    Désignez l'une des piles comme la pile unique qui gèrera par la suite l'activité.

Effectuez les étapes suivantes dans la pile identifiée :

1.    Si votre modèle CloudFormation ne comprend pas de section Sorties, ajoutez-en une.

2.    Ajoutez une nouvelle sortie à la section Sorties. Votre nouvelle sortie doit inclure les éléments suivants :

  • Un ID logique unique pour la sortie. Par exemple : MyActivityArn. Vous utilisez votre ID logique unique comme clé de la sortie dans la section Sorties de votre modèle.
  • Une propriété Valeur dans la sortie de la pile. La propriété Valeur utilise Ref avec l'ID logique de l'activité comme argument pour récupérer l'ARN de l'activité.
  • Une propriété Exporter vers la sortie de la pile, avec sa valeur en tant qu'objet avec une seule propriété Nom. La valeur de la propriété Nom est une chaîne utilisée pour référencer l'ARN de cette activité à partir d'autres piles CloudFormation. Par exemple :
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.    Mettez à jour votre pile avec les modifications précédentes.

4.    Vérifiez que les ressources référençant l'activité utilisent toujours le bon ARN.

Effectuez les étapes suivantes pour chaque pile qui fait référence à la ressource d'activité :

1.    Dans la console CloudFormation, identifiez l'ID logique de la ressource d'activité dans l'onglet Ressources de votre pile.

2.    Ajoutez une propriété DeletionPolicy (Politique de suppression) à la déclaration de ressource de l'activité, si la propriété n'y figure pas déjà. Définissez la valeur sur Retain (Retenir). Par exemple :

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.    Mettez à jour votre pile avec les modifications précédentes.

4.    Déterminez quelles autres ressources du modèle font référence à l'ARN de cette activité.

5.    Pour chacune des ressources identifiées à l'étape 4, remplacez la référence à l'ARN de l'activité par la fonction intrinsèque Fn::ImportValue. Transmettez le nom d'exportation que vous avez spécifié lorsque vous avez créé une nouvelle sortie plus tôt en tant qu'argument de la fonction intrinsèque. Par exemple :

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.    Supprimez l'entrée de l'activité dans la section Ressources.

7.    Mettez à jour votre pile avec les modifications précédentes.

8.    Vérifiez que les ressources référençant l'activité utilisent toujours le bon ARN.


Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?