Closed6

cdktf で Cloudfront の defaultCacheBehavior に functionAssosiation する格闘

sogaohsogaoh
cdktf での問題の実装箇所(一部)
import { Construct } from "constructs";
import { App, TerraformStack, S3Backend, TerraformOutput  } from "cdktf";
import { AwsProvider, acm, route53, cloudfront, iam, s3 } from "@cdktf/provider-aws";
import { S3 } from "./.gen/modules/s3";
import { Cloudfront } from "./.gen/modules/cloudfront";
import { FunctionEventType } from "@aws-cdk/aws-cloudfront";
import { CloudfrontDistributionDefaultCacheBehaviorFunctionAssociation as CfdDcbFa } from "@cdktf/provider-aws/lib/cloudfront/cloudfront-distribution";
import * as fs from 'fs';


//・・・

    const cloudfrontFunctionName = `${config.environment}-cf_fn`
    const cloudfrontFunction = new cloudfront.CloudfrontFunction(this, `${config.environment}-cf_fn`, {
      name: cloudfrontFunctionName,
      runtime: "cloudfront-js-1.0",
      code: fs.readFileSync('./functions/index.js').toString()
    })
    new TerraformOutput(this, 'Cloudfront_CustomFunction_Arn', {
      value: cloudfrontFunction.arn
    })
    const cloudfrontFunctionAssosiation: CfdDcbFa = {
      eventType: FunctionEventType.VIEWER_REQUEST,
      functionArn: cloudfrontFunction.arn
    }

//・・・
    const cloudfrontDistributionName = `${config.environment}-cf_dist`
    const cloudfrontDistribution = new Cloudfront(this, cloudfrontDistributionName, {
 
     //・・・
 
     //ビヘイビア
      defaultCacheBehavior: {
        target_origin_id: `S3-${cloudfrontDistributionName}`,
        cache_policy_id: cloudfrontCachePolicy.id,
        compress: true,
        viewer_protocol_policy: "redirect-to-https",
        allowed_methods: ["GET","HEAD","OPTIONS"],
        cached_methods: ["HEAD", "GET"],
        use_forwarded_values: false,
        response_headers_policy_id: securityHeaderPolicy.id,
        smooth_streaming: false,

        functionAssociation: cloudfrontFunctionAssosiation
        // function_association: [
        //   {
        //     event_type: FunctionEventType.VIEWER_REQUEST,
        //     function_arn: cloudfrontFunction.arn
        //   }
        // ]
      },
    }

sogaohsogaoh

状況としては、↑のコードでコメントアウトしている
function_association のところを、CDK式(?)に

functionAssociation: cloudfrontFunctionAssosiation 

にしたら、cdktf diff 、cdktf deploy はできたものの、関数の関連付け が残念ながらできてなかった、という感じ。

やりたいことは、 cdktf deploy したら関数の関連付けができていてほしい、ということ。

sogaohsogaoh

できれば、Terraform Module を利用しているので、その実装に従った指定を行いたいのですが、
どう指定するのが適切なのかわからないのです。。

https://github.com/terraform-aws-modules/terraform-aws-cloudfront/blob/master/main.tf#L162-L170

↓をどう直せばいいのか、というのが質問。


        function_association: [
          {
            event_type: FunctionEventType.VIEWER_REQUEST,
            function_arn: cloudfrontFunction.arn
          }
        ]
sogaohsogaoh

こうでした


        function_association: {
          "viewer-request": {
            function_arn: cloudfrontFunction.arn
          }
        }
このスクラップは2022/09/12にクローズされました