Como configuro o proprietário de pilha única de um recurso AWS::StepFunctions::Activity no CloudFormation?
Quero que meu recurso AWS::StepFunctions::Activity seja mantido por uma só pilha exclusivamente no AWS CloudFormation.
Breve descrição
Você pode manter a propriedade sobre um recurso AWS::StepFunctions::Activity de pilhas múltiplas. Por exemplo, você pode criar StackA com o primeiro modelo do CloudFormation e StackB com o segundo modelo.
Modelo para StackA:
AWSTemplateFormatVersion: "2010-09-09" Description: Template for StackA Resources: MyActivity: Type: AWS::StepFunctions::Activity Properties: Name: myActivity
Modelo 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 e StackB mostrarão o recurso como CREATE_COMPLETE. No entanto, o recurso Activity (Atividade) mencionado em StackA e StackB tem as propriedades que estão definidas no modelo de StackA. A operação é exibida como bem-sucedida, mas as propriedades do recurso não correspondem ao modelo usado por StackA. Quando uma das pilhas é excluída, a atividade também é excluída. Nas outras pilhas, não há indicação de que o recurso não existe mais.
Uma das práticas recomendadas ao usar o CloudFormation é garantir que um recurso compartilhado tenha sua configuração mantida em uma única pilha do CloudFormation. Isso fornece uma fonte unificada de dados para a configuração do recurso. A pilha do CloudFormation que mantém o recurso compartilhado pode fornecer o nome do recurso da Amazon (ARN) do recurso como uma saída de pilha. Em seguida, qualquer outra pilha que dependa do recurso compartilhado poderá mencionar o recurso compartilhado, como uma atividade do Step Functions. Para mais informações sobre referências entre pilhas, consulte Demonstração: consultar saídas de recurso em outra pilha do AWS CloudFormation.
Resolução
Para resolver o problema, execute as etapas a seguir para cada recurso AWS::StepFunctions::Activity que está sendo mantido em pilhas múltiplas:
1. No AWS Personal Health Dashboard, identifique os ARNs compartilhados das pilhas do CloudFormation que mantêm o recurso AWS::StepFunctions::Activity.
2. Atribua uma das pilhas como a pilha única para manter a atividade daqui para frente.
Conclua as seguintes etapas na pilha identificada:
1. Se não houver uma seção Outputs (Saídas) em seu modelo do CloudFormation, adicione uma seção Outputs (Saídas) ao seu modelo.
2. Adicione uma nova saída à seção Outputs (Saídas). Sua nova saída deve incluir o seguinte:
-
Um ID lógico exclusivo para a saída. Por exemplo: MyActivityArn. Você usa seu ID lógico exclusivo como a chave para a saída na seção Outputs (Saídas) do seu modelo.
-
Uma propriedade Value (Valor) na saída da pilha. A propriedade Value (Valor) usa Ref (Referência) com o ID lógico da atividade como argumento para recuperar o ARN da atividade.
-
Uma propriedade Export (Exportar) para a saída da pilha, com seu valor como um objeto com uma única propriedade Name (Nome). O valor da propriedade Name (Nome) é uma string usada para fazer referência ao ARN dessa atividade diretamente de outras pilhas do CloudFormation. Por exemplo:
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. Atualize sua pilha com as alterações anteriores.
4. Valide se os recursos que fazem referência à atividade ainda estão usando o ARN correto.
Conclua as etapas a seguir para cada pilha que faz referência ao recurso de atividade:
1. No console do CloudFormation, identifique o ID lógico do recurso de atividade na guia Resources (Recursos) da sua pilha.
2. Adicione uma propriedade DeletionPolicy à declaração de recurso da atividade, se a propriedade ainda não estiver lá. Defina o valor como Retain (Reter). Por exemplo:
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. Atualize sua pilha com as alterações anteriores.
4. Determine quais outros recursos no modelo estão fazendo referência ao ARN dessa atividade.
5. Para cada um dos recursos que você identificou na etapa 4, substitua a referência ao ARN da atividade pela função intrínseca Fn::ImportValue. Repasse o nome de exportação que você especificou ao criar uma nova saída anteriormente como o argumento da função intrínseca. Por exemplo:
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. Remova a entrada para a atividade na seção Resources (Recursos).
7. Atualize sua pilha com as alterações anteriores.
8. Valide se os recursos que fazem referência à atividade ainda estão usando o ARN correto.
Conteúdo relevante
- AWS OFICIALAtualizada há 3 anos
- AWS OFICIALAtualizada há um ano