AWS CDK で ALB アクセスログを Amazon S3 バケットに出力する Tips

以前、AWS CDK で Application Load Balancer (ALB) の作成時にアクセスログを Amazon S3 バケットに出力する設定で躓いたので、設定方法を備忘として執筆します。

モジュールはこちらを利用しています。
aws-cdk-lib.aws_elasticloadbalancingv2 module · AWS CDK

やってみよう

スタックファイルにてALB の作成を定義した後に、以下のように logAccessLogs メソッドを使用して ALB のアクセスログを有効化できます。
第一引数に S3 バケットオブジェクト、第二引数にログを保存する S3 バケット内のプレフィックス(フォルダパス)を指定します。

ALBのアクセスログ配信はAWS管理のELBログ配信アカウントから配信されるので、S3バケットには適切なバケットポリシーを事前に付与してください。
設定は以下のリンクを参照してください。
Application Load Balancer のアクセスログを有効にする – エラスティックロードバランシング

 // ALBの作成
    const alb = new elasticloadbalancingv2.ApplicationLoadBalancer(this, 'ALB', {
        vpc: tokyoVpc,                 // ALBを配置するVPCを指定
        internetFacing: true,          // インターネット向けALBとして設定
        securityGroup: albSg,          // ALB用のセキュリティグループを指定
        vpcSubnets: { subnets: vpcPublicSubnets },  // ALBをパブリックサブネットに配置
        loadBalancerName: 'tokyo-alb',  // ALBの名前を指定
        });
     // アクセスログをS3バケットに保存する設定
        alb.logAccessLogs(albAccessLogsBucket, 'alb-accesslogs');

bin配下のappは以下のように定義してデプロイしてみます。

const app = new cdk.App();
new AlbStack(app, 'AlbStack', {
});

そうすると、以下のリージョン指定が不足しているというエラーが発生してデプロイが失敗します。

ValidationError: Region is required to enable ELBv2 access logging
at path [AlbStack/ALB] in aws-cdk-lib.aws_elasticloadbalancingv2.ApplicationLoadBalancer

 

logAccessLogsメソッドを確認していきましょう。
確認するとリージョンを明示的に指定する旨の説明文と実装方法が記載されたURLがありました。
class ApplicationLoadBalancer (construct) · AWS CDK

    logAccessLogs(bucket: s3.IBucket, prefix?: string): void;
    /**
     * Enable connection logging for this load balancer.
     *
     * A region must be specified on the stack containing the load balancer; you cannot enable logging on
     * environment-agnostic stacks.
     *
     * @see https://docs.aws.amazon.com/cdk/latest/guide/environments.html
     */

解決方法

解決方法として一例ですが、appファイルにenvとしてリージョン名を明示的に指定することでデプロイが可能になります。

const app = new cdk.App();
new AlbStack(app, 'AlbStack', {
 env: { region: 'ap-northeast-1' } // 東京リージョンを指定する例
});

設定を追加するとデプロイが成功し、ALBにアクセスログが設定されました。

以上となります、CDKでの実装の参考になれば幸いです。

タイトルとURLをコピーしました