これは AWS CDK v2 デベロッパーガイドです。古い CDKv1 は 2022 年 6 月 1 日にメンテナンスを開始し、2023 年 6 月 1 日にサポートを終了しました。
翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
AWS Cloud Development Kit (AWS CDK) スタックをデプロイする前に、まずスタックを合成する必要があります。スタック合成は、CDKスタックから AWS CloudFormation テンプレートとデプロイアーティファクトを生成するプロセスです。テンプレートとアーティファクトはクラウドアセンブリ と呼ばれます。クラウドアセンブリは、 にリソースをプロビジョニングするためにデプロイされるものです AWS。デプロイの仕組みの詳細については、「」を参照してくださいAWS CDK デプロイの仕組み。
CDK アプリを適切にデプロイするには、合成中に生成される CloudFormation テンプレートで、ブートストラップ中に作成されたリソースを正しく指定する必要があります。したがって、デプロイを成功させるには、ブートストラップと合成が互いに補完する必要があります。
-
ブートストラップは、 AWS CDK デプロイ用の AWS 環境を設定する 1 回限りのプロセスです。デプロイCDKに が使用する環境内の特定の AWS リソースを設定します。これらは一般的にブートストラップリソース と呼ばれます。ブートストラップの手順については、「」を参照してくださいで使用する環境をブートストラップする AWS CDK。
-
CloudFormation 合成中に生成される テンプレートには、使用するブートストラップリソースに関する情報が含まれます。合成中、 は AWS 環境がどのようにブートストラップされたかを明確には認識CDKCLIしません。代わりに、 は、各CDKスタック用に設定したシンセサイザーに基づいて CloudFormation テンプレートCDKCLIを生成します。デプロイを成功させるには、シンセサイザーは使用する正しいブートストラップリソースを参照する CloudFormation テンプレートを生成する必要があります。
CDK には、連携するように設計されたデフォルトのシンセサイザーとブートストラップ設定が付属しています。一方をカスタマイズする場合は、関連するカスタマイズをもう一方のカスタマイズに適用する必要があります。
CDK スタック合成を設定する
CDK スタック合成は、Stack
インスタンスの synthesizer
プロパティを使用して設定します。このプロパティは、CDKスタックの合成方法を指定します。IStackSynthesizer
または を実装するクラスのインスタンスを指定しますIReusableStackSynthesizer
。そのメソッドは、アセットがスタックに追加されるたびに、またはスタックが合成されるたびに呼び出されます。スタック内でこのプロパティを使用する基本的な例を次に示します。
- TypeScript
-
new MyStack(this, 'MyStack', {
// stack properties
synthesizer: new DefaultStackSynthesizer({
// synthesizer properties
}),
});
- JavaScript
-
new MyStack(this, 'MyStack', {
// stack properties
synthesizer: new DefaultStackSynthesizer({
// synthesizer properties
}),
});
- Python
-
MyStack(self, "MyStack",
# stack properties
synthesizer=DefaultStackSynthesizer(
# synthesizer properties
))
- Java
-
new MyStack(app, "MyStack", StackProps.builder()
// stack properties
.synthesizer(DefaultStackSynthesizer.Builder.create()
// synthesizer properties
.build())
.build();
- C#
-
new MyStack(app, "MyStack", new StackProps
// stack properties
{
Synthesizer = new DefaultStackSynthesizer(new DefaultStackSynthesizerProps
{
// synthesizer properties
})
});
- Go
-
func main() {
app := awscdk.NewApp(nil)
NewMyStack(app, "MyStack", &MyStackProps{
StackProps: awscdk.StackProps{
Synthesizer: awscdk.NewDefaultStackSynthesizer(&awscdk.DefaultStackSynthesizerProps{
// synthesizer properties
}),
},
})
app.Synth(nil)
}
App
インスタンスの defaultStackSynthesizer
プロパティを使用して、CDKアプリ内のすべてのCDKスタックのシンセサイザーを設定することもできます。
- TypeScript
-
import { App, Stack, DefaultStackSynthesizer } from 'aws-cdk-lib';
const app = new App({
// Configure for all stacks in this app
defaultStackSynthesizer: new DefaultStackSynthesizer({
/* ... */
}),
});
- JavaScript
-
const { App, Stack, DefaultStackSynthesizer } = require('aws-cdk-lib');
const app = new App({
// Configure for all stacks in this app
defaultStackSynthesizer: new DefaultStackSynthesizer({
/* ... */
}),
});
- Python
-
from aws_cdk import App, Stack, DefaultStackSynthesizer
app = App(
default_stack_synthesizer=DefaultStackSynthesizer(
# Configure for all stacks in this app
# ...
)
)
- Java
-
import software.amazon.awscdk.App;
import software.amazon.awscdk.Stack;
import software.amazon.awscdk.DefaultStackSynthesizer;
public class Main {
public static void main(final String[] args) {
App app = new App(AppProps.builder()
// Configure for all stacks in this app
.defaultStackSynthesizer(DefaultStackSynthesizer.Builder.create().build())
.build()
);
}
}
- C#
-
using Amazon.CDK;
using Amazon.CDK.Synthesizers;
namespace MyNamespace
{
sealed class Program
{
public static void Main(string[] args)
{
var app = new App(new AppProps
{
// Configure for all stacks in this app
DefaultStackSynthesizer = new DefaultStackSynthesizer(new DefaultStackSynthesizerProps
{
// ...
})
});
}
}
}
- Go
-
package main
import (
"github.com/aws/aws-cdk-go/awscdk/v2"
"github.com/aws/constructs-go/constructs/v10"
"github.com/aws/jsii-runtime-go"
)
func main() {
defer jsii.Close()
app := awscdk.NewApp(&awscdk.AppProps{
// Configure for all stacks in this app
DefaultStackSynthesizer: awscdk.NewDefaultStackSynthesizer(&awscdk.DefaultStackSynthesizerProps{
// ...
}),
})
}
デフォルトでは、 は AWS CDK を使用しますDefaultStackSynthesizer
。シンセサイザーを設定しない場合、このシンセサイザーが使用されます。
ブートストラップスタックやテンプレートに変更を加えるなど、ブートストラップを変更しない場合は、スタック合成を変更する必要はありません。シンセサイザーを提供する必要すらありません。CDK は、デフォルトの DefaultStackSynthesizer
クラスを使用して、ブートストラップCDKスタックと適切にやり取りするようにスタック合成を設定します。
CDK スタックを合成するには、 AWS CDK コマンドラインインターフェイス (AWS CDK CLI) cdk synth
コマンドを使用します。このコマンドで使用できるオプションなど、このコマンドの詳細については、「」を参照してくださいcdk synthesize。
CDK アプリケーションに 1 つのスタックが含まれている場合、またはすべてのスタックを合成する場合は、CDKスタック名を引数として指定する必要はありません。デフォルトでは、 CDKCLIはCDKスタックをテンプレートに AWS CloudFormation 合成します。各スタックのjson
フォーマットされたテンプレートが cdk.out
ディレクトリに保存されます。アプリケーションに 1 yaml
つのスタックが含まれている場合、フォーマットされたテンプレートが に出力されますstdout
。以下に例を示します。
$
cdk synth
Resources:
CDKMetadata:
Type: AWS::CDK::Metadata
Properties:
Analytics: v2:deflate64:H4sIAAAAAAAA/unique-identifier
Metadata:
aws:cdk:path: CdkAppStack/CDKMetadata/Default
Condition: CDKMetadataAvailable
...
CDK アプリケーションに複数のスタックが含まれている場合は、スタックの論理 ID を指定して 1 つのスタックを合成できます。以下に例を示します。
$
cdk synth MyStackName
スタックを合成して を実行しない場合cdk deploy
、 CDKCLIはデプロイ前にスタックを自動的に合成します。
CDK スタック合成をカスタマイズする
AWS CDK には、合成動作をカスタマイズするために使用できる以下の組み込みシンセサイザーが含まれています。
-
DefaultStackSynthesizer
– シンセサイザーを指定しない場合、これは自動的に使用されます。CDK Pipelines コンストラクトを使用したクロスアカウントデプロイとデプロイをサポートします。ブートストラップ契約には、既知の名前の既存の Amazon S3 バケット、既知の名前の既存の Amazon ECRリポジトリ、既知の名前の 5 つの既存のIAMロールが必要です。デフォルトのブートストラップテンプレートは、これらの要件を満たしています。
-
CliCredentialsStackSynthesizer
– このシンセサイザーのブートストラップ契約には、既存の Amazon S3 バケットと既存の Amazon ECRリポジトリが必要です。IAM ロールは必要ありません。デプロイを実行するために、このシンセサイザーはCDKCLIユーザーのアクセス許可に依存しているため、IAMデプロイ認証情報を制限したい組織にはお勧めします。このシンセサイザーは、クロスアカウントデプロイやCDKパイプラインをサポートしていません。
-
LegacyStackSynthesizer
– このシンセサイザーは v1 CDK 合成動作をエミュレートします。ブートストラップ契約には、任意の名前の既存の Amazon S3 バケットが必要であり、アセットの場所が CloudFormation スタックパラメータとして渡されることを想定しています。このシンセサイザーを使用する場合は、 を使用してデプロイCDKCLIを実行する必要があります。
これらの組み込みシンセサイザーのいずれもユースケースに適していない場合は、 からシンセサイザーを実装IStackSynthesizer
または表示するクラスとして独自のシンセサイザーを記述できますConstruct Hub。
DefaultStackSynthesizer
のカスタマイズ
DefaultStackSynthesizer
は のデフォルトのシンセサイザーです AWS CDK。CDK アプリケーションのクロスアカウントデプロイと、 の明示的なサポートがない AWS CDKが、 などの通常のデプロイをサポートする CI/CD システムからのCDKアプリケーションの CloudFormation デプロイを可能にするように設計されています AWS CodePipeline。このシンセサイザーは、ほとんどのユースケースに最適なオプションです。
DefaultStackSynthesizer
ブートストラップ契約
DefaultStackSynthesizer
には、次のブートストラップ契約が必要です。ブートストラップ中に作成する必要があるリソースは次のとおりです。
ブートストラップリソース |
説明 |
デフォルトの想定リソース名 |
目的 |
Amazon S3 バケット
|
ステージングバケット
|
cdk-hnb659fds-アセット-ACCOUNT -REGION
|
ファイルアセットを保存します。
|
Amazon ECRリポジトリ
|
ステージングリポジトリ
|
cdk-hnb659fds-container-assets-ACCOUNT -REGION
|
Docker イメージアセットを保存および管理します。
|
IAM ロール
|
ロールをデプロイする
|
cdk-hnb659fds-deploy-role-ACCOUNT -REGION
|
CDK CLI と によって引き受けられ、他のロール CodePipeline を引き受けてデプロイを開始する AWS CloudFormation 可能性があります。
このロールの信頼ポリシーは、 AWS CDK この AWS 環境で でデプロイできるユーザーを制御します。
|
IAM ロール
|
AWS CloudFormation 実行ロール
|
cdk-hnb659fds-cfn-exec-role-ACCOUNT -REGION
|
このロールは、デプロイを実行する AWS CloudFormation ために によって使用されます。
このロールのポリシーは、CDKデプロイが実行できるオペレーションを制御します。
|
IAM ロール
|
検索ロール
|
cdk-hnb659fds-lookup-role-ACCOUNT -REGION
|
このロールは、 が環境コンテキスト検索を実行CDKCLIする必要がある場合に使用されます。
このロールの信頼ポリシーは、環境で情報を検索できるユーザーを制御します。
|
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
|
ブートストラップテンプレートのバージョン。これは、要件を検証CDKCLIするためにブートストラップテンプレートと によって使用されます。
|
CDK スタック合成をカスタマイズする 1 つの方法は、 を変更することですDefaultStackSynthesizer
。Stack
インスタンスの synthesizer
プロパティを使用して、このシンセサイザーを 1 つのCDKスタック用にカスタマイズできます。App
インスタンスの defaultStackSynthesizer
プロパティを使用して、CDKアプリ内のすべてのスタックDefaultStackSynthesizer
の を変更することもできます。
修飾子を変更する
この修飾子は、ブートストラップ中に作成されたリソースの名前に追加されます。デフォルトでは、この値は hnb659fds
です。ブートストラップ中に修飾子を変更する場合は、同じ修飾子を使用するようにCDKスタック合成をカスタマイズする必要があります。
修飾子を変更するには、 の qualifier
プロパティを設定するDefaultStackSynthesizer
か、CDKプロジェクトの cdk.json
ファイルで修飾子をコンテキストキーとして設定します。
以下は、 の qualifier
プロパティを設定する例ですDefaultStackSynthesizer
。
- TypeScript
-
new MyStack(this, 'MyStack', {
synthesizer: new DefaultStackSynthesizer({
qualifier: 'MYQUALIFIER',
}),
});
- JavaScript
-
new MyStack(this, 'MyStack', {
synthesizer: new DefaultStackSynthesizer({
qualifier: 'MYQUALIFIER',
}),
})
- Python
-
MyStack(self, "MyStack",
synthesizer=DefaultStackSynthesizer(
qualifier="MYQUALIFIER"
))
- Java
-
new MyStack(app, "MyStack", StackProps.builder()
.synthesizer(DefaultStackSynthesizer.Builder.create()
.qualifier("MYQUALIFIER")
.build())
.build();
- C#
-
new MyStack(app, "MyStack", new StackProps
{
Synthesizer = new DefaultStackSynthesizer(new DefaultStackSynthesizerProps
{
Qualifier = "MYQUALIFIER"
})
});
- Go
-
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"
}
}
リソース名の変更
その他のプロパティはすべて、ブートストラップテンプレート内のリソースの名前DefaultStackSynthesizer
に関連しています。ブートストラップテンプレートを変更し、リソース名または命名スキームを変更した場合にのみ、これらのプロパティのいずれかを指定する必要があります。
すべてのプロパティは、特別なプレースホルダー ${Qualifier}
、${AWS::Partition}
、${AWS::AccountId}
、および を受け入れます${AWS::Region}
。これらのプレースホルダーは、 qualifier
パラメータの値と、スタックの環境の AWS パーティション、アカウント ID、および AWS リージョン 値でそれぞれ置き換えられます。
次の例は、シンセサイザーをインスタンス化しているかのように、 で最も一般的に使用されるプロパティDefaultStackSynthesizer
とデフォルト値を示しています。詳細なリストについては、「」を参照してくださいDefaultStackSynthesizerProps。
- TypeScript
-
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,
})
- JavaScript
-
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,
})
- Python
-
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,
)
- Java
-
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()
- C#
-
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
を使用します。
CDK デプロイ中にアクセス許可を付与するために使用されるセキュリティ認証情報を変更するには、 を使用して合成をカスタマイズできますCliCredentialsStackSynthesizer
。このシンセサイザーは、Amazon S3 バケットや Amazon ECRリポジトリなどのアセットを保存するためにブートストラップ中に作成されるデフォルトの AWS リソースで動作します。ブートストラップCDK中に によって作成されたデフォルトのIAMロールを使用する代わりに、デプロイを開始するアクターのセキュリティ認証情報を使用します。したがって、アクターのセキュリティ認証情報には、すべてのデプロイアクションを実行するための有効なアクセス許可が必要です。次の図は、このシンセサイザーを使用する場合のデプロイプロセスを示しています。
を使用する場合CliCredentialsStackSynthesizer
:
-
デフォルトでは、 CloudFormation はアクターのアクセス許可を使用してアカウントでAPI呼び出しを実行します。したがって、現在の ID には、 CloudFormation スタック内の AWS リソースに必要な変更を加えるためのアクセス許可と、 CreateStack
や などの必要な CloudFormation オペレーションを実行するためのアクセス許可が必要ですUpdateStack
。デプロイ機能はアクターのアクセス許可に制限されます。
-
アセットの公開と CloudFormation デプロイは、現在の IAM ID を使用して行われます。この ID には、アセットバケットとリポジトリの読み取りと書き込みの両方に十分なアクセス許可が必要です。
-
ルックアップは現在のIAMアイデンティティを使用して実行され、ルックアップはポリシーの対象となります。
このシンセサイザーを使用する場合、任意のCDKCLIコマンドで --role-arn
オプションを使用して指定することで、別の CloudFormation 実行ロールを使用できます。
CliCredentialsStackSynthesizer
ブートストラップ契約
CliCredentialsStackSynthesizer
には、次のブートストラップ契約が必要です。ブートストラップ中に作成する必要があるリソースは次のとおりです。
ブートストラップリソース |
説明 |
デフォルトの想定リソース名 |
目的 |
Amazon S3 バケット
|
ステージングバケット
|
cdk-hnb659fds-アセット-ACCOUNT -REGION
|
ファイルアセットを保存します。
|
Amazon ECRリポジトリ
|
ステージングリポジトリ
|
cdk-hnb659fds-container-assets-ACCOUNT -REGION
|
Docker イメージアセットを保存および管理します。
|
hnb659fds
リソース名の文字列は、修飾子 と呼ばれます。デフォルト値には特別な意味はありません。ブートストラップリソースの複数のコピーは、異なる修飾子がある限り、1 つの環境に保持できます。コピーを複数持つと、異なるアプリケーションのアセットを同じ環境に分離するのに役立ちます。
デフォルトのブートストラップテンプレートをデプロイして、 CliCredentialsStackSynthesizer
のブートストラップ契約を満たすことができます。デフォルトのブートストラップテンプレートはIAMロールを作成しますが、このシンセサイザーはロールを使用しません。ブートストラップテンプレートをカスタマイズしてIAMロールを削除することもできます。
CliCredentialsStackSynthesizer
の変更
ブートストラップ中に修飾子またはデフォルトのブートストラップリソース名を変更する場合は、同じ名前を使用するようにシンセサイザーを変更する必要があります。1 つのスタックまたはアプリ内のすべてのスタックのシンセサイザーを変更できます。以下に例を示します。
- TypeScript
-
new MyStack(this, 'MyStack', {
synthesizer: new CliCredentialsStackSynthesizer({
qualifier: 'MYQUALIFIER',
}),
});
- JavaScript
-
new MyStack(this, 'MyStack', {
synthesizer: new CliCredentialsStackSynthesizer({
qualifier: 'MYQUALIFIER',
}),
})
- Python
-
MyStack(self, "MyStack",
synthesizer=CliCredentialsStackSynthesizer(
qualifier="MYQUALIFIER"
))
- Java
-
new MyStack(app, "MyStack", StackProps.builder()
.synthesizer(CliCredentialsStackSynthesizer.Builder.create()
.qualifier("MYQUALIFIER")
.build())
.build();
- C#
-
new MyStack(app, "MyStack", new StackProps
{
Synthesizer = new CliCredentialsStackSynthesizer(new CliCredentialsStackSynthesizerProps
{
Qualifier = "MYQUALIFIER"
})
});
次の例は、 で最もよく使用されるプロパティCliCredentialsStackSynthesizer
とそのデフォルト値を示しています。詳細なリストについては、「」を参照してくださいCliCredentialsStackSynthesizerProps。
- TypeScript
-
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: '',
})
- JavaScript
-
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: '',
})
- Python
-
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="",
)
- Java
-
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()
- C#
-
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
を使用します。
は LegacyStackSynthesizer
v1 CDK デプロイの動作をエミュレートします。デプロイを実行するアクターのセキュリティ認証情報は、アクセス許可の確立に使用されます。ファイルアセットは、 という名前の AWS CloudFormation スタックを使用して作成する必要があるバケットにアップロードされますCDKToolkit
。CDK CLI は、 という名前のアンマネージド型 Amazon ECRリポジトリを作成しaws-cdk/assets
、Dockerイメージアセットを保存します。このリポジトリをクリーンアップして管理する責任はお客様にあります。を使用して合成されたスタックは、 CDK を使用してのみデプロイLegacyStackSynthesizer
できますCLI。
v1 から CDK vCDK2 LegacyStackSynthesizer
に移行していて、環境を再ブートストラップできない場合は、 を使用できます。新しいプロジェクトでは、 を使用しないことをお勧めしますLegacyStackSynthesizer
。
LegacyStackSynthesizer
ブートストラップ契約
LegacyStackSynthesizer
には、次のブートストラップ契約が必要です。ブートストラップ中に作成する必要があるリソースは次のとおりです。
ブートストラップリソース |
説明 |
デフォルトの想定リソース名 |
目的 |
Amazon S3 バケット
|
ステージングバケット
|
cdk-hnb659fds-アセット-ACCOUNT -REGION
|
ファイルアセットを保存します。
|
CloudFormation 出力
|
バケット名の出力
|
スタック – CDKToolkit
出力名 – BucketName
|
ステージングバケットの名前を記述する CloudFormation 出力
|
LegacyStackSynthesizer
は、固定名を持つ Amazon S3 バケットの存在を前提としません。代わりに、合成された CloudFormation テンプレートには、ファイルアセットごとに 3 つの CloudFormation パラメータが含まれます。これらのパラメータには、各ファイルアセットの Amazon S3 バケット名、Amazon S3 オブジェクトキー、アーティファクトハッシュが保存されます。
Docker イメージアセットは、 という名前の Amazon ECRリポジトリに公開されますaws-cdk/assets
。この名前はアセットごとに変更できます。リポジトリが存在しない場合、リポジトリが作成されます。
CloudFormation スタックはデフォルト名 で存在する必要がありますCDKToolkit
。このスタックには、 CloudFormationステージングバケットを参照BucketName
する という名前のエクスポートが必要です。
デフォルトのブートストラップテンプレートは、LegacyStackSynthesizer
ブートストラップ契約を満たしています。ただし、ブートストラップテンプレートのブートストラップリソースの Amazon S3 バケットのみが使用されます。ブートストラップテンプレートをカスタマイズして、Amazon ECR、IAM、および SSMブートストラップリソースを削除できます。
LegacyStackSynthesizer
デプロイプロセス
このシンセサイザーを使用すると、デプロイ中に次のプロセスが実行されます。
-
は、 環境CDKToolkit
内で という名前の CloudFormation スタックCDKCLIを検索します。このスタックから、 は という名前の CloudFormation 出力をCDKCLI読み取りますBucketName
。で --toolkit-stack-name
オプションを使用して、別のスタック名cdk deploy
を指定できます。
-
デプロイを開始するアクターのセキュリティ認証情報は、デプロイのアクセス許可を確立するために使用されます。したがって、アクターには、すべてのデプロイアクションを実行するための十分なアクセス許可が必要です。これには、Amazon S3 ステージングバケットの読み取りと書き込み、Amazon ECRリポジトリの作成と書き込み、 AWS CloudFormation デプロイの開始とモニタリング、デプロイに必要なAPI呼び出しの実行が含まれます。
-
必要に応じて、アクセス許可が有効であれば、ファイルアセットは Amazon S3 ステージングバケットに発行されます。
-
必要に応じて、またアクセス許可が有効な場合、Dockerイメージアセットはアセットの repositoryName
プロパティによって という名前のリポジトリに発行されます。リポジトリ名を指定'aws-cdk/assets'
しない場合、デフォルト値は です。
-
アクセス許可が有効な場合、 AWS CloudFormation デプロイが実行されます。Amazon S3 ステージングバケットとキーの場所は CloudFormation パラメータとして渡されます。