擬似パラメータを使用して AWS 値を取得する - AWS CloudFormation

擬似パラメータを使用して 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::StackNameAWS::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