

これは AWS CDK v2 デベロッパーガイドです。旧版の CDK v1 は 2022 年 6 月 1 日にメンテナンスを開始し、2023 年 6 月 1 日にサポートを終了しました。

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# AWS CDK ライブラリの使用状況データのレポート作成を設定する
<a name="usage-data"></a>

## CDK ライブラリの使用状況データのレポート作成とは
<a name="usage-data-intro"></a>

 AWS Cloud Development Kit (AWS CDK) アプリケーションは、AWS CDK がどのように使用されているかのインサイトを取得するために、使用状況データを収集してレポートするように設定されています。CDK チームは、このデータを使用して以下を実行します。
+  **顧客との通信** – 既知のセキュリティまたは信頼性の問題があるコンストラクトを使用してスタックを特定し、顧客に影響を与えるトピックに関する通信を送信します。
+  **CDK 開発の通知** – CDK の使用状況に関するインサイトを取得して、CDK 開発により良い情報を提供します。
+  **CDK の問題の調査** – バグが報告されると、使用状況データはトラブルシューティング時に CDK チームに貴重なインサイトを提供します。

## 収集される使用状況データとは
<a name="usage-data-categories"></a>

CDK によって収集されるアプリケーション使用状況データには、2 つのカテゴリがあります。
+ 一般的な使用状況データ
+ 追加の使用状況データ

### 一般的な使用状況データの収集
<a name="usage-data-categories-general"></a>

CDK は、CDK アプリケーションから次のタイプの一般的な使用状況データを収集します。
+ 使用される CDK ライブラリのバージョン。
+ 次の `NPM` モジュールで使用されるコンストラクトの名前。
  +  AWS CDK コアモジュール
  +  AWS コンストラクトライブラリモジュール
  +  AWS ソリューションコンストラクトモジュール
  +  AWS レンダーファームデプロイキットモジュール

**注記**  
バージョン 1.93.0 以前、AWS CDK はスタックで使用されるコンストラクトではなく、合成中にロードされたモジュールの名前とバージョンを報告していました。

### 追加の使用状況データの収集
<a name="usage-data-categories-additional"></a>

CDK バージョン 2.178.0 以降、次の追加の使用状況データを含めるように、使用状況データの収集が拡張されました。
+  **CDK 定義プロパティキー** – L2 コンストラクトの組み込みプロパティを使用すると、プロパティキーが収集されます。これには、ディクショナリオブジェクトにネストされた組み込みプロパティキーが含まれます。
+  **CDK 定義プロパティキーからのブール型と列挙型のプロパティ値** – CDK 定義プロパティキーの場合、ブール型と列挙型のプロパティ値のみが収集されます。文字列値やコンストラクト参照など、他のすべての型が改正されます。
+  **ブール型と列挙型のメソッド名、キー、プロパティ値** – L2 コンストラクトメソッドを使用すると、ブール型と列挙型のメソッド名、プロパティキー、プロパティ値が収集されます。

一意に作成するプロパティキーと値の場合、オブジェクト全体が改正されます。例えば、` [InlineApiDefinition](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_apigateway.InlineApiDefinition.html) ` を使用して OpenAPI 仕様を定義し、` [RestApi](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_apigateway.RestApi.html) ` コンストラクトに渡すと、`InlineApiDefinition` オブジェクト全体が改正されます。

