我如何为Cloudfront创建一个HttpOrigin来使用Lambda函数url?



尝试设置Cloudfront行为使用Lambda函数url的代码如下:

this.distribution = new Distribution(this, id + "Distro", {
comment: id + "Distro",
defaultBehavior: {
origin: new S3Origin(s3Site),
viewerProtocolPolicy: ViewerProtocolPolicy.REDIRECT_TO_HTTPS,
},
additionalBehaviors: {
[`api-prd-v2/*`]: {
compress: true,
originRequestPolicy: originRequestPolicy,
origin: new HttpOrigin(functionUrl.url, {
protocolPolicy: OriginProtocolPolicy.HTTPS_ONLY,
originSslProtocols: [OriginSslPolicy.TLS_V1_2],
}),
allowedMethods: AllowedMethods.ALLOW_ALL,
viewerProtocolPolicy: ViewerProtocolPolicy.HTTPS_ONLY,
cachePolicy: apiCachePolicy,
},

functionUrl对象在不同的堆栈中创建并传递给cloudformation堆栈,定义如下:

this.functionUrl = new FunctionUrl(this, 'LambdaApiUrl', {
function: this.lambdaFunction,
authType: FunctionUrlAuthType.NONE,
cors: {
allowedOrigins: ["*"],
allowedMethods: [HttpMethod.GET, HttpMethod.POST],
allowCredentials: true,
maxAge: Duration.minutes(1)
}
});

以上代码失败,因为"参数源名称不能包含"&"。据推测,这是因为functionUrl.url的计算结果类似于https://xxx.lambda-url.ap-southeast-2.on.aws/(注意https://),而HttpOrigin参数应该只是域名,如xxx.lambda-url.ap-southeast-2.on.aws

我不能只是写代码来破解url(即functionUrl.url.replace("https://", "")),因为当我的代码执行时,url属性的值是一个像${Token[TOKEN.350]}一样的令牌。

函数url工作正常:如果我硬编码HttpOrigin到函数url的值(即xxx.lambda-url.ap-southeast-2.on.aws) -它工作得很好。

我如何使用CDK代码来设置从Cloudfront到函数url的引用?

我使用aws-cdk2.21.1版本。


添加支持有一个开放的问题:https://github.com/aws/aws-cdk/issues/20090

使用CloudFormation内部函数解析url字符串:

cdk.Fn.select(2, cdk.Fn.split('/', functionUrl.url));
// -> 7w3ryzihloepxxxxxxxapzpagi0ojzwo.lambda-url.us-east-1.on.aws

最新更新