この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
はじめに
今回は Metadata について学んでいきましょう。
前回の記事はこちら。
Metadata とは
CFn の テンプレートセクション の 1 つです。
このセクションを利用して、開発者はテンプレートに関する追加情報を付与することができます。任意項目なので無くても問題ありません。
例
AWSTemplateFormatVersion: "2010-09-09"
Description: "sample template"
Metadata:
StarWars:
EpisodeIV: "A New Hope"
EpisodeV: "The Empire Strikes Back"
EpisodeVI: "Return of the Jedi"
Resources:
Vpc:
Type: AWS::EC2::VPC
Properties:
CidrBlock: 10.0.0.0/16
Tags:
- Key: Name
Value: sample-vpc
全く関係のないスター・ウォーズの情報を入れてみました。このように Metadata セクションには任意のオブジェクトを含めることができます。
また以下のようなリソース(メタデータキー)を Metadata セクション配下に記述することで特定の処理を実行することもできますが、ここでの説明は割愛します。
AWS::CloudFormation::Authentication
AWS::CloudFormation::Init
AWS::CloudFormation::Interface
AWS CDK における Metadata
AWS CDK ではデフォルトでこの Metadata が各リソースに付与され、さらにこれとは別の AWS::CDK::Metadata
というリソースが含まれます。
今まで ~ 省略 ~
と濁してきましたが、空のプロジェクトを作成して cdk synth
コマンドを実行しただけで次のようなテンプレートが出力されます。(長いです)
Resources:
CDKMetadata:
Type: AWS::CDK::Metadata
Properties:
Analytics: v2:deflate64:H4sIAAAAAAAAEzPUMzQw0TNQdEgsL9ZNTsnWT84vStWrDi5JTM7Wcc7PKy4pKk0u0XFOywtKLc4vLUpOBbGBEimZJZn5ebU6efkpqXpZxfplhmZ6hkCDsoozM3WLSvNKMnNT9YIgNAAtXENFZQAAAA==
Metadata:
aws:cdk:path: DevioStack/CDKMetadata/Default
Condition: CDKMetadataAvailable
Conditions:
CDKMetadataAvailable:
Fn::Or:
- Fn::Or:
- Fn::Equals:
- Ref: AWS::Region
- af-south-1
- Fn::Equals:
- Ref: AWS::Region
- ap-east-1
- Fn::Equals:
- Ref: AWS::Region
- ap-northeast-1
- Fn::Equals:
- Ref: AWS::Region
- ap-northeast-2
- Fn::Equals:
- Ref: AWS::Region
- ap-south-1
- Fn::Equals:
- Ref: AWS::Region
- ap-southeast-1
- Fn::Equals:
- Ref: AWS::Region
- ap-southeast-2
- Fn::Equals:
- Ref: AWS::Region
- ca-central-1
- Fn::Equals:
- Ref: AWS::Region
- cn-north-1
- Fn::Equals:
- Ref: AWS::Region
- cn-northwest-1
- Fn::Or:
- Fn::Equals:
- Ref: AWS::Region
- eu-central-1
- Fn::Equals:
- Ref: AWS::Region
- eu-north-1
- Fn::Equals:
- Ref: AWS::Region
- eu-south-1
- Fn::Equals:
- Ref: AWS::Region
- eu-west-1
- Fn::Equals:
- Ref: AWS::Region
- eu-west-2
- Fn::Equals:
- Ref: AWS::Region
- eu-west-3
- Fn::Equals:
- Ref: AWS::Region
- me-south-1
- Fn::Equals:
- Ref: AWS::Region
- sa-east-1
- Fn::Equals:
- Ref: AWS::Region
- us-east-1
- Fn::Equals:
- Ref: AWS::Region
- us-east-2
- Fn::Or:
- Fn::Equals:
- Ref: AWS::Region
- us-west-1
- Fn::Equals:
- Ref: AWS::Region
- us-west-2
長い。(2 回目)
これは何?
AWS CDK の改善に利用される情報です。
AWS チームはこれらの情報を収集/分析し、AWS CDK がどのように使われているかを把握しているようです。
The AWS CDK team uses this metadata to gain insight into how the AWS CDK is used, so we can continue to improve it.
利用情報を提供することは全く構わないのですが、いかんせんノイズが多すぎます。リソース 0 の状態で 80 行
存在するので、今後リソースを追加していった場合に確認したい項目が埋もれ見落としてしまう危険もあります。
というわけで AWS さんすみません。私、オフりますね。
除外設定
除外する方法は 2 通りです。
- 設定ファイルで書く
- コマンドのオプションを指定する
私は設定ファイルに書くことにしました。
cdk.json
を次のように修正します。
cdk.json
{
"app": "npx ts-node --prefer-ts-exts bin/devio.ts",
"versionReporting": false,
"context": {
"@aws-cdk/aws-apigateway:usagePlanKeyOrderInsensitiveId": true,
"@aws-cdk/core:enableStackNameDuplicates": "true",
"aws-cdk:enableDiffNoFail": "true",
"@aws-cdk/core:stackRelativeExports": "true",
"@aws-cdk/aws-ecr-assets:dockerIgnoreSupport": true,
"@aws-cdk/aws-secretsmanager:parseOwnedSecretName": true,
"@aws-cdk/aws-kms:defaultKeyPolicies": true,
"@aws-cdk/aws-s3:grantWriteWithoutAcl": true,
"@aws-cdk/aws-ecs-patterns:removeDefaultDesiredCount": true,
"@aws-cdk/aws-rds:lowercaseDbIdentifier": true,
"@aws-cdk/aws-efs:defaultEncryptionAtRest": true,
"systemName": "devio",
"envType": "stg"
}
}
"versionReporting": false
これだけです。
この状態で cdk synth
を実行すると先程の出力がキレイに無くなります。
設定ファイルではなくコマンドで除外する場合は --no-version-reporting
オプションを指定します。
$ cdk synth --no-version-reporting
あと一歩
実はまだ各リソースに Metadata が含まれているんですよ。
Resources:
Vpc:
Type: AWS::EC2::VPC
Properties:
CidrBlock: 10.0.0.0/16
Tags:
- Key: Name
Value: devio-stg-vpc
Metadata:
aws:cdk:path: DevioStack/Vpc
~ 省略 ~
せっかくなんで、こいつもなくしちゃいましょう。
こちらは残念ながらコマンドオプションのみでの対応となります。以下のいずれかで除外可能です。
--path-metadata false
--no-path-metadata
- ただしこちらはドキュメントに記載なし
(上記の規則に従い "pathMetadata": false
を設定ファイルに追記してもダメでした)
以上で Metadata が存在しない、CFn を手動で作成した時と同等のテンプレートを出力することができました。
aws:cdk:path
の Metadata も気になる方は、今後 cdk synth
, cdk deploy
コマンド実行時に --path-metadata false
オプションも付けるようにしてください。(私です)
GitHub
今回のソースコードは コチラ です。
おわりに
細かい部分かもしれませんが、ノイズの除去は良い仕事をする上で非常に重要な要素だと思います。今後も AWS CDK を触っていく中で、気になることがあれば 1 つずつ改善していきたいです。