如何为 Cloudfront 创建 HttpOrigin 以使用 Lambda 函数 url?
How do I create a HttpOrigin for Cloudfront to use a Lambda function url?
尝试设置 Cloudfront
行为以使用 Lambda function 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-cdk
版本 2.21.1。
有一个未解决的问题需要添加支持:https://github.com/aws/aws-cdk/issues/20090
使用CloudFormation Intrinsic Functions解析url字符串:
cdk.Fn.select(2, cdk.Fn.split('/', functionUrl.url));
// -> 7w3ryzihloepxxxxxxxapzpagi0ojzwo.lambda-url.us-east-1.on.aws
尝试设置 Cloudfront
行为以使用 Lambda function 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-cdk
版本 2.21.1。
有一个未解决的问题需要添加支持:https://github.com/aws/aws-cdk/issues/20090
使用CloudFormation Intrinsic Functions解析url字符串:
cdk.Fn.select(2, cdk.Fn.split('/', functionUrl.url));
// -> 7w3ryzihloepxxxxxxxapzpagi0ojzwo.lambda-url.us-east-1.on.aws