Como configuro o proprietário de pilha única de um recurso AWS::StepFunctions::Activity no CloudFormation?

Última atualização: 2021-09-15

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.


Este artigo ajudou?


Precisa de ajuda com faturamento ou suporte técnico?