

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

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

# CloudFormation パラメータを使用して CloudFormation 値を取得する
<a name="get-cfn-param"></a>

AWS Cloud Development Kit (AWS CDK) アプリケーション内の AWS CloudFormation パラメータを使用して、デプロイ時に合成された CloudFormation テンプレートにカスタム値を入力します。

詳細については、「[パラメータと AWS CDK](parameters.md)」を参照してください。

## CDK アプリでパラメータを定義する
<a name="parameters-define"></a>

[https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.CfnParameter.html](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.CfnParameter.html) クラスを使用してパラメータを定義します。ほとんどのパラメータに少なくとも 1 つの型と説明を指定する必要がありますが、どちらも技術的には任意です。説明は、AWS CloudFormation コンソールでユーザーがパラメータの値を入力するよう求められた際に表示されます。使用できる型の詳細については、[「型」](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/parameters-section-structure.html#parameters-section-structure-properties-type)を参照してください。

**注記**  
任意のスコープでパラメータを定義できます。ただし、コードのリファクタリング時に論理 ID が変更されないように、スタックレベルでパラメータを定義することをお勧めします。

**Example**  

```
const uploadBucketName = new CfnParameter(this, "uploadBucketName", {
  type: "String",
  description: "The name of the Amazon S3 bucket where uploaded files will be stored."});
```

```
const uploadBucketName = new CfnParameter(this, "uploadBucketName", {
  type: "String",
  description: "The name of the Amazon S3 bucket where uploaded files will be stored."});
```

```
upload_bucket_name = CfnParameter(self, "uploadBucketName", type="String",
    description="The name of the Amazon S3 bucket where uploaded files will be stored.")
```

```
CfnParameter uploadBucketName = CfnParameter.Builder.create(this, "uploadBucketName")
        .type("String")
        .description("The name of the Amazon S3 bucket where uploaded files will be stored")
        .build();
```

```
var uploadBucketName = new CfnParameter(this, "uploadBucketName", new CfnParameterProps
{
    Type = "String",
    Description = "The name of the Amazon S3 bucket where uploaded files will be stored"
});
```

## パラメータの使用
<a name="parameters-use"></a>

`CfnParameter` インスタンスは、[トークン](tokens.md)を介してその値を CDK アプリケーションに公開します。他のトークンと同様、パラメータのトークンは合成時に解決されます。ただし、具体的な値ではなく、AWS CloudFormation テンプレートで定義されたパラメータ (デプロイ時に解決されます) への参照が解決されます。

トークンは、`Token` クラスのインスタンスとして、または文字列、文字列リスト、または数値エンコーディングで取得できます。選択は、パラメータを使用するクラスまたはメソッドに必要な値の種類によって異なります。

**Example**  


| プロパティ | 値の種類 | 
| --- | --- | 
|   `value`   |   `Token` クラスインスタンス  | 
|   `valueAsList`   |  文字列として表されるトークンリスト  | 
|   `valueAsNumber`   |  数値として表されるトークン  | 
|   `valueAsString`   |  文字列として表されるトークン  | 


| プロパティ | 値の種類 | 
| --- | --- | 
|   `value`   |   `Token` クラスインスタンス  | 
|   `valueAsList`   |  文字列として表されるトークンリスト  | 
|   `valueAsNumber`   |  数値として表されるトークン  | 
|   `valueAsString`   |  文字列として表されるトークン  | 


| プロパティ | 値の種類 | 
| --- | --- | 
|   `value`   |   `Token` クラスインスタンス  | 
|   `value_as_list`   |  文字列として表されるトークンリスト  | 
|   `value_as_number`   |  数値として表されるトークン  | 
|   `value_as_string`   |  文字列として表されるトークン  | 


| プロパティ | 値の種類 | 
| --- | --- | 
|   `getValue()`   |   `Token` クラスインスタンス  | 
|   `getValueAsList()`   |  文字列として表されるトークンリスト  | 
|   `getValueAsNumber()`   |  数値として表されるトークン  | 
|   `getValueAsString()`   |  文字列として表されるトークン  | 


| プロパティ | 値の種類 | 
| --- | --- | 
|   `Value`   |   `Token` クラスインスタンス  | 
|   `ValueAsList`   |  文字列として表されるトークンリスト  | 
|   `ValueAsNumber`   |  数値として表されるトークン  | 
|   `ValueAsString`   |  文字列として表されるトークン  | 

たとえば、`Bucket` の定義にパラメータを使用するには、以下のように行います。

**Example**  

```
const bucket = new Bucket(this, "amzn-s3-demo-bucket",
  { bucketName: uploadBucketName.valueAsString});
```

```
const bucket = new Bucket(this, "amzn-s3-demo-bucket",
  { bucketName: uploadBucketName.valueAsString});
```

```
bucket = Bucket(self, "amzn-s3-demo-bucket",
    bucket_name=upload_bucket_name.value_as_string)
```

```
Bucket bucket = Bucket.Builder.create(this, "amzn-s3-demo-bucket")
        .bucketName(uploadBucketName.getValueAsString())
        .build();
```

```
var bucket = new Bucket(this, "amzn-s3-demo-bucket")
{
    BucketName = uploadBucketName.ValueAsString
};
```

## パラメータを含む CDK アプリケーションのデプロイ
<a name="parameters-deploy"></a>

生成された AWS CloudFormation テンプレートを AWS CloudFormation コンソールを介してデプロイすると、各パラメータの値を指定するように求められます。

また、CDK CLI の `cdk deploy` コマンドを使用するか、CDK プロジェクトのスタックファイルにパラメータ値を指定することでも、パラメータ値を指定できます。

### cdk deployでパラメータ値を指定する
<a name="parameters-deploy-cli"></a>

CDK CLI の `cdk deploy` コマンドを使用してデプロイする場合、`--parameters` オプションを使用すると、デプロイ時にパラメータ値を指定できます。

以下は、`cdk deploy` コマンドの構造の例です。

```
$ cdk deploy <stack-logical-id> --parameters <stack-name>:<parameter-name>=<parameter-value>
```

CDK アプリケーションに 1 つのスタックが含まれている場合、`--parameters` オプションにスタックの論理 ID 引数または `stack-name` の値を指定する必要はありません。CDK CLI がこれらの値を自動的に検出して指定します。以下は、CDK アプリケーションの 1 つのスタックの `uploadBucketName` パラメータに `uploadbucket` の値を指定する場合の例です。

```
$ cdk deploy --parameters <uploadBucketName>=<uploadbucket>
```

### マルチスタックアプリケーションの CDK デプロイでパラメータ値を指定する
<a name="parameters-deploy-cli-multi-stack"></a>

以下は、2 つの CDK スタックを含む TypeScript の CDK アプリケーションの例です。各スタックには、Amazon S3 バケットインスタンスとAmazon S3バケット名を設定するパラメータが含まれています。

```
import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
import * as s3 from 'aws-cdk-lib/aws-s3';

// Define the CDK app
const app = new cdk.App();

// First stack
export class MyFirstStack extends cdk.Stack {
  constructor(scope: Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    // Set a default parameter name
    const bucketNameParam = new cdk.CfnParameter(this, 'bucketNameParam', {
      type: 'String',
      default: 'amzn-s3-demo-bucket1'
    });

    // Define an S3 bucket
    new s3.Bucket(this, 'MyFirstBucket', {
      bucketName: bucketNameParam.valueAsString
    });
  }
}

// Second stack
export class MySecondStack extends cdk.Stack {
  constructor(scope: Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    // Set a default parameter name
    const bucketNameParam = new cdk.CfnParameter(this, 'bucketNameParam', {
      type: 'String',
      default: 'amzn-s3-demo-bucket2'
    });

    // Define an S3 bucket
    new s3.Bucket(this, 'MySecondBucket', {
      bucketName: bucketNameParam.valueAsString
    });
  }
}

// Instantiate the stacks
new MyFirstStack(app, 'MyFirstStack', {
  stackName: 'MyFirstDeployedStack',
});

new MySecondStack(app, 'MySecondStack', {
  stackName: 'MySecondDeployedStack',
});
```

複数のスタックを含む CDK アプリケーションでは、以下を実行できます。
+  **パラメータを使用して 1 つのスタックをデプロイする** – マルチスタックアプリケーションから 1 つのスタックをデプロイするには、スタック論理 ID を引数として指定します。

  以下は、`bucketNameParam` のパラメータ値 `mynewbucketname` として `MySecondStack` をデプロイする場合の例です。

  ```
  $ cdk deploy <MySecondStack> --parameters <bucketNameParam>='<mynewbucketname>'
  ```
+  **すべてのスタックをデプロイし、各スタックのパラメータ値を指定する** – `'*'` のワイルドカードまたは `--all` のオプションを指定して、すべてのスタックをデプロイします。`--parameters` オプションを 1 つのコマンドで複数回指定して、各スタックのパラメータ値を指定します。以下に例を示します。

  ```
  $ cdk deploy <'*'> --parameters <MyFirstDeployedStack>:<bucketNameParam>='<mynewfirststackbucketname>' --parameters <MySecondDeployedStack>:<bucketNameParam>='<mynewsecondstackbucketname>'
  ```
+  **すべてのスタックをデプロイし、1 つのスタックのパラメータ値を指定する** – `'*'` のワイルドカードまたは `--all` のオプションを指定して、すべてのスタックをデプロイします。次に、`--parameters` オプションでパラメータを定義するスタックを指定します。以下は、CDK アプリにすべてのスタックをデプロイし、`MySecondDeployedStack` AWS CloudFormation スタックのパラメータ値を指定する場合の例です。他のすべてのスタックは、デフォルトのパラメータ値をデプロイして使用します。

  ```
  $ cdk deploy <'*'> --parameters <MySecondDeployedStack>:<bucketNameParam>='<mynewbucketname>'
  $ cdk deploy <--all> --parameters <MySecondDeployedStack>:<bucketNameParam>='<mynewbucketname>'
  ```

### ネストされたスタックを持つアプリケーションに `cdk deploy` でパラメータ値を指定する
<a name="parameters-deploy-cli-nested-stack"></a>

ネストされたスタックを含むアプリケーションで作業する際の CDK CLI の動作は、マルチスタックアプリケーションに似ています。主な違いは、ネストされたすべてのスタックをデプロイする場合は、`'**'` のワイルドカードを使用することです。`'*'` のワイルドカードはすべてのスタックをデプロイしますが、ネストされたスタックはデプロイしません。`'**'` のワイルドカードは、ネストされたスタックを含むすべてのスタックをデプロイします。

以下は、ネストされたスタックのパラメータ値を指定しながら、ネストされたスタックをデプロイする場合の例です。

```
$ cdk deploy '**' --parameters <MultiStackCdkApp/SecondStack>:<bucketNameParam>='<mysecondstackbucketname>'
```

`cdk deploy` コマンドオプションの詳細については、「[cdk デプロイ](ref-cli-cmd-deploy.md)」を参照してください。