擬似パラメータを使用して AWS 値を取得する
擬似パラメータは、アカウント ID、リージョン名、スタックの詳細など、デプロイや環境間で変更される可能性のある重要な AWS 環境情報へのアクセスを提供する組み込み変数です。
ハードコードされた値の代わりに擬似パラメータを使用すると、テンプレートの移植性が向上し、さまざまな AWS アカウント やリージョン間での再利用が容易になります。
構文
組み込み関数 Ref
または Fn::Sub
を使用して、擬似パラメータを参照できます。
参照番号
Ref
組み込み関数は、次の一般的な構文を使用します。詳細については、「Ref」を参照してください。
JSON
{ "Ref" : "AWS::
PseudoParameter
" }
YAML
!Ref AWS::
PseudoParameter
Fn::Sub
Fn::Sub
組み込み関数は、擬似パラメータの周りに ${}
構文を含む別の形式を使用します。詳細については、「Fn::Sub」を参照してください。
JSON
{ "Fn::Sub" : "${AWS::
PseudoParameter
}" }
YAML
!Sub '${AWS::
PseudoParameter
}'
使用可能な擬似パラメータ
AWS::AccountId
123456789012
など、スタックが作成されているアカウントの AWS アカウント ID を返します。
この擬似パラメータは、アカウント固有の ARN を含む IAM ロール、ポリシー、およびその他のリソースポリシーを定義するときに一般的に使用されます。
AWS::NotificationARNs
スタックイベント通知を受信する Amazon SNS トピックの Amazon リソースネーム (ARN) のリストを返します。これらの ARN は、スタックの作成または更新時に、AWS CLI の --notification-arns
オプションまたはコンソールを使用して指定できます。
単一の値を返す他の擬似パラメータとは異なり、AWS::NotificationARNs
は ARN のリストを返します。リスト内の特定の ARN にアクセスするには、Fn::Select
組み込み関数を使用します。詳細については、「Fn::Select」を参照してください。
AWS::NoValue
Fn::If
組み込み関数の戻り値として指定すると、対応するリソースプロパティを削除します。詳細については、「Fn::If」を参照してください。
この擬似パラメータは、特定の条件下でのみ含めるべき条件付きリソースプロパティを作成する場合に特に便利です。
AWS::Partition
リソースがあるパーティションを返します。標準 AWS リージョン の場合、パーティションは aws
です。他のパーティションのリソースの場合、パーティションは aws-
partitionname
です。たとえば、中国 (北京および寧夏) リージョンにあるリソースのパーティションは aws-cn
で、AWS GovCloud (米国西部) リージョンにあるリソースのパーティションは aws-us-gov
です。
パーティションは、リソースの ARN の一部を形成します。AWS::Partition
を使用することで、テンプレートがさまざまな AWS パーティション間で正しく動作します。
AWS::Region
us-west-2
など、包括的なリソースが作成されているリージョンを表す文字列を返します。
これは、テンプレートが変更なしでさまざまな AWS リージョン に適応できるため、最も一般的に使用される擬似パラメータの 1 つです。
AWS::StackId
スタックの ID (ARN) を返します (例: arn:aws:cloudformation:us-west-2:123456789012:stack/teststack/51af3dc0-da77-11e4-872e-1234567db123
)。
AWS::StackName
スタックの名前を返します (例: teststack
)。
スタック名は、一般的に、特定のスタックに属するものとして簡単に識別できる一意のリソース名を作成するために使用されます。
AWS::URLSuffix
スタックがデプロイされている AWS リージョン の AWS ドメインのサフィックスを返します。サフィックスは通常 amazonaws.com
ですが、中国 (北京) リージョンの場合、サフィックスは amazonaws.com.cn
です。
このパラメータは、AWS サービスエンドポイントの URL を作成するときに特に便利です。
例
基本的な使用法
次の例では、Amazon SNS トピックと、そのトピックに通知を送信する CloudWatch アラームの 2 つのリソースを作成します。これらは AWS::StackName
、AWS::Region
、および AWS::AccountId
を使用して、スタック名、現在の AWS リージョン、およびアカウント ID をリソース名、説明、および ARN に動的に挿入します。
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}
AWS::NotificationARNs の使用
次の例では、インスタンス起動イベントと起動エラーの通知を送信するように Auto Scaling グループを設定します。この設定では、AWS::NotificationARNs
擬似パラメータを使用します。これは、スタックの作成時に指定された Amazon SNS トピック ARN のリストを提供します。Fn::Select
関数はそのリストから最初の ARN を選択します。
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
AWS::NoValue を使用した条件付きプロパティ
次の例では、スナップショット ID が指定されている場合にのみスナップショットを使用する Amazon RDS DB インスタンスを作成します。UseDBSnapshot
条件が true に評価された場合は、CloudFormation は DBSnapshotIdentifier
プロパティに DBSnapshotName
パラメータ値を使用します。条件が false に評価された場合は、CloudFormation は 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