Obter valores da AWS usando pseudoparâmetros
Os pseudoparâmetros são variáveis integradas que fornecem acesso a informações importantes do ambiente da AWS, como IDs de contas, nomes de regiões e detalhes da pilha, que podem mudar entre implantações ou ambientes.
Você pode usar pseudoparâmetros em vez de valores com codificação rígida para tornar seus modelos mais portáteis e fáceis de serem reutilizados em diferentes regiões e Contas da AWS.
Sintaxe
Você pode referenciar pseudoparâmetros usando a função intrínseca Ref
ou a Fn::Sub
.
Ref.
A função intrínseca Ref
usa a sintaxe geral a seguir. Para obter mais informações, consulte Ref.
JSON
{ "Ref" : "AWS::
PseudoParameter
" }
YAML
!Ref AWS::
PseudoParameter
Fn::Sub
A função intrínseca Fn::Sub
usa um formato diferente que inclui a sintaxe ${}
em torno do pseudoparâmetro. Para obter mais informações, consulte Fn::Sub.
JSON
{ "Fn::Sub" : "${AWS::
PseudoParameter
}" }
YAML
!Sub '${AWS::
PseudoParameter
}'
Pseudoparâmetros disponíveis
AWS::AccountId
Devolve o ID da Conta da AWS da conta na qual a pilha está sendo criada, como 123456789012
.
Esse pseudoparâmetro é comumente usado ao definir perfis, políticas e outras políticas de recursos do IAM que envolvem ARNs específicos da conta.
AWS::NotificationARNs
Retorna a lista de nomes de recursos da Amazon (ARNs) dos tópicos do Amazon SNS que recebem as notificações de eventos da pilha. Você pode especificar esses ARNs usando a opção --notification-arns
na AWS CLI ou usando o console enquanto cria ou atualiza sua pilha.
Ao contrário de outros pseudoparâmetros que retornam um valor único, AWS::NotificationARNs
retorna uma lista de ARNs. Para acessar um ARN específico na lista, use a função intrínseca Fn::Select
. Para obter mais informações, consulte Fn::Select.
AWS::NoValue
Remove a propriedade do recurso correspondente quando especificada como um valor de retorno na função intrínseca Fn::If
. Para obter mais informações, consulte Fn::If.
Esse pseudoparâmetro é particularmente útil para criar propriedades de recursos condicionais que só devem ser incluídas em determinadas condições.
AWS::Partition
Retorna a partição onde o recurso se encontra. Para Regiões da AWS padrão, a partição é aws
. Para recursos em outras partições, a partição é aws-
nomedapartição
. Por exemplo, a partição dos recursos na região da China (Pequim e Ningxia) é aws-cn
, e a partição para recursos na região AWS GovCloud (EUA-Oeste) é aws-us-gov
.
A partição faz parte do ARN dos recursos. Usar AWS::Partition
garante que seus modelos funcionem corretamente em diferentes partições da AWS.
AWS::Region
Retorna uma sequência que representa a região na qual o recurso abrangente está sendo criado, como us-west-2
.
Este é um dos pseudoparâmetros mais usados, pois permite que os modelos se adaptem a diferentes Regiões da AWS sem modificação.
AWS::StackId
Retorna o ID (ARN) da pilha, como arn:aws:cloudformation:us-west-2:123456789012:stack/teststack/51af3dc0-da77-11e4-872e-1234567db123
.
AWS::StackName
Retorna o nome da pilha, como teststack
.
O nome da pilha é normalmente usado para criar nomes de recursos exclusivos que são facilmente identificáveis como pertencentes a uma pilha específica.
AWS::URLSuffix
Retorna o sufixo para o domínio da AWS na Região da AWS onde a pilha está implantada. O sufixo é normalmente amazonaws.com
, mas para a região China (Pequim), o sufixo é amazonaws.com.cn
.
Esse parâmetro é particularmente útil ao criar URLs para endpoints de serviços da AWS.
Exemplos
Uso básico
Os exemplos a seguir criam dois recursos: um tópico do Amazon SNS e um alarme do CloudWatch que envia notificações para esse tópico. Eles usam AWS::StackName
, AWS::Region
e AWS::AccountId
para inserir dinamicamente o nome da pilha, a Região da AWS atual e o ID da conta nos ARNs, nas descrições e nos nomes dos recursos.
JSON
{ "Resources": { "MyNotificationTopic": { "Type": "AWS::SNS::Topic", "Properties": { "DisplayName": { "Fn::Sub": "Notifications for ${AWS::StackName}" } } }, "CPUAlarm": { "Type": "AWS::CloudWatch::Alarm", "Properties": { "AlarmDescription": { "Fn::Sub": "Alarm for high CPU in ${AWS::Region}" }, "AlarmName": { "Fn::Sub": "${AWS::StackName}-HighCPUAlarm" }, "MetricName": "CPUUtilization", "Namespace": "AWS/EC2", "Statistic": "Average", "Period": 300, "EvaluationPeriods": 1, "Threshold": 80, "ComparisonOperator": "GreaterThanThreshold", "AlarmActions": [{ "Fn::Sub": "arn:aws:sns:${AWS::Region}:${AWS::AccountId}:${MyNotificationTopic}" }] } } } }
YAML
Resources: MyNotificationTopic: Type: AWS::SNS::Topic Properties: DisplayName: !Sub Notifications for ${AWS::StackName} CPUAlarm: Type: AWS::CloudWatch::Alarm Properties: AlarmDescription: !Sub Alarm for high CPU in ${AWS::Region} AlarmName: !Sub ${AWS::StackName}-HighCPUAlarm MetricName: CPUUtilization Namespace: AWS/EC2 Statistic: Average Period: 300 EvaluationPeriods: 1 Threshold: 80 ComparisonOperator: GreaterThanThreshold AlarmActions: - !Sub arn:aws:sns:${AWS::Region}:${AWS::AccountId}:${MyNotificationTopic}
Usar o AWS::NotificationARNs
Os exemplos a seguir configuram um grupo do Auto Scaling para enviar notificações de eventos de inicialização de instâncias e erros de inicialização. A configuração usa o pseudoparâmetro AWS::NotificationARNs
, que fornece uma lista de ARNs de tópicos do Amazon SNS que foram especificados durante a criação da pilha. A função Fn::Select
escolhe o primeiro ARN dessa lista.
JSON
"myASG": { "Type": "AWS::AutoScaling::AutoScalingGroup", "Properties": { "LaunchTemplate": { "LaunchTemplateId": { "Ref": "myLaunchTemplate" }, "Version": { "Fn::GetAtt": [ "myLaunchTemplate", "LatestVersionNumber" ] } }, "MaxSize": "1", "MinSize": "1", "VPCZoneIdentifier": [ "subnetIdAz1", "subnetIdAz2", "subnetIdAz3" ], "NotificationConfigurations" : [{ "TopicARN" : { "Fn::Select" : [ "0", { "Ref" : "AWS::NotificationARNs" } ] }, "NotificationTypes" : [ "autoscaling:EC2_INSTANCE_LAUNCH", "autoscaling:EC2_INSTANCE_LAUNCH_ERROR" ] }] } }
YAML
myASG: Type: AWS::AutoScaling::AutoScalingGroup Properties: LaunchTemplate: LaunchTemplateId: !Ref myLaunchTemplate Version: !GetAtt myLaunchTemplate.LatestVersionNumber MinSize: '1' MaxSize: '1' VPCZoneIdentifier: - subnetIdAz1 - subnetIdAz2 - subnetIdAz3 NotificationConfigurations: - TopicARN: Fn::Select: - '0' - Ref: AWS::NotificationARNs NotificationTypes: - autoscaling:EC2_INSTANCE_LAUNCH - autoscaling:EC2_INSTANCE_LAUNCH_ERROR
Propriedades condicionais com AWS::NoValue
Os exemplos a seguir criam uma instância de banco de dados do Amazon RDS que usará um snapshot apenas se o ID do snapshot for fornecido. Se a condição UseDBSnapshot
for avaliada como verdadeira, o CloudFormation usará o valor do parâmetro DBSnapshotName
para a propriedade DBSnapshotIdentifier
. Se a condição for avaliada como falsa, o CloudFormation removerá a propriedade DBSnapshotIdentifier
.
JSON
"MyDB" : { "Type" : "AWS::RDS::DBInstance", "Properties" : { "AllocatedStorage" : "5", "DBInstanceClass" : "db.t2.small", "Engine" : "MySQL", "EngineVersion" : "5.5", "MasterUsername" : { "Ref" : "DBUser" }, "MasterUserPassword" : { "Ref" : "DBPassword" }, "DBParameterGroupName" : { "Ref" : "MyRDSParamGroup" }, "DBSnapshotIdentifier" : { "Fn::If" : [ "UseDBSnapshot", {"Ref" : "DBSnapshotName"}, {"Ref" : "AWS::NoValue"} ] } } }
YAML
MyDB: Type: AWS::RDS::DBInstance Properties: AllocatedStorage: '5' DBInstanceClass: db.t2.small Engine: MySQL EngineVersion: '5.5' MasterUsername: Ref: DBUser MasterUserPassword: Ref: DBPassword DBParameterGroupName: Ref: MyRDSParamGroup DBSnapshotIdentifier: Fn::If: - UseDBSnapshot - Ref: DBSnapshotName - Ref: AWS::NoValue