Faça referência aos recursos existentes e aos parâmetros do Systems Manager com os tipos de parâmetros fornecidos pelo CloudFormation - AWS CloudFormation

Faça referência aos recursos existentes e aos parâmetros do Systems Manager com os tipos de parâmetros fornecidos pelo CloudFormation

Ao criar seu modelo, você pode criar parâmetros que exijam que os usuários insiram identificadores de recursos da AWS existentes ou parâmetros do Systems Manager usando tipos de parâmetros especializados fornecidos pelo CloudFormation.

Visão geral

No CloudFormation, é possível usar parâmetros para personalizar suas pilhas ao fornecer valores de entrada durante a criação ou atualização da pilha. Esse recurso torna seus modelos reutilizáveis e flexíveis em diferentes cenários.

Os parâmetros são definidos na seção Parameters de um modelo do CloudFormation. Cada parâmetro tem um nome e um tipo e pode ser configurado com atributos adicionais, como um valor padrão e valores permitidos. Para ter mais informações, consulte Referência de sintaxe de seção Parameters para modelos do CloudFormation.

O tipo de parâmetro determina o tipo de valor de entrada que o parâmetro pode aceitar. Por exemplo, Number aceita somente valores numéricos, enquanto String aceita entrada de texto.

O CloudFormation oferece vários tipos de parâmetros adicionais que você pode usar em seus modelos para referenciar recursos da AWS existentes e parâmetros do Systems Manager.

Esses tipos de parâmetro se encaixam em duas categorias:

  • Tipos de parâmetros específicos da AWS: o CloudFormation fornece um conjunto de tipos de parâmetros que ajudam a capturar valores inválidos ao criar ou atualizar uma pilha. Ao usar esses tipos de parâmetros, qualquer pessoa que usar seu modelo deverá especificar valores válidos da região e da Conta da AWS em que está criando a pilha.

    Se eles usarem o AWS Management Console, o CloudFormation fornecerá uma lista pré-preenchida dos valores existentes de sua conta e região. Dessa forma, o usuário não precisa se lembrar e digitar corretamente um nome ou ID específico. Em vez disso, ele apenas seleciona valores em uma lista suspensa. Em alguns casos, é possível até mesmo pesquisar valores por ID, nome ou valor da tag Name.

  • Tipos de parâmetros do Systems Manager: o CloudFormation também oferece tipos de parâmetros que correspondem a parâmetros existentes no Systems Manager Parameter Store. Quando você usa esses tipos de parâmetros, qualquer pessoa que usar seu modelo deverá especificar uma chave do repositório de parâmetros como o valor do tipo de parâmetro do Systems Manager. Em seguida, o CloudFormation recupera o valor mais recente no Parameter Store a ser usado em sua pilha. Isso pode ser útil quando você precisa atualizar com frequência os recursos da aplicação com novos valores de propriedades, por exemplo, IDs de imagem de máquina da Amazon (AMI). Consulte informações sobre o Parameter Store em Systems Manager Parameter Store.

Após os parâmetros serem definidos na seção Parameters, você poderá referenciar os valores dos parâmetros em todo o seu modelo do CloudFormation usando a função Ref.

Exemplo

O exemplo mostra um modelo que usa os tipos de parâmetro a seguir.

  • AWS::EC2::VPC::Id

  • AWS::EC2::Subnet::Id

  • AWS::EC2::KeyPair::KeyName

  • AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>

Para criar uma pilha com base nesse modelo, você deve especificar um ID de VPC, um ID de sub-rede e um nome de par de chaves da sua conta. Você também pode especificar uma chave existente do Parameter Store que faça referência ao ID de AMI desejado ou manter o valor padrão de /aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2. Esse parâmetro público é um alias para o ID de AMI regional para a AMI mais recente do Amazon Linux 2. Para obter mais informações sobre parâmetros públicos, consulte Descobrir parâmetros públicos no Parameter Store no Guia do usuário do AWS Systems Manager.

JSON

{ "Parameters": { "VpcId": { "Description": "ID of an existing Virtual Private Cloud (VPC).", "Type": "AWS::EC2::VPC::Id" }, "PublicSubnetId": { "Description": "ID of an existing public subnet within the specified VPC.", "Type": "AWS::EC2::Subnet::Id" }, "KeyName": { "Description": "Name of an existing EC2 key pair to enable SSH access to the instance.", "Type": "AWS::EC2::KeyPair::KeyName" }, "AMIId": { "Description": "Name of a Parameter Store parameter that stores the ID of the Amazon Machine Image (AMI).", "Type": "AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>", "Default": "/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2" } }, "Resources": { "InstanceSecurityGroup": { "Type": "AWS::EC2::SecurityGroup", "Properties": { "GroupDescription": "Enable SSH access via port 22", "VpcId": { "Ref": "VpcId" }, "SecurityGroupIngress": [ { "IpProtocol": "tcp", "FromPort": 22, "ToPort": 22, "CidrIp": "0.0.0.0/0" } ] } }, "Ec2Instance": { "Type": "AWS::EC2::Instance", "Properties": { "KeyName": { "Ref": "KeyName" }, "ImageId": { "Ref": "AMIId" }, "NetworkInterfaces": [ { "AssociatePublicIpAddress": "true", "DeviceIndex": "0", "SubnetId": { "Ref": "PublicSubnetId" }, "GroupSet": [{ "Ref": "InstanceSecurityGroup" }] } ] } } }, "Outputs": { "InstanceId": { "Value": { "Ref": "Ec2Instance" } } } }

