

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

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

# CDK スタック合成をカスタマイズする
<a name="customize-synth"></a>

AWS Cloud Development Kit (AWS CDK) のスタック合成をカスタマイズするには、デフォルトのシンセサイザーを変更するか、その他の使用可能な組み込みシンセサイザーを使用するか、独自のシンセサイザーを作成します。

AWS CDK では、合成の動作をカスタマイズするために、以下の組み込みシンセサイザーが使用できます。
+  [https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.DefaultStackSynthesizer.html](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.DefaultStackSynthesizer.html) – シンセサイザーが未指定の場合、これが自動的に使用されます。これは、クロスアカウントデプロイと、[CDK Pipelines](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.pipelines-readme.html) コンストラクトを使用するデプロイをサポートします。そのブートストラップ契約には、既知の名前を持つ既存の Amazon S3 バケット、既知の名前を持つ既存の Amazon ECR リポジトリ、および既知の名前を持つ既存の 5 つの IAM ロールが必要です。デフォルトのブートストラップテンプレートは、これらの要件を満たしています。
+  [https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.CliCredentialsStackSynthesizer.html](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.CliCredentialsStackSynthesizer.html) – このシンセサイザーのブートストラップ契約には、既存の Amazon S3 バケットと既存の Amazon ECR リポジトリが必要です。IAM ロールは必要ありません。デプロイを実行する際、このシンセサイザーは CDK CLI ユーザーのアクセス許可に依存しており、IAM デプロイ認証情報を制限したい組織に推奨されます。このシンセサイザーは、クロスアカウントデプロイや CDK Pipelines をサポートしていません。
+  [https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.LegacyStackSynthesizer.html](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.LegacyStackSynthesizer.html) – このシンセサイザーは、CDK v1 の合成動作をエミュレートします。そのブートストラップ契約には、任意の名前の既存の Amazon S3 バケットが必要であり、アセットの場所は CloudFormation スタックのパラメータとして渡されることが想定されています。このシンセサイザーを使用する場合、デプロイを実行する際は CDK CLI を使用する必要があります。

