これは v2 AWS CDK デベロッパーガイドです。旧版の CDK v1 は 2022 年 6 月 1 日にメンテナンスを開始し、2023 年 6 月 1 日にサポートを終了しました。
翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
CDK 使用状況データレポートとは
AWS Cloud Development Kit (AWS CDK) アプリケーションは、使用状況データを収集してレポートし、 AWS CDK がどのように使用されているかを把握するように設定されています。CDK チームは、このデータを使用して次の操作を行います。
-
顧客とのコミュニケーション — セキュリティまたは信頼性の既知の問題があるコンストラクトを使用してスタックを特定し、顧客に影響を与えるトピックに関するコミュニケーションを送信します。
-
CDK 開発の通知 – CDK の使用に関するインサイトを取得して、CDK 開発により良い情報を提供します。
-
CDK の問題を調査する – バグが報告されると、使用状況データはトラブルシューティング時に CDK チームにとって貴重なインサイトを提供します。
収集される使用状況データ
CDK によって収集される使用状況データには、次の 2 つのカテゴリがあります。
-
一般的な使用状況データ
-
追加の使用状況データ
一般的な使用状況データ収集
CDK は、CDK アプリケーションから次のタイプの一般的な使用状況データを収集します。
-
使用される CDK ライブラリのバージョン。
-
次の
NPM
モジュールで使用されるコンストラクトの名前。-
AWS CDK コアモジュール
-
AWS コンストラクトライブラリモジュール
-
AWS ソリューション構築モジュール
-
AWS Render Farm Deployment Kit モジュール
-
注記
バージョン 1.93.0 以前は、 は、スタックで使用されるコンストラクトではなく、合成中にロードされたモジュールの名前とバージョン AWS CDK を報告していました。
追加の使用状況データ収集
CDK バージョン 2.178.0 以降、使用状況データ収集が拡張され、次の追加の使用状況データが含まれるようになりました。
-
CDK 定義プロパティキー – L2 コンストラクトの組み込みプロパティを使用すると、プロパティキーが収集されます。これには、ディクショナリオブジェクトにネストされた組み込みプロパティキーが含まれます。
-
CDK で定義されたプロパティキーからのブール値と列挙型プロパティ値 – CDK で定義されたプロパティキーの場合、ブール型と列挙型のみのプロパティ値が収集されます。文字列値やコンストラクト参照など、他のすべての型は編集されます。
-
ブール型と列挙型のメソッド名、キー、プロパティ値 – L2 コンストラクトメソッドを使用すると、ブール型と列挙型のメソッド名、プロパティキー、プロパティ値が収集されます。
一意に作成したプロパティキーと値の場合、オブジェクト全体が編集されます。例えば、 InlineApiDefinition
を使用してOpenAPI仕様を定義し、RestApi
コンストラクトに渡すと、InlineApiDefinition
オブジェクト全体が編集されます。
利点や潜在的な懸念など、追加の使用状況データ収集の詳細については、aws-cdk リポジトリの「CDK Collecting Additional Metadata (under feature flag) #33198
CDK が使用状況データを収集する方法
合成時に、CDK はアプリケーションから使用状況データを収集し、AWS::CDK::Metadata
リソース内に保存します。合成された AWS CloudFormation テンプレートでの例を次に示します。
CDKMetadata:
Type: "AWS::CDK::Metadata"
Properties:
Analytics: "v2:deflate64:H4sIAND9SGAAAzXKSw5AMBAA0L1b2PdzBYnEAdio3RglglY60zQi7u6TWL/XKmNUlxeQSOKwaPTBqrNhwEWU3hGHiCzK0dWWfAxoL/Fd8mvk+QkS/0X6BdjnCdgmOOQKWz+AqqLDt2Y3YMnLYWwAAAA="
Analytics
プロパティは、スタック内のコンストラクトのリストを gzip圧縮し、base64 エンコードして、プレフィックスエンコードしたものです。
使用状況データレポートをオプトアウトまたはオプトインする方法
一般的な使用状況データレポートおよび追加の使用状況データレポートをオプトアウトまたはオプトインするオプションは、最初にアプリを作成するために使用した CDK バージョンによって異なります。
デフォルトでは、CDK アプリケーションは次のように使用状況データレポートに自動的にオプトインするように設定されています。
-
すべての CDK アプリ – 一般的な使用状況データレポートにオプトインしました。
-
v2.178.0 より前のバージョンで作成された CDK アプリ – 追加の使用状況データレポートを自動的にオプトインしていません。
-
v2.178.0 以降で作成された CDK アプリ – 追加の使用状況データレポートにオプトインしました。
警告
オプトアウトを選択した場合、CDK はセキュリティ問題の影響を受けたかどうかを特定できず、通知を送信しません。
すべての使用状況データレポートをオプトアウトする
すべての使用状況データレポートをオプトアウトするには、 コマンドラインインターフェイス (CLI) AWS Cloud Development Kit (AWS CDK) を使用するか、プロジェクトの cdk.json
ファイルを設定します。
CDK を使用してすべての使用状況データレポートをオプトアウトするにはCLI
-
1 つのコマンドに対しオプトアウトするには、任意の CDK CLI コマンドで
--no-version-reporting
オプションを使用します。テンプレート合成中にオプトアウトする場合の例を以下に示します。$
cdk synth --no-version-reporting
CDK は の実行時にテンプレートを自動的に合成するため
cdk deploy
、cdk deploy
コマンド--no-version-reporting
で も使用する必要があります。
cdk.json
ファイルを設定してすべての使用状況データレポートをオプトアウトするには
-
./cdk.json
または~/.cdk.json
でversionReporting
をfalse
に設定します。これにより、デフォルトでオプトアウトされます。以下に例を示します。{ "app": "...", "versionReporting": false }
-
設定後でも、個別のコマンドで
--version-reporting
を指定することで、この動作を上書きしてオプトインすることができます。
追加の使用状況データレポートのみをオプトアウトする
CDK アプリが 2.178.0 より前の CDK バージョンで作成された場合、一般的な使用状況データレポートにオプトインしている場合でも、追加の使用状況データレポートは自動的にオプトアウトされます。追加の使用状況データレポートをオプトアウトするために何もする必要はありません。
CDK アプリが CDK バージョン 2.178.0 以降で作成された場合は、すべての使用状況データレポートをオプトアウトする必要があります。追加の使用状況データレポートのみをオプトアウトすることはできません。
使用状況データレポートにオプトインする
CDK アプリが CDK バージョン 2.178.0 以降で作成された場合は、 を に設定することで、すべての使用状況データレポートversionReporting
にオプトインできますtrue
。これは CDK アプリのデフォルトの動作です。
CDK アプリが 2.178.0 より前の CDK バージョンで作成された場合は、 を に設定することで、一般的な使用状況データレポートversionReporting
にオプトインできますtrue
。追加の使用状況データレポートにオプトインするには、機能フラグを有効にする必要があります。
追加の使用状況データレポートにオプトインするには
注記
これらのステップは、最初に 2.178.0 より前のバージョンで作成された CDK アプリ用です。
-
CDK バージョン 2.178.0 以降を使用していることを確認します。
-
CDK 設定ファイルで、 を
@aws-cdk/core:enableAdditionalMetadataCollection
として指定しますtrue
。以下に例を示します。{ "context": { "@aws-cdk/core:enableAdditionalMetadataCollection": "true" } }
-
クラスで
ENABLE_ADDITIONAL_METADATA_COLLECTION
値を使用することもできますFeatureFlags
。以下に例を示します。import * as cdk from 'aws-cdk-lib'; import { FeatureFlags } from 'aws-cdk-lib'; import * as cx_api from 'aws-cdk-lib/cx-api'; import { Construct } from 'constructs'; export class MyStack extends cdk.Stack { constructor(scope: Construct, id: string, props?: cdk.StackProps) { super(scope, id, props); // Set the feature flag ENABLE_ADDITIONAL_METADATA_COLLECTION to true FeatureFlags.of(this).add(cx_api.ENABLE_ADDITIONAL_METADATA_COLLECTION, true); // Your stack resources go here new cdk.aws_s3.Bucket(this, 'MyBucket'); } } const app = new cdk.App(); new MyStack(app, 'MyStack');
例
CDK アプリケーションから収集された一般および追加の使用状況データ
CDK アプリの例を次に示します。
import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
import * as s3 from 'aws-cdk-lib/aws-s3';
class MyStack extends cdk.Stack {
constructor(scope, id, props) {
super(scope, id, props);
// Create an S3 bucket (L2 construct)
const myBucket = new s3.Bucket(this, 'MyBucket', {
bucketName: 'my-cdk-example-bucket', // String type
versioned: true, // Boolean type
removalPolicy: cdk.RemovalPolicy.DESTROY, // ENUM type
lifecycleRules: [{ // Array of object type
expirationDate: new Date('2019-10-01'),
objectSizeLessThan: 600,
objectSizeGreaterThan: 500,
}],
});
// Use a method of the L2 construct to define additional properties
myBucket.addLifecycleRule({
id: 'ExpireOldObjects',
enabled: true, // Boolean
expiration: cdk.Duration.days(90), // Expire objects after 90 days
});
}
}
// Define the CDK app and stack
const app = new cdk.App();
new MyStack(app, 'MyStack');
app.synth();
合成時に、使用状況データが収集、圧縮され、AWS::CDK::Metadata
リソースに保存されます。
以下は、2.178.0 より前の CDK バージョンで収集された一般的な使用状況データの例です。
{
"fqn": "aws-cdk-lib.aws-s3.Bucket",
"version": "v2.170.0"
}
CDK バージョン 2.178.0 で導入された追加の使用状況データなど、収集された使用状況データの例を次に示します。
{
"fqn": "aws-cdk-lib.aws_s3.Bucket",
"version": "2.170.0",
"metadata": [
{
"type": "aws:cdk:analytics:construct",
"data": {
"bucketName": "*",
"versioned": true,
"removalPolicy": "cdk.RemovalPolicy.DESTROY",
"lifecycleRules": [
{
"expirationDate": "*",
"objectSizeLessThan": "*",
"objectSizeGreaterThan": "*"
}
]
}
},
{
"type": "aws:cdk:analytics:method",
"data": {
"name": "addLifecycleRule",
"prop": {
"id": "*",
"enabled": true,
"expiration": "*",
}
}
}
]
}