notes mizzy.org

論理IDと物理リソース名は別物だが漏れる

確認済み 出典: explorations/2026-04-26-cdk-pulumi-terraform-carina-comparison/chapter-5-identity-and-refactoring-stability.md物理リソース名との関係 作成

論理ID / URN / binding名はstate/IR内部の識別子であり、AWS上の物理リソース名(S3 bucket名、IAM Role名等)とは別物である。ただし完全に独立しているわけではなく、リソース名を省略したときに内部識別子が物理名へ漏れる

CDKとPulumiのデフォルト命名を比べると差がはっきりする。

観点CDKPulumi (デフォルト)
形式<stack>-<logicalId>-<random><logicalName>-<7hex> (terraform-bridgeベース)
例(new ... ("mybucket"))mystack-mybucketf68f3ff0-abc123xyzmybucket-d7c2fa0
stack名を含むはいいいえ
論理IDのhashを含むはい(MyBucketF68F3FF0)いいえ(logical nameそのまま)

Pulumiの方がCDKよりユーザフレンドリーである。

construct path MyStack/MyBucket 論理ID MyBucketF68F3FF0 state / IR内部の識別子。 ここまでは物理名と別物である。 名前を明示すれば bucketNameを書けば 物理名は論理IDから独立する 名前を省略すると漏れる CFNが物理名を自動生成 <stack>-<logicalId>-<random> MyAppProductionStack-MyServiceTargetGroupF68F3FF0 51文字 ALB Target Groupの32文字制限で、ここから右が落ちる MyAppProductionStaMyServ-XXXXXXXX 残るのは前半と別のハッシュで、識別に効く「MyServiceTargetGroup」の部分が消えている。
漏れは一箇所ではなく経路になっている。名前の省略で論理IDが物理名へ流れ込み、その先の長さ制限が、いちばん意味のある区間を削り落とす。

長さ制限による切り詰め(CDK特有)

AWSリソース名には長さ制限がある — S3が63文字、IAM Roleが64文字、Lambda Functionが64文字、そしてALB Target Groupは32文字MyAppProductionStack-MyServiceTargetGroupF68F3FF0は51文字で、ALB TGの32文字制限にかかるとMyAppProductionStaMyServ-XXXXXXXXのように真ん中が削られる。元の意味のある部分が削られて識別がより困難になる。

運用面の弊害

なおCarinaではname属性とstate identifierは独立しており、CDK / Pulumiの自動名生成とは異なる設計になっている。

#identity #命名 #運用