Ao usar o AWS re:Post, você concorda com os AWS re:Post Termos de uso

Como uso parâmetros no AWS Systems Manager Parameter Store para compartilhar valores entre pilhas do CloudFormation?

3 minuto de leitura
0

Recebo uma mensagem de erro quando tento atualizar uma variável de exportação usada em outra pilha do AWS CloudFormation. O erro é: “Não é possível atualizar uma variável de exportação porque ela está sendo usada por outra pilha.”

Breve descrição

Para resolver esse erro, use parâmetros do SSM no AWS Systems Manager Parameter Store para compartilhar valores entre as pilhas do CloudFormation. Um parâmetro SSM armazena um valor em uma pilha (stackA) que outra pilha (stackB) pode usar.

Quando você usa um parâmetro SSM, não há dependência entre as duas pilhas do CloudFormation. Isso ocorre porque o AWS Systems Manager Parameter Store armazena a variável.

Observação: o CloudFormation oferece suporte a vários tipos de parâmetros SSM.

Resolução

1.    Crie uma pilha do CloudFormation (stackA) baseada no seguinte modelo:

{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Parameters": {
    "AvailabilityZone": {
      "Description": "Amazon EC2 instance Availability Zone",
      "Type": "String"
    },
    "AMIId": {
      "Description": "The Amazon Machine Image id",
      "Type": "String"
    },
    "InstanceType": {
      "Description": "The Type of instance",
      "Type": "String"
    }
  },
  "Resources": {
    "myinstance": {
      "Type": "AWS::EC2::Instance",
      "Properties": {
        "AvailabilityZone": {
          "Fn::GetAtt": ["BasicParameter", "Value"]
        },
        "ImageId": {
          "Ref": "AMIId"
        },
        "InstanceType": {
          "Ref": "InstanceType"
        }
      }
    },
    "BasicParameter": {
      "Type": "AWS::SSM::Parameter",
      "Properties": {
        "Name": "AvailabilityZone",
        "Type": "String",
        "Value": {
          "Ref": "AvailabilityZone"
        }
      }
    }
  }
}

O modelo anterior cria uma instância e um parâmetro SSM. O valor do parâmetro do SSM é definido como a Zona de disponibilidade da instância criada. stackA cria um repositório de parâmetros do SSM com Name definido como AvailabilityZone e Value definido como us-east-2a.

Observação: você deve usar um nome exclusivo para seu parâmetro SSM.

2.    Crie outra pilha do CloudFormation (stackB) baseada no modelo a seguir.

{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Parameters": {
    "AMIId": {
      "Description": "The Amazon Machine Image id",
      "Type": "String"
    },
    "InstanceType": {
      "Description": "The Type of instance",
      "Type": "String"
    },
    "AvailabilityZone": {
      "Description": "Amazon EC2 instance Availablity Zone",
      "Type": "AWS::SSM::Parameter::Value<String>",
      "Default": "AvailabilityZone"
    }
  },
  "Mappings": {},
  "Conditions": {},
  "Resources": {
    "myinstance": {
      "Type": "AWS::EC2::Instance",
      "Properties": {
        "AvailabilityZone": {
          "Ref": "AvailabilityZone"
        },
        "ImageId": {
          "Ref": "AMIId"
        },
        "InstanceType": {
          "Ref": "InstanceType"
        }
      }
    }
  }
}

Esse modelo usa o parâmetro do SSM que stackA criou na etapa 1.

Observação: para usar esse parâmetro, você deve declarar um parâmetro em stackB. Defina Type como AWS::SSM::Parameter::Value<String>. A instância criada a partir de stackB é iniciada na zona de disponibilidade us-east-2a.

3.    Para atualizar stackA, altere o parâmetro AvailabilityZone de us-east-2a para us-east-2b.

4.    Inicie a instância de stackA na mesma zona de disponibilidade atualizada de stackB. A instância é substituída e depois iniciada na zona de disponibilidade us-east-2b.

AWS OFICIAL
AWS OFICIALAtualizada há um ano