首页 > 解决方案 > 如何将 lambda 连接到 CloudFront?AWS CDK JS

问题描述

代码:

rootOriginFunc = new cloudfront.experimental.EdgeFunction(stack, 'RootOriginFunction', {
    runtime: lambda.Runtime.NODEJS_14_X,
    handler: 'origin.handler',
    code: lambda.Code.fromAsset("./lib/lambdas"),
  });

  const lambdaFunctionAssociations = [
    {
      functionVersion: rootOriginFunc.currentVersion,
      eventType: cloudfront.LambdaEdgeEventType.ORIGIN_REQUEST,
    }
  ];

.....

....
{
    pathPattern: pathPattern,
    allowedMethods: cloudfront.CloudFrontAllowedMethods.ALL,
    forwardedValues: {
      queryString: true,
      headers: ["Authorization"],
    },
    defaultTtl,
    maxTtl,
    minTtl,
    isDefaultBehavior,
    lambdaFunctionAssociations,
  };

错误:

Users/denis/Documents/projects/ok/ok-app/cdk/node_modules/@aws-cdk/aws-cloudfront/lib/web-distribution.ts:601
        if (a.lambdaFunction.role && a.lambdaFunction.role instanceof iam.Role && a.lambdaFunction.role.assumeRolePolicy) {
                             ^
TypeError: Cannot read property 'role' of undefined
    at CloudFrontWebDistribution.toBehavior (/Users/denis/Documents/projects/ok/ok-app/cdk/node_modules/@aws-cdk/aws-cloudfront/lib/web-distribution.ts:601:30)
    at new CloudFrontWebDistribution (/Users/denis/Documents/projects/ok/ok-app/cdk/node_modules/@aws-cdk/aws-cloudfront/lib/web-distribution.ts:478:78)
    at new CdkStack (/Users/denis/Documents/projects/ok/ok-app/cdk/lib/cdk-stack.ts:68:26)
    at Object.<anonymous> (/Users/denis/Documents/projects/ok/ok-app/cdk/bin/cdk.ts:7:1)

问题

  1. 根据文档:https ://docs.aws.amazon.com/cdk/api/latest/docs/aws-cloudfront-readme.html#lambdaedge不需要提供任何角色。
  2. 如何提供所需的角色?

环境

标签: amazon-cloudfrontaws-cdk

解决方案


LambdaFunctionAssociations应该包含: lambdaFunction

{
  lambdaFunction: IVersion
  eventType: LambdaEdgeEventType
}

推荐阅读