YAML

Parameters: VpcId: Description: ID of an existing Virtual Private Cloud (VPC). Type: 'AWS::EC2::VPC::Id' PublicSubnetId: Description: ID of an existing public subnet within the specified VPC. Type: 'AWS::EC2::Subnet::Id' KeyName: Description: Name of an existing EC2 KeyPair to enable SSH access to the instance. Type: 'AWS::EC2::KeyPair::KeyName' AMIId: Description: Name of a Parameter Store parameter that stores the ID of the Amazon Machine Image (AMI). Type: 'AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>' Default: '/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2' Resources: InstanceSecurityGroup: Type: AWS::EC2::SecurityGroup Properties: GroupDescription: Enable SSH access via port 22 VpcId: !Ref VpcId SecurityGroupIngress: - IpProtocol: tcp FromPort: 22 ToPort: 22 CidrIp: 0.0.0.0/0 Ec2Instance: Type: 'AWS::EC2::Instance' Properties: KeyName: !Ref KeyName ImageId: !Ref AMIId NetworkInterfaces: - AssociatePublicIpAddress: "true" DeviceIndex: "0" SubnetId: !Ref PublicSubnetId GroupSet: - !Ref InstanceSecurityGroup Outputs: InstanceId: Value: !Ref Ec2Instance

Comando AWS CLI para criar a pilha

O comando create-stack a seguir cria uma pilha com base no modelo de exemplo.

aws cloudformation create-stack --stack-name MyStack \ --template-body file://sampletemplate.json \ --parameters \ ParameterKey="VpcId",ParameterValue="vpc-a123baa3" \ ParameterKey="PublicSubnetId",ParameterValue="subnet-123a351e" \ ParameterKey="KeyName",ParameterValue="MyKeyName" \ ParameterKey="AMIId",ParameterValue="MyParameterKey"

Para usar um tipo de parâmetro que aceite uma lista de strings, como List<AWS::EC2::Subnet::Id>, é necessário escapar as vírgulas dentro de ParameterValue com uma barra invertida dupla, conforme mostrado no exemplo a seguir.

--parameters ParameterKey="SubnetIDs",ParameterValue="subnet-5ea0c127\\,subnet-6194ea3b\\,subnet-c87f2be0"

Considerações

É altamente recomendável usar referências dinâmicas para restringir o acesso a definições de configuração confidenciais, como credenciais de terceiros. Para ter mais informações, consulte Obter valores armazenados em outros serviços usando referências dinâmicas.

Se desejar permitir que os usuários do modelo especifiquem valores de Contas da AWS diferentes, não use tipos de parâmetros específicos da AWS. Em vez disso, defina parâmetros do tipo String ou CommaDelimitedList.

Há algumas coisas que você deve ter em mente com os tipos de parâmetros do Systems Manager:

  • É possível ver os valores de parâmetros resolvidos na guia Parâmetros da pilha no console ou executando describe-stacks ou describe-change-set. Lembre-se: esses valores são definidos quando a pilha é criada ou atualizada e, portanto, podem ser diferentes dos últimos valores no Parameter Store.

  • Para atualizações de pilha, ao usar a opção Usar valor existente (ou define UsePreviousValue como verdadeiro), isso significa que você deseja continuar usando a mesma chave do Parameter Store, não seu valor. O CloudFormation sempre recupera o valor mais recente.

  • Se você especificar quaisquer valores permitidos ou outras restrições, o CloudFormation os validará com base nas chaves de parâmetros que você especificar, mas não em seus valores. Você deve validar os valores no próprio Parameter Store.

  • Quando você cria ou atualiza pilhas e cria conjuntos de alterações, o CloudFormation usa quaisquer valores existentes no Parameter Store no momento em que a operação é realizada. Se não houver um parâmetro especificado no Parameter Store, sob a Conta da AWS do chamador, o CloudFormation retornará um erro de validação.

  • Quando você executa um conjunto de alterações, o CloudFormation usa os valores especificados no conjunto de alterações. Você deve analisar esses valores antes de executar o conjunto de alterações, pois eles podem ser alterados no Armazenamento de parâmetros entre o momento em que você cria o conjunto de alterações e momento em que o executa.

  • Para parâmetros do Parameter Store armazenados na mesma Conta da AWS, você deverá fornecer o nome do parâmetro. Para parâmetros do Parameter Store compartilhados por outra Conta da AWS, será necessário fornecer o ARN completo do parâmetro.

Tipos de parâmetros específicos da AWS compatíveis

