Obtención de valores de AWS mediante pseudoparámetros
Los seudoparámetros son variables integradas que proporcionan acceso a información importante del entorno de AWS, como los ID de las cuentas, los nombres de las regiones y los detalles de las pilas, que pueden cambiar de una implementación a otra o de un entorno a otro.
Puede usar seudoparámetros en lugar de valores codificados de forma rígida para que sus plantillas sean más portátiles y fáciles de reutilizar en diferentes regiones y Cuentas de AWS.
Sintaxis
Puede hacer referencia a los seudoparámetros mediante la función intrínseca Ref
o la función intrínseca Fn::Sub
.
Ref.
La función intrínseca Ref
utiliza la siguiente sintaxis general. Para obtener más información, consulte Ref.
JSON
{ "Ref" : "AWS::
PseudoParameter
" }
YAML
!Ref AWS::
PseudoParameter
Fn::Sub
La función intrínseca Fn::Sub
utiliza un formato diferente que incluye la sintaxis ${}
alrededor del seudoparámetro. Para obtener más información, consulte Fn::Sub.
JSON
{ "Fn::Sub" : "${AWS::
PseudoParameter
}" }
YAML
!Sub '${AWS::
PseudoParameter
}'
Pseudoparámetros disponibles
AWS::AccountId
Devuelve el ID de Cuenta de AWS de la cuenta en la que se está creando la pila como, por ejemplo 123456789012
.
Este seudoparámetro se suele utilizar al definir los roles de IAM, las políticas y otras políticas de recursos que implican ARN específicos de la cuenta.
AWS::NotificationARNs
Devuelve la lista de Nombres de recursos de Amazon (ARN) de los temas de Amazon SNS que reciben notificaciones de eventos de pilas. Puede especificar estos ARN mediante la opción --notification-arns
en la AWS CLI o a través de la consola mientras crea o actualiza la pila.
A diferencia de otros seudoparámetros que devuelven un único valor, AWS::NotificationARNs
devuelve una lista de ARN. Para acceder a un ARN específico de la lista, utilice la función intrínseca Fn::Select
. Para obtener más información, consulte Fn::Select.
AWS::NoValue
Elimina la propiedad de recurso correspondiente cuando se especifica como valor devuelto en la función intrínseca Fn::If
. Para obtener más información, consulte Fn::If.
Este seudoparámetro es particularmente útil para crear propiedades de recursos condicionales que solo deberían incluirse en determinadas condiciones.
AWS::Partition
Devuelve la partición en la que se encuentra el recurso. Para las Regiones de AWS estándar, la partición es aws
. Para recursos en otras particiones, la partición es aws-
partitionname
. Por ejemplo, la partición de los recursos de la región China (Pekín y Ningxia) es aws-cn
y la partición de los recursos en la región AWS GovCloud (Oeste de EE. UU.) es aws-us-gov
.
La partición forma parte del ARN de los recursos. El uso de AWS::Partition
garantiza que las plantillas funcionen correctamente en diferentes particiones de AWS.
AWS::Region
Devuelve una cadena que representa la región en la que se crea el recurso que abarca, como por ejemplo us-west-2
.
Este es uno de los seudoparámetros más utilizados, ya que permite que las plantillas se adapten a diferentes Regiones de AWS sin modificaciones.
AWS::StackId
Devuelve el ID (ARN) de la pila, como arn:aws:cloudformation:us-west-2:123456789012:stack/teststack/51af3dc0-da77-11e4-872e-1234567db123
.
AWS::StackName
Devuelve el nombre de la pila, como teststack
.
El nombre de la pila se suele utilizar para crear nombres de recursos únicos que se puedan identificar fácilmente como pertenecientes a una pila específica.
AWS::URLSuffix
Devuelve el sufijo del dominio AWS en la Región de AWS donde se implementa la pila. El sufijo normalmente es amazonaws.com
, pero para la región China (Pekín), el sufijo es amazonaws.com.cn
.
Este parámetro resulta especialmente útil a la hora de crear direcciones URL para los puntos de conexión de servicios de AWS.
Ejemplos
Uso básico
En los siguientes ejemplos se crean dos recursos: un tema de Amazon SNS y una alarma de CloudWatch que envía notificaciones a ese tema. Se utiliza AWS::StackName
, AWS::Region
y AWS::AccountId
para insertar dinámicamente el nombre de la pila, la Región de AWS actual y el ID de la cuenta en los nombres, las descripciones y los ARN de los 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}
Uso de AWS::NotificationARNs
En los siguientes ejemplos se configura un grupo de escalado automático para enviar notificaciones de eventos de lanzamiento de instancias y errores de lanzamiento. La configuración usa el seudoparámetro AWS::NotificationARNs
, que proporciona una lista de los ARN de los temas de Amazon SNS que se especificaron al crear la pila. La función Fn::Select
elige el primer ARN de esa 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
Propiedades condicionales con AWS::NoValue
En el siguiente ejemplo se crea una instancia de base de datos de Amazon RDS que utiliza una instantánea solo si se proporciona un ID de instantánea. Si la condición UseDBSnapshot
se evalúa como true, CloudFormation utiliza el valor del parámetro DBSnapshotName
para la propiedad DBSnapshotIdentifier
. Si se evalúa la condición como false, CloudFormation elimina la propiedad 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