Come configuro la proprietà di una singola pila di una risorsa di AWS:: StepFunctions::Activity in Cloud Formation?

Ultimo aggiornamento: 15-09-2021

Voglio che la mia risorsa AWS። StepFunctions። Activity sia gestita da una singola pila solo in AWS CloudFormation.

Breve descrizione

È possibile mantenere la proprietà di una risorsa AWS። StepFunctions። Activity da più pile. Ad esempio, puoi creare StackA con il primo modello CloudFormation e StackB con il secondo modello.

Modello per StackA:

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

Modello per StackB:

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

StackA e StackB mostreranno entrambe la risorsa come CREATE_COMPLETE. Tuttavia, la risorsa Attività a cui si fa riferimento in StackA e StackB ha le proprietà definite nel modello per StackA. L'operazione viene visualizzata correttamente, ma le proprietà della risorsa non corrispondono al modello utilizzato da StackA. Quando una delle pile viene eliminata, viene eliminata anche l'attività. Non vi è alcuna indicazione nelle altre pile che la risorsa non esiste più.

Quando si utilizza CloudFormation, è consigliabile assicurarsi che la configurazione di una risorsa condivisa sia mantenuta in una singola pila CloudFormation. In questo modo si fornisce un'unica fonte di verità per la configurazione della risorsa. La pila CloudFormation che gestisce la risorsa condivisa può fornire l'Amazon Resource Name (ARN) della risorsa come output della pila. Quindi, qualsiasi altra pila che dipende dalla risorsa condivisa può fare riferimento alla risorsa condivisa, ad esempio l'attività Step Functions. Per ulteriori informazioni sui riferimenti tra pile, consulta Procedura dettagliata: fare riferimento agli output delle risorse in un’altra pila AWS CloudFormation.

Risoluzione

Per risolvere il problema, completare i seguenti passaggi per ogni risorsa AWS። StepFunctions። Activity gestita in più pile:

1.    Identifica gli ARN condivisi in AWS Personal Health Dashboard delle pile CloudFormation che gestiscono la risorsa AWS። StepFunctions። Activity.

2.    Designare una delle pile come singola pila per mantenere l'attività in futuro.

Completa i seguenti passaggi all'interno della pila identificata:

1.    Se non è presente alcuna sezione Outputs nel modello CloudFormation, aggiungi una sezione Outputs al tuo modello.

2.    Aggiungere un nuovo output alla sezione Output. Il nuovo output deve includere quanto segue:

  • Un ID logico univoco per l'output. Ad esempio: myActivityArn. È possibile utilizzare l'ID logico univoco come chiave per l'output nella sezione Output del modello.
  • Una proprietà Value all'interno dell'output della pila. La proprietà Value utilizza Ref con l'ID logico dell'attività come argomento per recuperare l'ARN dell'attività.
  • Una proprietà Export nell'output della pila, con il suo valore come oggetto con una singola proprietà Name. Il valore della proprietà Name è una stringa utilizzata per fare riferimento all'ARN di questa attività da altre pile di CloudFormation. Ad esempio:
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.    Aggiorna la tua pila con le modifiche precedenti.

4.    Verifica che le risorse che fanno riferimento all'attività utilizzino ancora l'ARN corretto.

Completare i passaggi seguenti per ogni pila che fa riferimento alla risorsa attività:

1.    Nella console di CloudFormation, identifica l'ID logico della risorsa attività nella scheda Risorse della pila.

2.    Aggiungere una proprietà DeletionPolicy alla dichiarazione delle risorse dell'attività, se la proprietà non è già presente. Impostate il valore su Conserva. Ad esempio:

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.    Aggiorna la tua pila con le modifiche precedenti.

4.    Determina quali altre risorse nel modello fanno riferimento all'ARN di questa attività.

5.    Per ciascuna delle risorse identificate nel passaggio 4, sostituire il riferimento all'ARN dell'attività con la funzione intrinseca Fn። ImportValue. Passare il nome di esportazione specificato quando è stato creato un nuovo output in precedenza come argomento della funzione intrinseca. Ad esempio:

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.    Rimuovi la voce per l'attività nella sezione Risorse.

7.    Aggiorna la tua pila con le modifiche precedenti.

8.    Verifica che le risorse che fanno riferimento all'attività utilizzino ancora l'ARN corretto.


Questo articolo è stato utile?


Hai bisogno di supporto tecnico o per la fatturazione?