4
1

AWS CloudFormationのOutputの書き方

Posted at

CloudFormationの作成時にoutputの書き方に注意せずスタック作成失敗になったことがあったので今回はスタック作成時に簡単に情報を取得できるoutputの書き方と注意点について説明します。

Outputとは

Output (任意)
オプションの Outputs セクションは、他のスタックにインポートする (クロススタック参照を作成)、応答として返す (スタック呼び出しについて記述)、または、AWS CloudFormation コンソールで表示する出力値を宣言します。

なぜOutputを使用するのか?

Outputsセクションは、スタックの作成または更新後に表示される情報を定義するために使用されます。
特定のリソースの属性やスタック内で作成されたリソースへの参照など、リソース情報を簡単に取得できます。

Outputの基本的な書き方

基本的なOutputsセクションの構造は以下のようになります。

Outputs:
  Logical ID:
    Description: Information about the value
    Value: Value to return
    Export:
      Name: Name of resource to export
  • Description: Outputの説明。オプションですが、何の情報が出力されるのかを明確にするために推奨されます。
  • Value: 出力する情報の値。この属性は必須です。
  • Export: スタック間での値の共有を可能にするための名前。この名前を使用して、他のスタックからこのOutput値を参照できます。

各サービスのCloudFormationのReturn Valuesを確認

Return Valuesとは

CloudFormationのテンプレート内でリソースを定義する際、そのリソースが持つ属性や情報を他の部分で参照したい場合があります。
このときに利用するのが、各リソースのReturn Valuesです。特定のリソースが作成または更新された後に利用可能な値を示しています。

各サービスのCloudFormationのUserGuidで該当サービスが返せるReturn Valuesが確認できます。
例えば、Amazon S3のCloudFormation UserGuideによれば、AWS::S3::BucketリソースのReturn Valuesは以下の通りです:

  • Ref: バケットの名前を返します。
  • Fn::GetAtt:
    • Arn: バケットのAmazon Resource Name (ARN)を返します。
    • DomainName: バケットのドメイン名を返します。
    • DualStackDomainName: バケットのデュアルスタックドメイン名を返します。
    • WebsiteURL: バケットのウェブサイトURLを返します。

Return Valuesで確認した値をs3のCloudFormationの例に挙げて説明をします。

以下は、S3バケットを作成する簡単なCloudFormationテンプレートの例です:

Resources:
  MySampleBucket:
    Type: "AWS::S3::Bucket"

Outputs:
  BucketName:
    Description: "The name of the S3 bucket"
    Value: !Ref MySampleBucket

  BucketArn:
    Description: "The ARN of the S3 bucket"
    Value: !GetAtt MySampleBucket.Arn

  BucketDomainName:
    Description: "The domain name of the S3 bucket"
    Value: !GetAtt MySampleBucket.DomainName

AWS::S3::Bucketリソースを作成しましたのでOutputsセクションでReturn Valuesを使用して情報を出力してみましょう。

  • BucketName: !Refを使用してバケットの名前を出力します。
  • BucketArn: !GetAttを使用してバケットのARNを出力します。
  • BucketDomainName: !GetAttを使用してバケットのドメイン名を出力します。

Outputを書く際の注意点

Outputを記述する際の注意点として、変数と属性を適切に組み合わせることが重要です。使用する変数や属性が、対象となるサービスでサポートされていることを確認する必要があります。サポートされていない変数や属性を使用すると、スタック作成時にエラーが発生します。

例えば、S3のOutputにAWS::Backup::BackupPlanのoutputの属性BackupPlanArnを使用すると構文エラーが発生します。

Outputs:
#S3のoutputの属性
  BucketName:
    Value: !Ref BucketName

  BucketARN:
    Value: !GetAtt S3Bucket.Arn
#AWS::Backup::BackupPlanのoutputの属性
  BackupARN:
    Value: !GetAtt S3Bucket.BackupPlanArn

image.png

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1