利点や潜在的な懸念など、追加の使用状況データ収集の詳細については、「*aws-cdk リポジトリ*」の「[CDK 追加のメタデータの収集 (機能フラグの下) \$133198](https://github.com/aws/aws-cdk/discussions/33198)」の説明を参照してください。

## CDK がアプリケーション使用状況データを収集する方法
<a name="usage-data-how"></a>

合成時に、CDK はアプリケーションから使用状況データを収集し、` AWS::CDK::Metadata` リソース内に保存します。以下は、合成された AWS CloudFormation テンプレートでのこの例です。

```
CDKMetadata:
  Type: "AWS::CDK::Metadata"
  Properties:
    Analytics: "v2:deflate64:H4sIAND9SGAAAzXKSw5AMBAA0L1b2PdzBYnEAdio3RglglY60zQi7u6TWL/XKmNUlxeQSOKwaPTBqrNhwEWU3hGHiCzK0dWWfAxoL/Fd8mvk+QkS/0X6BdjnCdgmOOQKWz+AqqLDt2Y3YMnLYWwAAAA="
```

`Analytics` プロパティは、スタック内のコンストラクトのリストを gzip圧縮し、base64 エンコードして、プレフィックスエンコードしたものです。

## 使用状況データのレポート作成をオプトアウトまたはオプトインする方法
<a name="usage-data-configure"></a>

一般的な使用状況データのレポート作成および追加の使用状況データのレポート作成をオプトアウトまたはオプトインするオプションは、最初にアプリを作成するために使用した CDK バージョンによって異なります。

デフォルトでは、CDK アプリケーションは次のように使用状況データのレポート作成に自動的にオプトインするように設定されています。
+  **すべての CDK アプリ** – 一般的な使用状況データのレポート作成にオプトインしました。
+  **v2.178.0 より前のバージョンで作成された CDK アプリ** – 追加の使用状況データのレポート作成に自動的にオプトインされていません。
+  **v2.178.0 以降で作成された CDK アプリ** – 追加の使用状況データのレポート作成にオプトインしました。

**警告**  
オプトアウトすることを選択した場合、CDK は、セキュリティ問題の影響を受けているかどうかを特定できず、通知は送信されません。

### すべての使用状況データのレポート作成からオプトアウトする
<a name="usage-data-configure-optout-all"></a>

すべての使用状況データのレポート作成からオプトアウトするには、AWS Cloud Development Kit (AWS CDK) コマンドラインインターフェイス (CLI) を使用するか、プロジェクトの `cdk.json` ファイルを設定します。

 **CDK CLI を使用してすべての使用状況データのレポート作成からオプトアウトするには**   
+ 1 つのコマンドに対しオプトアウトするには、任意の CDK CLI コマンドで `--no-version-reporting` オプションを使用します。テンプレート合成中にオプトアウトする場合の例を以下に示します。

  ```
  $ cdk synth --no-version-reporting
  ```

  `cdk deploy` を実行すると CDK が自動的にテンプレートを合成するため、`cdk deploy` コマンドでも `--no-version-reporting` を使用する必要があります。

 **cdk.json ファイルを設定してすべての使用状況データのレポート作成からオプトアウトするには**   

1. `./cdk.json` または `~/.cdk.json`で `versionReporting` を `false` に設定します。これにより、デフォルトでオプトアウトされます。以下に例を示します。

   ```
   {
     "app": "...",
     "versionReporting": false
   }
   ```

1. 設定後でも、個別のコマンドで `--version-reporting` を指定することで、この動作を上書きしてオプトインすることができます。

### 追加の使用状況データのレポート作成のみからオプトアウトする
<a name="usage-data-configure-optout-additiona"></a>

CDK アプリが 2.178.0 より前の CDK バージョンで作成された場合、一般的な使用状況データのレポート作成にオプトインされていても、追加の使用状況データのレポート作成から自動的にオプトアウトされます。追加の使用状況データのレポート作成からオプトアウトするには何もする必要はありません。

CDK アプリが CDK バージョン 2.178.0 以降で作成された場合は、すべての使用状況データのレポート作成からオプトアウトする必要があります。追加の使用状況データのレポート作成のみからオプトアウトすることはできません。

### 使用状況データのレポート作成にオプトインする
<a name="usage-data-configure-optin"></a>

CDK アプリが CDK バージョン 2.178.0 以降で作成された場合は、`versionReporting` を `true` に設定することで、すべての使用状況データのレポート作成にオプトインできます。これが CDK アプリのデフォルトの動作です。

CDK アプリが 2.178.0 より前の CDK バージョンで作成された場合は、`versionReporting` を `true` に設定して一般的な使用状況データのレポート作成にオプトインできます。追加の使用状況データのレポート作成にオプトインするには、機能フラグを有効にする必要があります。

**注記**  
これらのステップは、2.178.0 より前のバージョンで最初に作成された CDK アプリ用です。

1. CDK バージョン 2.178.0 以降を使用していることを確認します。

1. CDK 設定ファイルで、`@aws-cdk/core:enableAdditionalMetadataCollection` を `true` として指定します。以下に例を示します。

   ```
   {
     "context": {
       "@aws-cdk/core:enableAdditionalMetadataCollection": "true"
     }
   }
   ```

1. ` [FeatureFlags](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.FeatureFlags.html) ` クラスで `ENABLE_ADDITIONAL_METADATA_COLLECTION` 値を使用することもできます。以下に例を示します。

   ```
   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');
   ```

## 例
<a name="usage-data-examples"></a>

### CDK アプリケーションから収集された一般的および追加の使用状況データ
<a name="usage-data-examples-example1"></a>

次は、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": "*",
                }
            }
        }
    ]
}
```