概要
AWS CDK v2.198.0では、L1 CloudFormationリソース定義の更新が行われ、DataSyncでの新しいシークレット設定オプション、SESでのSNSアクション、Syntheticsでのリトライ設定などが追加されました。また、大規模アプリケーションでの合成失敗の修正や、Alphaモジュールでは、Amplifyでのコンピュートロールサポートとi7iインスタンスクラスの追加が行われています。
L1 CloudFormationリソースの更新
DataSync: 新しいシークレット設定オプション (PR #34528)
DataSyncのLocationAzureBlobとLocationObjectStorageで、シークレットの管理方法に関する新しい設定オプションが追加されました。これにより、認証情報をより柔軟に管理できるようになります。
以下の3つのシークレット設定タイプが利用可能になりました:
- ManagedSecretConfig: DataSync管理のシークレット(AWS管理のKMSキーを使用)
- CmkSecretConfig: DataSync管理のシークレット(カスタマー管理のKMSキーを使用)
- CustomSecretConfig: カスタマー管理のシークレット(独自のIAMロールで管理)
import * as datasync from 'aws-cdk-lib/aws-datasync';
// ManagedSecretConfig: AWS管理のKMSキーを使用
const locationAzureBlob1 = new datasync.CfnLocationAzureBlob(this, 'AzureBlobManaged', {
azureBlobContainerUrl: 'https://myaccount.blob.core.windows.net/mycontainer',
azureBlobAuthenticationType: 'SAS',
azureBlobSasConfiguration: {
token: 'sas-token',
},
// AgentArnsはオプションになりました
agentArns: ['arn:aws:datasync:us-east-1:123456789012:agent/agent-12345678'],
});
// CmkSecretConfig: カスタマー管理のKMSキーを使用
const locationAzureBlob2 = new datasync.CfnLocationAzureBlob(this, 'AzureBlobCmk', {
azureBlobContainerUrl: 'https://myaccount.blob.core.windows.net/mycontainer',
azureBlobAuthenticationType: 'SAS',
azureBlobSasConfiguration: {
token: 'sas-token',
},
// カスタマー管理のKMSキーを指定
cmkSecretConfig: {
secretArn: 'arn:aws:secretsmanager:us-east-1:123456789012:secret:MySecret',
kmsKeyArn: 'arn:aws:kms:us-east-1:123456789012:key/12345678-1234-1234-1234-123456789012',
},
});
// CustomSecretConfig: カスタマー管理のシークレットと独自のIAMロール
const locationAzureBlob3 = new datasync.CfnLocationAzureBlob(this, 'AzureBlobCustom', {
azureBlobContainerUrl: 'https://myaccount.blob.core.windows.net/mycontainer',
azureBlobAuthenticationType: 'SAS',
azureBlobSasConfiguration: {
token: 'sas-token',
},
// カスタマー管理のシークレットとアクセスロール
customSecretConfig: {
secretArn: 'arn:aws:secretsmanager:us-east-1:123456789012:secret:MySecret', // (必須)
secretAccessRoleArn: 'arn:aws:iam::123456789012:role/DataSyncSecretAccessRole', // (必須)
},
});
同様の設定がLocationObjectStorageでも利用可能です。
SES: Mail ManagerでのSNSアクション追加 (PR #34528)
SES Mail ManagerのルールアクションにSNSトピックへの公開機能が追加されました。メールを受信したときにSNSトピックに通知を送信できるようになります。
import * as ses from 'aws-cdk-lib/aws-ses';
const ruleSet = new ses.CfnMailManagerRuleSet(this, 'RuleSet', {
ruleSetName: 'MyRuleSet',
rules: [
{
name: 'NotifyRule',
actions: [
{
// SNSトピックへの公開アクション
publishToSns: {
topicArn: 'arn:aws:sns:us-east-1:123456789012:MyTopic', // (必須) SNSトピックARN
roleArn: 'arn:aws:iam::123456789012:role/SESPublishRole', // (必須) SNS公開に使用するIAMロール
actionFailurePolicy: 'CONTINUE', // 失敗時の動作(CONTINUE または DROP)
encoding: 'UTF8', // メッセージのエンコーディング
payloadType: 'JSON', // ペイロードタイプ(JSON または TEXT)
},
},
],
},
],
});
Synthetics: Canaryでのリトライ設定 (PR #34528)
Syntheticsのカナリアで、スケジュールにリトライ設定を追加できるようになりました。失敗時に自動的に再試行できます。
import * as synthetics from 'aws-cdk-lib/aws-synthetics';
const canary = new synthetics.CfnCanary(this, 'Canary', {
name: 'my-canary',
artifactS3Location: 's3://my-bucket/canary-results',
executionRoleArn: 'arn:aws:iam::123456789012:role/CanaryRole',
runtimeVersion: 'syn-nodejs-puppeteer-9.1',
schedule: {
expression: 'rate(5 minutes)',
durationInSeconds: 0,
// リトライ設定を追加
retryConfig: {
maxRetries: 3, // (必須) 最大リトライ回数(1-3回)
},
},
code: {
handler: 'index.handler',
script: 'exports.handler = async () => { /* ... */ };',
},
// ドライランとアップデートを同時に実行
dryRunAndUpdate: true, // trueの場合、更新前にドライランを実行
});
EC2: インスタンスメタデータオプションの設定 (PR #34528)
EC2インスタンスで、メタデータサービスの詳細な設定が可能になりました。
import * as ec2 from 'aws-cdk-lib/aws-ec2';
const instance = new ec2.CfnInstance(this, 'Instance', {
instanceType: 't3.micro',
imageId: 'ami-12345678',
// メタデータオプションの設定
metadataOptions: {
httpEndpoint: 'enabled', // メタデータサービスの有効化
httpTokens: 'required', // IMDSv2を強制(セキュリティのベストプラクティス)
httpPutResponseHopLimit: 1, // ホップ制限(デフォルト: 1)
httpProtocolIpv6: 'disabled', // IPv6エンドポイントの無効化
instanceMetadataTags: 'enabled', // インスタンスタグへのアクセスを有効化
},
});
Lex: サブスロット設定のサポート (PR #34528)
Lex Botでサブスロット設定が追加され、より複雑な会話フローを構築できるようになりました。
その他のL1更新
- DataSync: StorageSystemリソースが削除されました
- Application Auto Scaling: Predictive Scalingの定義済みメトリクスのドキュメントが拡充されました
- Deadline: Fleetでタグプロパゲーションモードが追加されました
- PCS: Cluster会計設定が追加されました
- RDS: DBInstanceからDatabaseInsightsModeアトリビュートが削除されました
バグ修正
大規模アプリでのtree.json合成失敗の修正 (PR #34478)
大規模なアプリケーションでは、コンストラクトツリーが512MBを超え、tree.jsonのシリアライズに失敗する問題がありました。このリリースでは、「サブツリー参照」の概念が導入され、ツリーが一定のノード数(デフォルト: 500,000ノード)を超えると、サブツリーを個別のファイルに書き出し、元のツリーからそれらを参照するようになりました。
この動作は、コンテキスト値@aws-cdk/core.TreeMetadata:maxNodesで設定できます。
// cdk.json
{
"context": {
// ノード数の上限を変更(デフォルト: 500000)
"@aws-cdk/core.TreeMetadata:maxNodes": 100000
}
}
この修正により、非常に大規模なアプリケーションでも問題なく合成できるようになります。既存のツリーデータ消費者にとっては、段階的な劣化が発生し、特定のツリー深度で見えるツリーの一部がカットオフされますが、影響を受けるのは非常に大規模なアプリケーションのみです。
ECS Patterns: redirectHTTPの依存関係の修正 (PR #34510)
ApplicationLoadBalancedFargateServiceで、redirectHTTPをfalseからtrueに切り替える際に、CloudFormationが「A listener already exists on this port for this load balancer」エラーをスローする問題が修正されました。
デフォルトリスナーがポート80からポート443に更新される前に、ポート80からポート443へのリダイレクトリスナーを追加しようとすることで発生する競合状態が原因でした。明示的な依存関係を追加することで、この問題が解決されました。
Route53: Recovery Control ヘルスチェックの不要なプロパティを削除 (PR #34272)
Route53のRecovery Controlタイプのヘルスチェックで、不要なプロパティ(FailureThreshold、RequestInterval、MeasureLatency)が設定されなくなりました。これらのプロパティはRecovery Controlタイプには適用されません。
SES Actions: SourceAccountを使用するように修正 (PR #34081)
SESアクションのS3バケットポリシーで、Referer条件の代わりにSourceAccount条件を使用するように修正されました。これにより、SESが特定のアカウントからのみアクセスできるように制限されます。
// 修正前: Referer条件を使用
{
"Condition": {
"StringEquals": {
"aws:Referer": "account-id"
}
}
}
// 修正後: SourceAccount条件を使用
{
"Condition": {
"StringEquals": {
"aws:SourceAccount": "account-id"
}
}
}
この変更により、よりセキュアな設定が可能になります。
Alphaモジュールの新機能
Amplify: コンピュートロールのサポート (PR #33962)
AmplifyアプリでSSR(Server-Side Rendering)をサポートするための、コンピュートロールが追加されました。
破壊的変更: platformがPlatform.WEB_COMPUTEまたはPlatform.WEB_DYNAMICの場合、コンピュートロールが自動的に作成されるようになります。
import * as amplify from '@aws-cdk/aws-amplify-alpha';
import * as iam from 'aws-cdk-lib/aws-iam';
// SSRアプリでコンピュートロールが自動作成される
const app = new amplify.App(this, 'App', {
sourceCodeProvider: new amplify.GitHubSourceCodeProvider({
owner: 'myorg',
repository: 'myrepo',
oauthToken: cdk.SecretValue.secretsManager('github-token'),
}),
platform: amplify.Platform.WEB_COMPUTE, // WEB_COMPUTEまたはWEB_DYNAMICの場合、コンピュートロールが自動作成される
});
// コンピュートロールへのアクセス(自動作成される)
const computeRole = app.computeRole;
// コンピュートロールにカスタムポリシーを追加
computeRole?.addManagedPolicy(
iam.ManagedPolicy.fromAwsManagedPolicyName('AmazonS3ReadOnlyAccess')
);
// または、カスタムコンピュートロールを指定
const customComputeRole = new iam.Role(this, 'ComputeRole', {
assumedBy: new iam.ServicePrincipal('amplify.amazonaws.com'),
});
const appWithCustomRole = new amplify.App(this, 'AppCustom', {
sourceCodeProvider: new amplify.GitHubSourceCodeProvider({
owner: 'myorg',
repository: 'myrepo',
oauthToken: cdk.SecretValue.secretsManager('github-token'),
}),
platform: amplify.Platform.WEB_COMPUTE,
computeRole: customComputeRole, // カスタムコンピュートロールを指定
});
EC2: i7iインスタンスクラスの追加 (PR #34453)
高性能ストレージ最適化インスタンスであるi7iインスタンスクラスが追加されました。
import * as ec2 from 'aws-cdk-lib/aws-ec2';
// i7iインスタンスクラスの使用
const instance = new ec2.Instance(this, 'Instance', {
vpc,
instanceType: ec2.InstanceType.of(
ec2.InstanceClass.I7I, // 新しいi7iインスタンスクラス
ec2.InstanceSize.XLARGE2 // i7i.2xlarge
),
machineImage: ec2.MachineImage.latestAmazonLinux2023(),
});
// 利用可能なサイズ:
// - i7i.2xlarge
// - i7i.12xlarge
// - i7ie.18xlarge
// - i7ie.24xlarge
i7iインスタンスは、高いストレージスループットとIOPSを必要とするワークロード(データベース、分析など)に適しています。
まとめ
AWS CDK v2.198.0では、L1 CloudFormationリソースの広範な更新が行われ、DataSyncでの柔軟なシークレット管理、SESでのSNS通知、Syntheticsでのリトライ機能など、多数の新機能が追加されました。大規模アプリケーションでの合成失敗の修正により、エンタープライズレベルのアプリケーションでもCDKをより安定して使用できるようになります。Alphaモジュールでは、AmplifyのSSRサポート強化とEC2の最新インスタンスタイプのサポートにより、開発の選択肢が広がっています。