Obter valores da AWS usando pseudoparâmetros - AWS CloudFormation

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