概要
このリリースでは、クロスリージョン参照を使用する際に発生していた「exports cannot be updated」エラーが修正されました。また、BucketDeployment で空のソース配列を使用した場合にデプロイが失敗する問題も解消されています。
リリース: v2.253.1
バグ修正
クロスリージョン参照での「exports cannot be updated」エラーの修正 (#37790)
- クロスリージョン参照を使用しているスタックで、参照元の値を更新しようとすると「exports cannot be updated」エラーが発生する問題がありました
ExportWriter/ExportReaderメカニズムは CloudFormation のFn::ImportValue/Exportと同様に強い参照を生成するため、単純にFn::GetStackOutputに置き換えることはできませんでした- この修正では、クロスリージョン参照の内部実装が見直され、参照の更新が正しく処理されるようになりました
修正後の動作:
import { Stack, App } from 'aws-cdk-lib';
import { Bucket } from 'aws-cdk-lib/aws-s3';
import { StringParameter } from 'aws-cdk-lib/aws-ssm';
const app = new App();
// プロデューサースタック(us-east-1)
const producerStack = new Stack(app, 'ProducerStack', {
env: { region: 'us-east-1' },
crossRegionReferences: true,
});
const bucket = new Bucket(producerStack, 'MyBucket');
// コンシューマースタック(us-west-2)
const consumerStack = new Stack(app, 'ConsumerStack', {
env: { region: 'us-west-2' },
crossRegionReferences: true,
});
// クロスリージョン参照を使用
// 修正前: bucket の設定を変更すると「exports cannot be updated」エラーが発生
// 修正後: 正しく更新が処理される
new StringParameter(consumerStack, 'BucketArnParam', {
parameterName: '/app/bucket-arn',
stringValue: bucket.bucketArn,
});
ポイント:
crossRegionReferences: trueを設定しているスタック間の参照で発生していた問題です- プロデューサースタック側のリソースを更新した際に、コンシューマースタック側でエラーになるケースが解消されました
- 既存のクロスリージョン参照を使用しているプロジェクトでは、この修正により安定した更新が可能になります
BucketDeployment で空のソースを使用するとデプロイエラーになる問題の修正 (#37786)
BucketDeploymentのsourcesプロパティに空の配列を渡すと、デプロイ時にエラーが発生する問題がありました- 内部で
LazyからBoxAPI への移行時に、omitEmpty: trueが設定されていたため、空の配列がundefinedとして処理され、カスタムリソースのプロパティが正しく生成されませんでした omitEmpty: falseに修正することで、空の配列でも正しくリソースが生成されるようになりました
修正後の動作:
import { BucketDeployment, Source } from 'aws-cdk-lib/aws-s3-deployment';
import { Bucket } from 'aws-cdk-lib/aws-s3';
const bucket = new Bucket(stack, 'DestinationBucket');
// 条件付きでソースを追加するケース
const sources: Source[] = [];
if (shouldIncludeAssets) {
sources.push(Source.asset('./assets'));
}
// 修正前: sources が空の場合にデプロイエラー
// 修正後: 空の配列でも正しくデプロイされる
new BucketDeployment(stack, 'Deploy', {
sources: sources,
destinationBucket: bucket,
});
ポイント:
- 条件分岐によってソースを動的に追加するユースケースで、条件に該当しない場合に空の配列になることがあります
- この修正により、空のソースでも
BucketDeploymentが正しく動作するようになりました
まとめ
このリリースでは、クロスリージョン参照の更新時エラーと BucketDeployment の空ソース問題が修正されました。特にクロスリージョン参照を使用しているプロジェクトでは、スタック更新時の安定性が向上しています。