概要
AWS CDK v2.218.0 では、CloudFront Origins での IPv6 サポート、DocumentDB における Serverless クラスター対応、および L1 リソースでの from<Resource>Arn メソッドの自動生成が追加されました。また、Alpha モジュールでは ElastiCache Serverless の L2 コンストラクトが新たに利用可能になりました。
新機能
CloudFront Origins: HTTP Origin での IP アドレスタイプ指定
CloudFront の HTTP Origin において、IP アドレスタイプ(IPv4 または IPv6)を指定できるようになりました。これにより、IPv6 をサポートするカスタムオリジンを構成できます。
主な変更点
OriginIpAddressTypeenum の追加IPV4: IPv4 のみをサポート(デフォルト)IPV6: IPv6 のみをサポート
HttpOriginPropsにipAddressTypeプロパティを追加
コード例
import * as cloudfront from 'aws-cdk-lib/aws-cloudfront';
import * as origins from 'aws-cdk-lib/aws-cloudfront-origins';
const distribution = new cloudfront.Distribution(this, 'Distribution', {
defaultBehavior: {
origin: new origins.HttpOrigin('example.com', {
// 新機能: IPv6 アドレスタイプを指定
ipAddressType: cloudfront.OriginIpAddressType.IPV6,
// その他のプロパティ
protocolPolicy: cloudfront.OriginProtocolPolicy.HTTPS_ONLY,
customHeaders: {
'X-Custom-Header': 'value',
},
}),
},
});
使用例: IPv4 を明示的に指定する場合
const distribution = new cloudfront.Distribution(this, 'Distribution', {
defaultBehavior: {
origin: new origins.HttpOrigin('example.com', {
ipAddressType: cloudfront.OriginIpAddressType.IPV4, // IPv4 を明示的に指定
}),
},
});
DocumentDB: Serverless クラスターのサポート
DocumentDB において、Serverless クラスターがサポートされました。これにより、使用量に応じて自動的にスケーリングする DocumentDB クラスターを作成できます。
主な変更点
ServerlessV2ScalingConfigurationプロパティの追加minCapacity: 最小キャパシティ(ACU)maxCapacity: 最大キャパシティ(ACU)
instanceTypeが必須ではなくなりました(Serverless クラスターではインスタンスタイプは不要)
コード例: Serverless クラスターの作成
import * as docdb from 'aws-cdk-lib/aws-docdb';
import * as ec2 from 'aws-cdk-lib/aws-ec2';
const vpc = new ec2.Vpc(this, 'Vpc');
// Serverless クラスターの作成
const cluster = new docdb.DatabaseCluster(this, 'ServerlessCluster', {
vpc,
masterUser: {
username: 'admin',
},
// Serverless V2 スケーリング設定
serverlessV2ScalingConfiguration: {
minCapacity: 0.5, // 最小キャパシティ: 0.5 ACU
maxCapacity: 4, // 最大キャパシティ: 4 ACU
},
// instanceType は指定しない(Serverless の場合は不要)
});
コード例: 従来のインスタンスベースのクラスター(変更なし)
// 従来通り、instanceType を指定してインスタンスベースのクラスターを作成することも可能
const instanceCluster = new docdb.DatabaseCluster(this, 'InstanceCluster', {
vpc,
masterUser: {
username: 'admin',
},
instanceType: ec2.InstanceType.of(
ec2.InstanceClass.R5,
ec2.InstanceSize.LARGE,
),
instances: 2, // インスタンス数
});
CodePipeline: CodeBuildFactory での Docker サーバーサポート
CDK Pipelines の CodeBuildFactory で Docker サーバーを使用できるようになりました。これにより、カスタムビルド環境での Docker イメージのビルドとプッシュが可能になります。
コード例
import * as pipelines from 'aws-cdk-lib/pipelines';
import * as codebuild from 'aws-cdk-lib/aws-codebuild';
const pipeline = new pipelines.CodePipeline(this, 'Pipeline', {
synth: new pipelines.ShellStep('Synth', {
input: pipelines.CodePipelineSource.connection('owner/repo', 'main', {
connectionArn: 'arn:aws:codeconnections:...',
}),
commands: [
'npm ci',
'npm run build',
'npx cdk synth',
],
}),
// CodeBuildFactory で Docker サーバーを有効化
codeBuildDefaults: {
buildEnvironment: {
buildImage: codebuild.LinuxBuildImage.STANDARD_7_0,
privileged: true, // Docker デーモンへのアクセスを有効化
},
},
});
L1 リソース: from<Resource>Arn および from<Resource><Prop> メソッドの自動生成
すべての L1 リソースで from<Resource>Arn および from<Resource><Prop> の静的ファクトリーメソッドが自動生成されるようになりました。これにより、ARN やリソース識別子から既存リソースをインポートする処理が標準化されます。
主な機能
-
from<Resource>Arn: ARN からリソースをインポート- ARN テンプレートをパースして変数を抽出
- リソースリファレンスを生成
-
from<Resource><Prop>: プライマリ識別子からリソースをインポート- プロパティ値から ARN を構築
- リソースリファレンスを生成
コード例: DynamoDB テーブルのインポート
import * as dynamodb from 'aws-cdk-lib/aws-dynamodb';
// ARN からテーブルをインポート
const table1 = dynamodb.CfnTable.fromTableArn(
this,
'ImportedTable1',
'arn:aws:dynamodb:us-east-1:123456789012:table/MyTable',
);
// テーブル名からテーブルをインポート
const table2 = dynamodb.CfnTable.fromTableName(
this,
'ImportedTable2',
'MyTable',
);
// インポートしたリソースのプロパティにアクセス可能
console.log(table1.tableRef.tableName); // "MyTable"
console.log(table2.tableRef.tableArn); // 構築された ARN
技術詳細
-
TemplateStringParserクラスの追加parse: ARN テンプレートと実際の ARN をマッチングし、変数値を抽出interpolate: ARN テンプレートと変数マップから ARN 文字列を構築
-
制限事項: プライマリ識別子が複数フィールドを持つリソースでは、ファクトリーメソッドの生成がスキップされます
Alpha モジュール
ElastiCache: Serverless ElastiCache L2 コンストラクト
ElastiCache Serverless の L2 コンストラクトが Alpha モジュールとして追加されました。これにより、Valkey および Redis 互換の Serverless キャッシュを簡単に作成・管理できます。
新しいコンストラクト
ユーザー管理:
IamUser: IAM 認証を使用するユーザーPasswordUser: パスワード認証を使用するユーザーNoPasswordUser: 認証なしのユーザー(テスト環境用)
グループとキャッシュ:
UserGroup: ユーザーをグループ化して管理ServerlessCache: Serverless ElastiCache キャッシュ
コード例: IAM ユーザーと Serverless キャッシュの作成
import * as elasticache from '@aws-cdk/aws-elasticache-alpha';
import * as ec2 from 'aws-cdk-lib/aws-ec2';
const vpc = new ec2.Vpc(this, 'Vpc');
// IAM 認証ユーザーの作成
const iamUser = new elasticache.IamUser(this, 'IamUser', {
userId: 'iam-user-1',
userName: 'iam-cache-user',
engine: elasticache.UserEngine.VALKEY, // VALKEY または REDIS
accessString: 'on ~* &* +@all', // アクセス権限の定義
});
// ユーザーグループの作成
const userGroup = new elasticache.UserGroup(this, 'UserGroup', {
userGroupId: 'my-user-group',
engine: elasticache.UserEngine.VALKEY,
});
// ユーザーをグループに追加
userGroup.addUser(iamUser);
// Serverless キャッシュの作成
const cache = new elasticache.ServerlessCache(this, 'ServerlessCache', {
serverlessCacheName: 'my-serverless-cache',
engine: elasticache.Engine.VALKEY, // VALKEY または REDIS
userGroup,
// ネットワーク設定
vpc,
vpcSubnets: {
subnetType: ec2.SubnetType.PRIVATE_WITH_EGRESS,
},
securityGroups: [
new ec2.SecurityGroup(this, 'CacheSecurityGroup', {
vpc,
description: 'Security group for ElastiCache',
}),
],
// 使用制限の設定(オプション)
dataStorage: {
maximum: 100, // 最大データストレージ: 100 GB
unit: elasticache.DataStorageUnit.GB,
},
ecpuPerSecond: {
maximum: 5000, // 最大 ECPU/秒: 5000
},
// スナップショット設定(オプション)
snapshotRetentionLimit: 7, // スナップショット保持日数: 7日
dailySnapshotTime: '03:00', // 日次スナップショット時刻: 午前3時
});
// IAM でキャッシュへの接続許可を付与
cache.grantConnect(iamUser);
コード例: パスワードユーザーの作成
import * as secretsmanager from 'aws-cdk-lib/aws-secretsmanager';
// Secrets Manager にパスワードを保存
const passwordSecret = new secretsmanager.Secret(this, 'CachePassword', {
generateSecretString: {
excludePunctuation: true,
includeSpace: false,
},
});
// パスワード認証ユーザーの作成
const passwordUser = new elasticache.PasswordUser(this, 'PasswordUser', {
userId: 'password-user-1',
userName: 'cache-user',
engine: elasticache.UserEngine.REDIS,
accessString: 'on ~* &* +@all',
passwords: [passwordSecret], // 最大2つのパスワードを設定可能
});
// ユーザーグループに追加
userGroup.addUser(passwordUser);
コード例: CloudWatch メトリクスの監視
import * as cloudwatch from 'aws-cdk-lib/aws-cloudwatch';
// キャッシュのメトリクスを取得
const bytesUsedMetric = cache.metricBytesUsedForCache({
statistic: cloudwatch.Stats.AVERAGE,
period: cdk.Duration.minutes(5),
});
// アラームを作成
new cloudwatch.Alarm(this, 'HighMemoryUsage', {
metric: bytesUsedMetric,
threshold: 80 * 1024 * 1024 * 1024, // 80 GB
evaluationPeriods: 2,
comparisonOperator: cloudwatch.ComparisonOperator.GREATER_THAN_THRESHOLD,
});
利用可能なメトリクス
ServerlessCache コンストラクトは以下のメトリクスメソッドを提供します:
metricBytesUsedForCache(): キャッシュで使用されているバイト数metricElastiCacheProcesIssingUnits(): ElastiCache 処理ユニット数metricSuccessfulReadRequestLatency(): 読み取りリクエストのレイテンシーmetricSuccessfulWriteRequestLatency(): 書き込みリクエストのレイテンシー
まとめ
AWS CDK v2.218.0 では、CloudFront での IPv6 サポート、DocumentDB Serverless クラスターの対応、L1 リソースでのインポートメソッドの標準化など、複数の重要な機能が追加されました。特に Alpha モジュールでの ElastiCache Serverless L2 コンストラクトの追加により、Serverless アーキテクチャでのキャッシュ管理が大幅に簡素化されます。
これらの機能により、より柔軟で効率的なクラウドインフラストラクチャの構築が可能になります。