これは AWS CDK v2 デベロッパーガイドです。旧版の CDK v1 は 2022 年 6 月 1 日にメンテナンスを開始し、2023 年 6 月 1 日にサポートを終了しました。
翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
AWS CDK デプロイのトラブルシューティング
AWS Cloud Development Kit (AWS CDK) アプリケーションをデプロイする際の一般的な問題をトラブルシューティングします。
デプロイ時に間違ったサービスプリンシパルが作成される
サービスプリンシパルを持つ AWS Identity and Access Management (IAM) ロールを含む CDK アプリケーションをデプロイする際、サービスプリンシパルのドメインが正しく作成されていないことがわかったとします。
以下は、Amazon CloudWatch Logs がサービスプリンシパルを使用して引き受けることができる IAM ロールを作成する場合の基本的な例です。
import * as cdk from 'aws-cdk-lib'; import * as iam from 'aws-cdk-lib/aws-iam'; import { Construct } from 'constructs'; export class MyCdkProjectStack extends cdk.Stack { constructor(scope: Construct, id: string, props?: cdk.StackProps) { super(scope, id, props); // Create an IAM role for CloudWatch Logs to assume const cloudWatchLogsRole = new iam.Role(this, 'CloudWatchLogsRole', { assumedBy: new iam.ServicePrincipal('logs.amazonaws.com'), // This is for CloudWatch Logs managedPolicies: [ iam.ManagedPolicy.fromAwsManagedPolicyName('service-role/AWSCloudWatchLogsFullAccess') ] }); // You can then use this role in other constructs or configurations where CloudWatch Logs needs to assume a role } }
このスタックをデプロイすると、logs.amazonaws.com という名前のサービスプリンシパルが作成されるはずです。ほとんどの場合、AWS のサービスではサービスプリンシパルに <service>.amazonaws.com という名前が使用されます。
一般的な原因
v2.150.0 より前のバージョンの AWS CDK を使用している場合、このバグが発生する可能性があります。AWS CDK の古いバージョンでは、サービスプリンシパルの命名が標準化されていないため、ドメインが正しくないサービスプリンシパルが作成される可能性があります。
AWS CDK v2.51.0 では、自動的に作成されるすべてのサービスプリンシパルが可能な限り <service>.amazonaws.com を使用するように標準化するという修正が実装されました。この修正は、@aws-cdk/aws-iam:standardizedServicePrincipals 機能フラグを許可することで利用できます。
AWS CDK v2.150.0 以降、これはデフォルトの動作になりました。
解決方法
AWS CDK v2.150.0 以降にアップグレードします。
AWS CDK v2.150.0 以降にアップグレードできない場合は、最低でも v2.51.0 以降にアップグレードする必要があります。次に、cdk.json ファイルで機能フラグ @aws-cdk/aws-iam:standardizedServicePrincipals を許可します。