これらの組み込みシンセサイザーのいずれもユースケースに適していない場合は、`IStackSynthesizer` を実装するクラスとして独自のシンセサイザーを作成するか、コンストラクトハブから[シンセサイザー](https://constructs.dev/search?q=synthesizer&cdk=aws-cdk)を参照できます。

## `DefaultStackSynthesizer` のカスタマイズ
<a name="bootstrapping-custom-synth-default"></a>

`DefaultStackSynthesizer` は、AWS CDK のデフォルトのシンセサイザーです。これは、CDK アプリケーションのクロスアカウントデプロイと、AWS CDK を明示的にはサポートしていないが、AWS CodePipeline など通常の CloudFormation デプロイはサポートしている、CI/CD システムからの CDK アプリのデプロイを可能にするように設計されています。このシンセサイザーは、ほとんどのユースケースに最適なオプションです。

### `DefaultStackSynthesizer` のブートストラップ契約
<a name="bootstrapping-custom-synth-default-contract"></a>

 `DefaultStackSynthesizer` には、以下のブートストラップ契約が必要です。ブートストラップ時に作成する必要があるリソースは以下のとおりです。


| ブートストラップのリソース | 説明 | デフォルトの想定リソース名 | 目的 | 
| --- | --- | --- | --- | 
|  Amazon S3 バケット  |  ステージングバケット  |  cdk-hnb659fds-assets-<ACCOUNT>-<REGION>  |  ファイルアセットを保存します。  | 
|  Amazon ECR リポジトリ  |  ステージングリポジトリ  |  cdk-hnb659fds-container-assets-<ACCOUNT>-<REGION>  |  Docker イメージアセットを保存および管理します。  | 
|  IAM ロール  |  デプロイロール  |  cdk-hnb659fds-deploy-role-<ACCOUNT>-<REGION>  |  CDK CLI および場合によっては CodePipeline によって引き受けられ、他のロールを引き受けて AWS CloudFormation のデプロイを開始します。 このロールの信頼ポリシーは、この AWS 環境で AWS CDK を使用してデプロイできるユーザーを制御します。  | 
|  IAM ロール  |   AWS CloudFormation 実行ロール  |  cdk-hnb659fds-cfn-exec-role-<ACCOUNT>-<REGION>  |  このロールは、AWS CloudFormation がデプロイを実行するために使用されます。 このロールのポリシーは、CDK デプロイが実行できるオペレーションを制御します。  | 
|  IAM ロール  |  ルックアップロール  |  cdk-hnb659fds-lookup-role-<ACCOUNT>-<REGION>  |  このロールは、CDK CLI が環境のコンテキストルックアップを実行する必要がある場合に使用されます。 このロールの信頼ポリシーは、環境内の情報を参照できるユーザーを制御します。  | 
|  IAM ロール  |  ファイル発行ロール  |  cdk-hnb659fds-file-publishing-role-<ACCOUNT>-<REGION>  |  このロールは、Amazon S3 ステージングバケットにアセットをアップロードするために使用されます。これはデプロイロールから引き受けられます。  | 
|  IAM ロール  |  イメージ発行ロール  |  cdk-hnb659fds-image-publishing-role-<ACCOUNT>-<REGION>  |  このロールは、Amazon ECR ステージングリポジトリに Docker イメージをアップロードするために使用されます。これはデプロイロールから引き受けられます。  | 
|  SSM パラメータ  |  ブートストラップバージョンのパラメータ  |  /cdk-bootstrap/hnb659fds/<version>  |  ブートストラップテンプレートのバージョンです。これは、ブートストラップテンプレートと CDK CLI により、要件の検証に使用されます。  | 

CDK スタック合成をカスタマイズする 1 つの方法は、[https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.DefaultStackSynthesizer.html](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.DefaultStackSynthesizer.html) を変更することです。`Stack` インスタンスの `synthesizer` プロパティを使用して、単一の CDK スタック用にこのシンセサイザーをカスタマイズできます。また、`App` インスタンスの `defaultStackSynthesizer` プロパティを使用して、CDK アプリ内のすべてのスタックに対して `DefaultStackSynthesizer` を変更することもできます。

### 修飾子の変更
<a name="bootstrapping-custom-synth-qualifiers"></a>

ブートストラップ時に作成されたリソースの名前には*修飾子*が追加されます。デフォルトでは、この値は `hnb659fds` です。ブートストラップ時に修飾子を変更する場合は、同じ修飾子を使用するように CDK スタック合成をカスタマイズする必要があります。

修飾子を変更するには、`DefaultStackSynthesizer` の `qualifier` プロパティを設定するか、CDK プロジェクトの `cdk.json` ファイルで修飾子をコンテキストキーとして設定します。

以下は、`DefaultStackSynthesizer` の `qualifier` プロパティを設定する場合の例です。

**Example**  

```
new MyStack(this, 'MyStack', {
  synthesizer: new DefaultStackSynthesizer({
    qualifier: 'MYQUALIFIER',
  }),
});
```

```
new MyStack(this, 'MyStack', {
  synthesizer: new DefaultStackSynthesizer({
    qualifier: 'MYQUALIFIER',
  }),
})
```

```
MyStack(self, "MyStack",
    synthesizer=DefaultStackSynthesizer(
        qualifier="MYQUALIFIER"
))
```

```
new MyStack(app, "MyStack", StackProps.builder()
  .synthesizer(DefaultStackSynthesizer.Builder.create()
    .qualifier("MYQUALIFIER")
    .build())
  .build();
)
```

```
new MyStack(app, "MyStack", new StackProps
{
    Synthesizer = new DefaultStackSynthesizer(new DefaultStackSynthesizerProps
    {
        Qualifier = "MYQUALIFIER"
    })
});
```

```
func NewMyStack(scope constructs.Construct, id string, props *MyStackProps) awscdk.Stack {
	var sprops awscdk.StackProps
	if props != nil {
		sprops = props.StackProps
	}
	stack := awscdk.NewStack(scope, &id, &sprops)

	synth := awscdk.NewDefaultStackSynthesizer(&awscdk.DefaultStackSynthesizerProps{
		Qualifier: jsii.String("MYQUALIFIER"),
	})

	stack.SetSynthesizer(synth)

	return stack
}
```

以下は、`cdk.json` で修飾子をコンテキストキーとして設定する場合の例です。

```
{
  "app": "...",
  "context": {
    "@aws-cdk/core:bootstrapQualifier": "MYQUALIFIER"
  }
}
```

### リソース名の変更
<a name="bootstrapping-custom-synth-names"></a>

`DefaultStackSynthesizer` の他のすべてのプロパティは、ブートストラップテンプレート内のリソースの名前に関連しています。これらのプロパティについて指定が必要になるのは、ブートストラップテンプレートを変更してリソース名または命名スキームを変更したときのみです。

すべてのプロパティは、特殊なプレースホルダー `${Qualifier}`、`${AWS::Partition}`、`${AWS::AccountId}`、`${AWS::Region}` を受け入れます。これらのプレースホルダーは、それぞれ `qualifier` パラメータの値と、スタックの環境に対する AWS パーティション、アカウント ID、AWS リージョンの値に置き換えられます。

以下の例は、シンセサイザーをインスタンス化する場合と同じ形で、`DefaultStackSynthesizer` で最もよく使用されるプロパティとそのデフォルト値を示しています。詳細な一覧については、「[https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.DefaultStackSynthesizerProps.html#properties](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.DefaultStackSynthesizerProps.html#properties)」を参照してください。

**Example**  

```
new DefaultStackSynthesizer({
  // Name of the S3 bucket for file assets
  fileAssetsBucketName: 'cdk-${Qualifier}-assets-${AWS::AccountId}-${AWS::Region}',
  bucketPrefix: '',

  // Name of the ECR repository for Docker image assets
  imageAssetsRepositoryName: 'cdk-${Qualifier}-container-assets-${AWS::AccountId}-${AWS::Region}',
  dockerTagPrefix: '',

  // ARN of the role assumed by the CLI and Pipeline to deploy here
  deployRoleArn: 'arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-${Qualifier}-deploy-role-${AWS::AccountId}-${AWS::Region}',
  deployRoleExternalId: '',

  // ARN of the role used for file asset publishing (assumed from the CLI role)
  fileAssetPublishingRoleArn: 'arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-${Qualifier}-file-publishing-role-${AWS::AccountId}-${AWS::Region}',
  fileAssetPublishingExternalId: '',

  // ARN of the role used for Docker asset publishing (assumed from the CLI role)
  imageAssetPublishingRoleArn: 'arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-${Qualifier}-image-publishing-role-${AWS::AccountId}-${AWS::Region}',
  imageAssetPublishingExternalId: '',

  // ARN of the role passed to CloudFormation to execute the deployments
  cloudFormationExecutionRole: 'arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-${Qualifier}-cfn-exec-role-${AWS::AccountId}-${AWS::Region}',

  // ARN of the role used to look up context information in an environment
  lookupRoleArn: 'arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-${Qualifier}-lookup-role-${AWS::AccountId}-${AWS::Region}',
  lookupRoleExternalId: '',

  // Name of the SSM parameter which describes the bootstrap stack version number
  bootstrapStackVersionSsmParameter: '/cdk-bootstrap/${Qualifier}/version',

  // Add a rule to every template which verifies the required bootstrap stack version
  generateBootstrapVersionRule: true,

})
```

```
new DefaultStackSynthesizer({
  // Name of the S3 bucket for file assets
  fileAssetsBucketName: 'cdk-${Qualifier}-assets-${AWS::AccountId}-${AWS::Region}',
  bucketPrefix: '',

  // Name of the ECR repository for Docker image assets
  imageAssetsRepositoryName: 'cdk-${Qualifier}-container-assets-${AWS::AccountId}-${AWS::Region}',
  dockerTagPrefix: '',

  // ARN of the role assumed by the CLI and Pipeline to deploy here
  deployRoleArn: 'arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-${Qualifier}-deploy-role-${AWS::AccountId}-${AWS::Region}',
  deployRoleExternalId: '',

  // ARN of the role used for file asset publishing (assumed from the CLI role)
  fileAssetPublishingRoleArn: 'arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-${Qualifier}-file-publishing-role-${AWS::AccountId}-${AWS::Region}',
  fileAssetPublishingExternalId: '',

  // ARN of the role used for Docker asset publishing (assumed from the CLI role)
  imageAssetPublishingRoleArn: 'arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-${Qualifier}-image-publishing-role-${AWS::AccountId}-${AWS::Region}',
  imageAssetPublishingExternalId: '',

  // ARN of the role passed to CloudFormation to execute the deployments
  cloudFormationExecutionRole: 'arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-${Qualifier}-cfn-exec-role-${AWS::AccountId}-${AWS::Region}',

  // ARN of the role used to look up context information in an environment
  lookupRoleArn: 'arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-${Qualifier}-lookup-role-${AWS::AccountId}-${AWS::Region}',
  lookupRoleExternalId: '',

  // Name of the SSM parameter which describes the bootstrap stack version number
  bootstrapStackVersionSsmParameter: '/cdk-bootstrap/${Qualifier}/version',

  // Add a rule to every template which verifies the required bootstrap stack version
  generateBootstrapVersionRule: true,
})
```

```
DefaultStackSynthesizer(
  # Name of the S3 bucket for file assets
  file_assets_bucket_name="cdk-${Qualifier}-assets-${AWS::AccountId}-${AWS::Region}",
  bucket_prefix="",

  # Name of the ECR repository for Docker image assets
  image_assets_repository_name="cdk-${Qualifier}-container-assets-${AWS::AccountId}-${AWS::Region}",
  docker_tag_prefix="",

  # ARN of the role assumed by the CLI and Pipeline to deploy here
  deploy_role_arn="arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-${Qualifier}-deploy-role-${AWS::AccountId}-${AWS::Region}",
  deploy_role_external_id="",

  # ARN of the role used for file asset publishing (assumed from the CLI role)
  file_asset_publishing_role_arn="arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-${Qualifier}-file-publishing-role-${AWS::AccountId}-${AWS::Region}",
  file_asset_publishing_external_id="",

  # ARN of the role used for Docker asset publishing (assumed from the CLI role)
  image_asset_publishing_role_arn="arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-${Qualifier}-image-publishing-role-${AWS::AccountId}-${AWS::Region}",
  image_asset_publishing_external_id="",

  # ARN of the role passed to CloudFormation to execute the deployments
  cloud_formation_execution_role="arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-${Qualifier}-cfn-exec-role-${AWS::AccountId}-${AWS::Region}",

  # ARN of the role used to look up context information in an environment
  lookup_role_arn="arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-${Qualifier}-lookup-role-${AWS::AccountId}-${AWS::Region}",
  lookup_role_external_id="",

  # Name of the SSM parameter which describes the bootstrap stack version number
  bootstrap_stack_version_ssm_parameter="/cdk-bootstrap/${Qualifier}/version",

  # Add a rule to every template which verifies the required bootstrap stack version
  generate_bootstrap_version_rule=True,
)
```

```
DefaultStackSynthesizer.Builder.create()
  // Name of the S3 bucket for file assets
  .fileAssetsBucketName("cdk-${Qualifier}-assets-${AWS::AccountId}-${AWS::Region}")
  .bucketPrefix('')

  // Name of the ECR repository for Docker image assets
  .imageAssetsRepositoryName("cdk-${Qualifier}-container-assets-${AWS::AccountId}-${AWS::Region}")
  .dockerTagPrefix('')

  // ARN of the role assumed by the CLI and Pipeline to deploy here
  .deployRoleArn("arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-${Qualifier}-deploy-role-${AWS::AccountId}-${AWS::Region}")
  .deployRoleExternalId("")

  // ARN of the role used for file asset publishing (assumed from the CLI role)
  .fileAssetPublishingRoleArn("arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-${Qualifier}-file-publishing-role-${AWS::AccountId}-${AWS::Region}")
  .fileAssetPublishingExternalId("")

  // ARN of the role used for Docker asset publishing (assumed from the CLI role)
  .imageAssetPublishingRoleArn("arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-${Qualifier}-image-publishing-role-${AWS::AccountId}-${AWS::Region}")
  .imageAssetPublishingExternalId("")

  // ARN of the role passed to CloudFormation to execute the deployments
  .cloudFormationExecutionRole("arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-${Qualifier}-cfn-exec-role-${AWS::AccountId}-${AWS::Region}")

  .lookupRoleArn("arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-${Qualifier}-lookup-role-${AWS::AccountId}-${AWS::Region}")
  .lookupRoleExternalId("")

  // Name of the SSM parameter which describes the bootstrap stack version number
  .bootstrapStackVersionSsmParameter("/cdk-bootstrap/${Qualifier}/version")

  // Add a rule to every template which verifies the required bootstrap stack version
  .generateBootstrapVersionRule(true)
.build()
```

```
new DefaultStackSynthesizer(new DefaultStackSynthesizerProps
{
    // Name of the S3 bucket for file assets
    FileAssetsBucketName = "cdk-${Qualifier}-assets-${AWS::AccountId}-${AWS::Region}",
    BucketPrefix = "",

    // Name of the ECR repository for Docker image assets
    ImageAssetsRepositoryName = "cdk-${Qualifier}-container-assets-${AWS::AccountId}-${AWS::Region}",
    DockerTagPrefix = "",

    // ARN of the role assumed by the CLI and Pipeline to deploy here
    DeployRoleArn = "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-${Qualifier}-deploy-role-${AWS::AccountId}-${AWS::Region}",
    DeployRoleExternalId = "",

    // ARN of the role used for file asset publishing (assumed from the CLI role)
    FileAssetPublishingRoleArn = "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-${Qualifier}-file-publishing-role-${AWS::AccountId}-${AWS::Region}",
    FileAssetPublishingExternalId = "",

    // ARN of the role used for Docker asset publishing (assumed from the CLI role)
    ImageAssetPublishingRoleArn = "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-${Qualifier}-image-publishing-role-${AWS::AccountId}-${AWS::Region}",
    ImageAssetPublishingExternalId = "",

    // ARN of the role passed to CloudFormation to execute the deployments
    CloudFormationExecutionRole = "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-${Qualifier}-cfn-exec-role-${AWS::AccountId}-${AWS::Region}",

    LookupRoleArn = "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/cdk-${Qualifier}-lookup-role-${AWS::AccountId}-${AWS::Region}",
    LookupRoleExternalId = "",

    // Name of the SSM parameter which describes the bootstrap stack version number
    BootstrapStackVersionSsmParameter = "/cdk-bootstrap/${Qualifier}/version",

    // Add a rule to every template which verifies the required bootstrap stack version
    GenerateBootstrapVersionRule = true,
})
```

## `CliCredentialsStackSynthesizer` の使用
<a name="bootstrapping-custom-synth-cli"></a>

CDK のデプロイ時にアクセス許可を付与するために使用されるセキュリティ認証情報を変更するには、[https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.CliCredentialsStackSynthesizer.html](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.CliCredentialsStackSynthesizer.html) を使用して合成をカスタマイズします。このシンセサイザーは、ブートストラップ時に作成されるデフォルトの AWS リソースと連携して、Amazon S3 バケットや Amazon ECR リポジトリなどのアセットを保存します。ブートストラップ時に CDK によって作成されたデフォルトの IAM ロールを使用する代わりに、デプロイを開始するアクターのセキュリティ認証情報を使用します。したがって、アクターのセキュリティ認証情報には、すべてのデプロイアクションを実行するための有効なアクセス許可が必要です。以下の図は、このシンセサイザーを使用した場合のデプロイプロセスを示したものです。

![\[CLICredentialsStackSynthesizer を使用したデプロイプロセス。\]](http://docs.aws.amazon.com/ja_jp/cdk/v2/guide/images/CliCredentialsStackSynthesizer-deploy-process_cdk_flowchart.png)


`CliCredentialsStackSynthesizer` を使用する場合:
+ デフォルトでは、CloudFormation はアクターのアクセス許可を使用して、ご利用のアカウントで API コールを実行します。したがって、現在の ID には、CloudFormation スタック内の AWS リソースに必要な変更を行うアクセス許可と、`CreateStack` や `UpdateStack` など、必要な CloudFormation オペレーションを実行するためのアクセス許可が必要です。デプロイ機能は、アクターのアクセス許可に制限されます。
+ アセットの発行と CloudFormation のデプロイは、現在の IAM ID を使用して行われます。この ID には、アセットバケットとリポジトリに対する読み取りと書き込みの両方の十分なアクセス許可が必要です。
+ ルックアップは現在の IAM ID を使用して実行され、ルックアップはポリシーの対象となります。

このシンセサイザーを使用する際は、任意の CDK CLI コマンドで [`--role-arn`](ref-cli-cmd.md#ref-cli-cmd-options-role-arn) オプションを使用して指定することで、個別の CloudFormation 実行ロールを使用できます。

### `CliCredentialsStackSynthesizer` のブートストラップ契約
<a name="bootstrapping-custom-synth-cli-contract"></a>

 `CliCredentialsStackSynthesizer` には、以下のブートストラップ契約が必要です。ブートストラップ時に作成する必要があるリソースは以下のとおりです。


| ブートストラップのリソース | 説明 | デフォルトの想定リソース名 | 目的 | 
| --- | --- | --- | --- | 
|  Amazon S3 バケット  |  ステージングバケット  |  cdk-hnb659fds-assets-<ACCOUNT>-<REGION>  |  ファイルアセットを保存します。  | 
|  Amazon ECR リポジトリ  |  ステージングリポジトリ  |  cdk-hnb659fds-container-assets-<ACCOUNT>-<REGION>  |  Docker イメージアセットを保存および管理します。  | 

リソース名の中の文字列 `hnb659fds` は、*修飾子*と呼ばれます。デフォルト値に特別な意味はありません。修飾子が異なってさえいれば、1 つの環境内にブートストラップリソースの複数のコピーを持つことができます。複数のコピーを持つことで、同一環境内の異なるアプリケーションのアセットを分離して管理できます。

デフォルトのブートストラップテンプレートをデプロイすることで、`CliCredentialsStackSynthesizer` のブートストラップ契約を満たすことができます。デフォルトのブートストラップテンプレートは IAM ロールを作成しますが、このシンセサイザーはそれらを使用しません。ブートストラップテンプレートをカスタマイズして IAM ロールを削除することもできます。

### を変更する`CliCredentialsStackSynthesizer`
<a name="bootstrapping-custom-synth-cli-modify"></a>

ブートストラップ時に修飾子またはデフォルトのブートストラップリソース名を変更する場合は、同じ名前を使用するようにシンセサイザーを変更する必要があります。シンセサイザーは、1 つのスタックまたはアプリ内のすべてのスタックに対して変更できます。以下に例を示します。

**Example**  

```
new MyStack(this, 'MyStack', {
  synthesizer: new CliCredentialsStackSynthesizer({
    qualifier: 'MYQUALIFIER',
  }),
});
```

```
new MyStack(this, 'MyStack', {
  synthesizer: new CliCredentialsStackSynthesizer({
    qualifier: 'MYQUALIFIER',
  }),
})
```

```
MyStack(self, "MyStack",
    synthesizer=CliCredentialsStackSynthesizer(
        qualifier="MYQUALIFIER"
))
```

```
new MyStack(app, "MyStack", StackProps.builder()
  .synthesizer(CliCredentialsStackSynthesizer.Builder.create()
    .qualifier("MYQUALIFIER")
    .build())
  .build();
)
```

```
new MyStack(app, "MyStack", new StackProps
{
    Synthesizer = new CliCredentialsStackSynthesizer(new CliCredentialsStackSynthesizerProps
    {
        Qualifier = "MYQUALIFIER"
    })
});
```

以下の例は、`CliCredentialsStackSynthesizer` で最もよく使用されるプロパティとそのデフォルト値を示しています。詳細な一覧については、「[https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.CliCredentialsStackSynthesizerProps.html](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.CliCredentialsStackSynthesizerProps.html)」を参照してください。

**Example**  

```
new CliCredentialsStackSynthesizer({
  // Value for '${Qualifier}' in the resource names
  qualifier: 'hnb659fds',

  // Name of the S3 bucket for file assets
  fileAssetsBucketName: 'cdk-${Qualifier}-assets-${AWS::AccountId}-${AWS::Region}',
  bucketPrefix: '',

  // Name of the ECR repository for Docker image assets
  imageAssetsRepositoryName: 'cdk-${Qualifier}-container-assets-${AWS::AccountId}-${AWS::Region}',
  dockerTagPrefix: '',
})
```

```
new CliCredentialsStackSynthesizer({
  // Value for '${Qualifier}' in the resource names
  qualifier: 'hnb659fds',

  // Name of the S3 bucket for file assets
  fileAssetsBucketName: 'cdk-${Qualifier}-assets-${AWS::AccountId}-${AWS::Region}',
  bucketPrefix: '',

  // Name of the ECR repository for Docker image assets
  imageAssetsRepositoryName: 'cdk-${Qualifier}-container-assets-${AWS::AccountId}-${AWS::Region}',
  dockerTagPrefix: '',
})
```

```
CliCredentialsStackSynthesizer(
  # Value for '${Qualifier}' in the resource names
  qualifier="hnb659fds",

  # Name of the S3 bucket for file assets
  file_assets_bucket_name="cdk-${Qualifier}-assets-${AWS::AccountId}-${AWS::Region}",
  bucket_prefix="",

  # Name of the ECR repository for Docker image assets
  image_assets_repository_name="cdk-${Qualifier}-container-assets-${AWS::AccountId}-${AWS::Region}",
  docker_tag_prefix="",
)
```

```
CliCredentialsStackSynthesizer.Builder.create()
  // Value for '${Qualifier}' in the resource names
  .qualifier("hnb659fds")

  // Name of the S3 bucket for file assets
  .fileAssetsBucketName("cdk-${Qualifier}-assets-${AWS::AccountId}-${AWS::Region}")
  .bucketPrefix('')

  // Name of the ECR repository for Docker image assets
  .imageAssetsRepositoryName("cdk-${Qualifier}-container-assets-${AWS::AccountId}-${AWS::Region}")
  .dockerTagPrefix('')
.build()
```

```
new CliCredentialsStackSynthesizer(new CliCredentialsStackSynthesizerProps
{

    // Value for '${Qualifier}' in the resource names
    Qualifier = "hnb659fds",

    // Name of the S3 bucket for file assets
    FileAssetsBucketName = "cdk-${Qualifier}-assets-${AWS::AccountId}-${AWS::Region}",
    BucketPrefix = "",

    // Name of the ECR repository for Docker image assets
    ImageAssetsRepositoryName = "cdk-${Qualifier}-container-assets-${AWS::AccountId}-${AWS::Region}",
    DockerTagPrefix = "",
})
```

## `LegacyStackSynthesizer` の使用
<a name="bootstrapping-custom-synth-legacy"></a>

`LegacyStackSynthesizer` は、CDK v1 デプロイの動作をエミュレートします。アクセス許可の確立には、デプロイを実行するアクターのセキュリティ認証情報が使用されます。ファイルアセットをアップロードするバケットは、`CDKToolkit` という名前の AWS CloudFormation スタックを使用して作成する必要があります。CDK CLI は、`aws-cdk/assets` という名前のアンマネージド Amazon ECR リポジトリを作成して、Docker イメージアセットを保存します。このリポジトリのクリーンアップおよび管理はユーザーの責任です。`LegacyStackSynthesizer` を使用して合成されたスタックは、CDK CLI を使用してのみデプロイできます。

CDK v1 から CDK v2 に移行する際に、環境の再ブートストラップができない場合は、`LegacyStackSynthesizer` を使用できます。新しいプロジェクトでは、`LegacyStackSynthesizer` を使用しないことをおすすめします。

### `LegacyStackSynthesizer` のブートストラップ契約
<a name="bootstrapping-custom-synth-legacy-contract"></a>

 `LegacyStackSynthesizer` には、以下のブートストラップ契約が必要です。ブートストラップ時に作成する必要があるリソースは以下のとおりです。


| ブートストラップのリソース | 説明 | デフォルトの想定リソース名 | 目的 | 
| --- | --- | --- | --- | 
|  Amazon S3 バケット  |  ステージングバケット  |  cdk-hnb659fds-assets-<ACCOUNT>-<REGION>  |  ファイルアセットを保存します。  | 
|  CloudFormation 出力  |  バケット名出力  |  スタック – `CDKToolkit`  出力名 – `BucketName`   |  ステージングバケットの名前を記述する CloudFormation 出力  | 

`LegacyStackSynthesizer` は、固定名を持つ Amazon S3 バケットが存在することを想定していません。代わりに、合成された CloudFormation テンプレートには、ファイルアセットごとに 3 つの CloudFormation パラメータが含まれます。これらのパラメータは、各ファイルアセットの Amazon S3 バケット名、Amazon S3 オブジェクトキー、アーティファクトハッシュを保存します。

 Docker イメージのアセットは、`aws-cdk/assets` という名前の Amazon ECR リポジトリに公開されます。この名前はアセットごとに変更できます。リポジトリが存在しない場合、リポジトリが作成されます。

CloudFormation スタックは、デフォルト名の `CDKToolkit` で存在している必要があります。このスタックには、ステージングバケットを参照する `BucketName` という名前の CloudFormation エクスポートが必要です。

デフォルトのブートストラップテンプレートは、`LegacyStackSynthesizer` のブートストラップ契約を満たします。ただし、Amazon S3 バケットは、ブートストラップテンプレートのブートストラップリソースからのみ使用されます。ブートストラップテンプレートをカスタマイズすると、Amazon ECR、IAM、および SSM のブートストラップリソースを削除できます。

### `LegacyStackSynthesizer` のデプロイの手順
<a name="bootstrapping-custom-synth-legacy-deploy"></a>

このシンセサイザーを使用すると、デプロイ時に以下のプロセスが実行されます。
+ CDK CLI は、環境内で `CDKToolkit` という名前の CloudFormation スタックを検索します。このスタックから、CDK CLI は `BucketName` という名前の CloudFormation 出力を読み取ります。`cdk deploy` で `--toolkit-stack-name` オプションを使用することで、別のスタック名を指定できます。
+ デプロイのアクセス許可の確立には、デプロイを開始するアクターのセキュリティ認証情報が使用されます。したがって、アクターはすべてのデプロイアクションを実行するために十分なアクセス許可が必要です。これには、Amazon S3 ステージングバケットへの読み取りと書き込み、Amazon ECR リポジトリへの作成と書き込み、AWS CloudFormation デプロイの開始とモニタリング、デプロイに必要な API コールの実行などが挙げられます。
+ 必要に応じて、アクセス許可が有効であれば、Amazon S3 ステージングバケットにファイルアセットが発行されます。
+ 必要に応じて、かつアクセス許可が有効である場合、Docker イメージアセットは、アセットの `repositoryName` プロパティで指定されたリポジトリに発行されます。リポジトリ名を指定しない場合、デフォルト値は `'aws-cdk/assets'` になります。
+ アクセス許可が有効である場合、AWS CloudFormation デプロイが実行されます。Amazon S3 ステージングバケットとキーの場所は、CloudFormation パラメータとして渡されます。