O CloudFormation é compatível com os seguintes tipos específicos da AWS:

AWS::EC2::AvailabilityZone::Name

Uma Zona de disponibilidade, como us-west-2a.

AWS::EC2::Image::Id

Um ID de imagem do Amazon EC2, como ami-0ff8a91507f77f867. Observe que o console do CloudFormation não mostra uma lista suspensa de valores para esse tipo de parâmetro.

AWS::EC2::Instance::Id

Um ID de instância do Amazon EC2, como i-1e731a32.

AWS::EC2::KeyPair::KeyName

Um nome do par de chaves do Amazon EC2.

AWS::EC2::SecurityGroup::GroupName

Um nome de grupo de segurança da VPC padrão, como my-sg-abc.

AWS::EC2::SecurityGroup::Id

Um ID de security group, como sg-a123fd85.

AWS::EC2::Subnet::Id

Um ID de sub-rede, como subnet-123a351e.

AWS::EC2::Volume::Id

Um ID de volume do Amazon EBS, como vol-3cdd3f56.

AWS::EC2::VPC::Id

Um ID de VPC, como vpc-a123baa3.

AWS::Route53::HostedZone::Id

Um ID de zona hospedada do Amazon Route 53, como Z23YXV4OVPL04A.

List<AWS::EC2::AvailabilityZone::Name>

Uma matriz de Zonas de disponibilidade de uma região, como us-west-2a, us-west-2b.

List<AWS::EC2::Image::Id>

Uma matriz de IDs de imagens do Amazon EC2, como ami-0ff8a91507f77f867, ami-0a584ac55a7631c0c. Observe que o console do CloudFormation não mostra uma lista suspensa de valores para esse tipo de parâmetro.

List<AWS::EC2::Instance::Id>

Uma matriz de IDs de instâncias do Amazon EC2, como i-1e731a32, i-1e731a34.

List<AWS::EC2::SecurityGroup::GroupName>

Uma matriz de nomes de grupos de segurança padrão da VPC, como my-sg-abc, my-sg-def.

List<AWS::EC2::SecurityGroup::Id>

Uma matriz de IDs de security groups, como sg-a123fd85, sg-b456fd85.

List<AWS::EC2::Subnet::Id>

Uma matriz de IDs de sub-rede, como subnet-123a351e, subnet-456b351e.

List<AWS::EC2::Volume::Id>

Uma matriz de IDs de volumes do Amazon EBS, como vol-3cdd3f56, vol-4cdd3f56.

List<AWS::EC2::VPC::Id>

Uma matriz de IDs de VPC, como vpc-a123baa3, vpc-b456baa3.

List<AWS::Route53::HostedZone::Id>

Uma matriz de IDs de zonas hospedadas do Amazon Route 53, como Z23YXV4OVPL04A, Z23YXV4OVPL04B.

Tipos de parâmetros compatíveis do Systems Manager

O CloudFormation é compatível com os seguintes tipos de parâmetros do Systems Manager:

AWS::SSM::Parameter::Name

O nome de uma chave de parâmetro do Systems Manager. Use esse tipo de parâmetro somente para verificar se um parâmetro necessário existe. O CloudFormation não recupera o valor real associado ao parâmetro.

AWS::SSM::Parameter::Value<String>

Um parâmetro do Systems Manager cujo valor é uma sequência. Corresponde ao tipo de parâmetro String no Armazenamento de parâmetros.

AWS::SSM::Parameter::Value<List<String>> ou AWS::SSM::Parameter::Value<CommaDelimitedList>

Um parâmetro do Systems Manager cujo valor é uma lista de sequências. Corresponde ao tipo de parâmetro StringList no Armazenamento de parâmetros.

AWS::SSM::Parameter::Value<AWS-specific parameter type>

Um parâmetro do Systems Manager cujo valor é um tipo de parâmetro específico da AWS.

Por exemplo, o seguinte especifica o tipo AWS::EC2::KeyPair::KeyName:

  • AWS::SSM::Parameter::Value<AWS::EC2::KeyPair::KeyName>

AWS::SSM::Parameter::Value<List<AWS-specific parameter type>>

Um parâmetro do Systems Manager cujo valor é uma lista de tipos de parâmetros específicos da AWS.

Por exemplo, o seguinte especifica uma lista de tipos AWS::EC2::KeyPair::KeyName:

  • AWS::SSM::Parameter::Value<List<AWS::EC2::KeyPair::KeyName>>

Tipos de parâmetros incompatíveis do Systems Manager

O CloudFormation não é compatível com o seguinte tipo de parâmetro do Systems Manager:

  • Listas de tipos de parâmetros do Systems Manager. Por exemplo: List<AWS::SSM::Parameter::Value<String>>

Além disso, o CloudFormation não é compatível com a definição de parâmetros de modelo como tipos de parâmetros SecureString do Systems Manager. No entanto, você pode especificar strings seguras como valores de parâmetros para determinados recursos. Para ter mais informações, consulte Obter valores armazenados em outros serviços usando referências dinâmicas.