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.
Tópicos
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
. 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./aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2
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-bodyfile://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>>
ouAWS::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.