Wie richte ich das Single-Stack-Eigentum an einer AWS::StepFunctions::Activity-Ressource in CloudFormation ein?
Ich möchte, dass meine AWS::StepFunctions::Activity-Ressource nur von einem einzigen Stack in AWS CloudFormation verwaltet wird.
Kurzbeschreibung
Sie können das Eigentum an einer AWS::StepFunctions::Activity-Ressource von mehreren Stacks aus aufrechterhalten. Beispielsweise können Sie StackA mit der ersten CloudFormation-Vorlage und StackB mit der zweiten Vorlage erstellen.
Vorlage für StackA:
AWSTemplateFormatVersion: "2010-09-09" Description: Template for StackA Resources: MyActivity: Type: AWS::StepFunctions::Activity Properties: Name: myActivity
Vorlage für StackB:
AWSTemplateFormatVersion: "2010-09-09" Description: Template for StackB Resources: MyActivityDuplicate: Type: AWS::StepFunctions::Activity Properties: Name: myActivity Tags: - Key: Key1 Value: Val1 ....
StackA und StackB zeigen die Ressource beide als CREATE_COMPLETE an. Die Activity-Ressource, auf die in StackA und StackB verwiesen wird, hat jedoch die Eigenschaften, die in der Vorlage für StackA definiert sind. Der Vorgang scheint erfolgreich zu sein, aber die Eigenschaften der Ressource stimmen nicht mit der von StackA verwendeten Vorlage überein. Wenn einer der Stacks gelöscht wird, wird die Aktivität ebenfalls gelöscht. In den anderen Stacks gibt es keinen Hinweis darauf, dass die Ressource nicht mehr existiert.
Es ist eine bewährte Methode bei der Verwendung von CloudFormation sicherzustellen, dass die Konfiguration einer gemeinsam genutzten Ressource in einem einzigen CloudFormation-Stack verwaltet wird. Dies bietet eine einzige Quelle der Wahrheit für die Konfiguration der Ressource. Der CloudFormation-Stack, der die freigegebene Ressource verwaltet, kann den Amazon-Ressourcennamen (ARN) der Ressource als Stack-Ausgabe bereitstellen. Dann können alle anderen Stacks, die von der freigegebenen Ressource abhängen, auf diese verweisen, z. B. die Aktivität Step Functions. Weitere Informationen zu stackübergreifenden Referenzen finden Sie unter Walkthrough: Verweis auf Ressourcenausgaben in einem anderen AWS CloudFormation-Stack.
Auflösung
Um das Problem zu beheben, führen Sie die folgenden Schritte für jede AWS::StepFunctions::Activity-Ressource durch, die in mehreren Stapeln verwaltet wird:
1. Identifizieren Sie die im AWS Personal Health Dashboard der CloudFormation-Stacks freigegebenen ARNs, die die Ressource AWS::StepFunctions::Activity verwalten.
2. Bestimmen Sie einen der Stacks als den einzigen Stack, der die Aktivität weiterhin aufrechterhält.
Führen Sie innerhalb des identifizierten Stacks die folgenden Schritte aus:
1. Wenn Ihre CloudFormation-Vorlage keinen Abschnitt für Ausgaben enthält, dann fügen Sie Ihrer Vorlage einen solchen Abschnitt hinzu.
2. Fügen Sie dem Abschnitt Ausgaben eine neue Ausgabe hinzu. Die neue Ausgabe muss Folgendes enthalten:
-
Eine eindeutige logische ID für die Ausgabe. Zum Beispiel: MyActivityArn. Sie verwenden Ihre eindeutige logische ID als Schlüssel für die Ausgabe im Abschnitt Ausgaben Ihrer Vorlage.
-
Eine Value-Eigenschaft innerhalb der Stack-Ausgabe. Die Eigenschaft Value verwendet Ref mit der logischen ID der Aktivität als Argument, um den ARN der Aktivität abzurufen.
-
Eine Export-Eigenschaft für die Stack-Ausgabe, deren Wert ein Objekt mit einer einzigen Name-Eigenschaft ist. Der Wert der Eigenschaft Name ist eine Zeichenfolge, die verwendet wird, um auf den ARN dieser Aktivität aus anderen CloudFormation-Stacks zu verweisen. Beispiel:
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. Aktualisieren Sie Ihren Stack mit den vorhergehenden Änderungen.
4. Stellen Sie sicher, dass die Ressourcen, die auf die Aktivität verweisen, immer noch den richtigen ARN verwenden.
Führen Sie die folgenden Schritte für jeden Stack aus, der auf die Activity-Ressource verweist:
1. Identifizieren Sie in der CloudFormation-Konsole unter der Registerkarte Ressourcen für Ihren Stack die logische ID der Activity-Ressource.
2. Fügen Sie eine DeletionPolicy-Eigenschaft zur Ressourcendeklaration der Aktivität hinzu, falls die Eigenschaft nicht bereits vorhanden ist. Setzen Sie den Wert auf Beibehaltung. Beispiel:
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. Aktualisieren Sie Ihren Stack mit den vorhergehenden Änderungen.
4. Bestimmen Sie, welche anderen Ressourcen in der Vorlage auf den ARN dieser Aktivität verweisen.
5. Ersetzen Sie für jede der Ressourcen, die Sie in Schritt 4 identifiziert haben, den Verweis auf den ARN der Aktivität durch die intrinsische Funktion Fn::ImportValue. Übergeben Sie den Exportnamen, den Sie beim Erstellen einer neuen Ausgabe angegeben haben, als Argument für die intrinsische Funktion. Beispiel:
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. Entfernen Sie den Eintrag für die Aktivität im Abschnitt Ressourcen.
7. Aktualisieren Sie Ihren Stack mit den vorhergehenden Änderungen.
8. Stellen Sie sicher, dass die Ressourcen, die auf die Aktivität verweisen, immer noch den richtigen ARN verwenden.
Relevanter Inhalt
- AWS OFFICIALAktualisiert vor 2 Jahren
- AWS OFFICIALAktualisiert vor 2 Jahren
- AWS OFFICIALAktualisiert vor 2 Jahren
- AWS OFFICIALAktualisiert vor 2 Jahren