如何在 CloudFormation 模板中将多个 URL 传递给 AllowOrigins
How to Pass Multiple URLs to AllowOrigins in CloudFormation Template
我正在使用 YML 格式的 CloudFormation 模板。
根据环境,我需要能够为我的 CorsConfiguration 的 Allowed Origins 属性使用不同的 URL。理想情况下,我想使用这样定义的参数:
AllowedOrigins:
Description: Allowed Origins
Type: String
AllowedPattern: '.+'
我尝试传入一个分隔字符串(即“http://localhost:4200,http://localhost:4201”),并像这样拆分值:
OnboardingHttpApi:
Type: AWS::Serverless::HttpApi
Properties:
CorsConfiguration:
AllowOrigins: !Split [ ",", !Ref AllowedOrigins ]
CloudFormation 中的响应是:
导入期间发现警告:CORS 方案格式错误,忽略。 (服务:AmazonApiGatewayV2;状态代码:400;错误代码:BadRequestException;请求 ID:21072c02-70c3-473d-9629-784005226bd4;代理:null)(服务:null;状态代码:404;错误代码:BadRequestException;请求 ID:空;代理:空)
这是我从 AWS Support 得到的答案:
Split 函数用于将字符串拆分为列表,但不用于引用属性。它旨在与 Select 函数或其他函数一起使用。所以它不是用于引用的 stand-alone 函数。为此,您可以使用 CommaDelimitedList 参数类型。您可以使用 CommaDelimitedList 参数类型在单个参数中指定多个字符串值。传递 CommaDelimitedList 参数值后,您可以稍后在模板中引用它。这是一个有效的 CloudFormation 模板:
AWSTemplateFormatVersion: 2010-09-09
Transform: 'AWS::Serverless-2016-10-31'
Parameters:
AllowedOriginsURLs:
Type: CommaDelimitedList
Default: 'https://example.com,https://example2.com'
Description: Please enter your URLs
Resources:
HttpApi:
Type: 'AWS::Serverless::HttpApi'
Properties:
StageName: my-stage-name
Tags:
Tag: MyTag
StageVariables:
StageVar: Value
CorsConfiguration:
AllowOrigins: !Ref AllowedOriginsURLs
AllowHeaders: [ x-apigateway-header ]
AllowMethods: [ GET ]
MaxAge: 600
AllowCredentials: true
AllowedOriginsURLs 参数的类型为 CommaDelimitedList,默认值为 'http://localhost:4200,http://localhost:4201'。您可以在启动时更改此参数,然后您可以在 AllowOrigins 上引用 AllowedOriginsURLs。
我正在使用 YML 格式的 CloudFormation 模板。
根据环境,我需要能够为我的 CorsConfiguration 的 Allowed Origins 属性使用不同的 URL。理想情况下,我想使用这样定义的参数:
AllowedOrigins:
Description: Allowed Origins
Type: String
AllowedPattern: '.+'
我尝试传入一个分隔字符串(即“http://localhost:4200,http://localhost:4201”),并像这样拆分值:
OnboardingHttpApi:
Type: AWS::Serverless::HttpApi
Properties:
CorsConfiguration:
AllowOrigins: !Split [ ",", !Ref AllowedOrigins ]
CloudFormation 中的响应是:
导入期间发现警告:CORS 方案格式错误,忽略。 (服务:AmazonApiGatewayV2;状态代码:400;错误代码:BadRequestException;请求 ID:21072c02-70c3-473d-9629-784005226bd4;代理:null)(服务:null;状态代码:404;错误代码:BadRequestException;请求 ID:空;代理:空)
这是我从 AWS Support 得到的答案:
Split 函数用于将字符串拆分为列表,但不用于引用属性。它旨在与 Select 函数或其他函数一起使用。所以它不是用于引用的 stand-alone 函数。为此,您可以使用 CommaDelimitedList 参数类型。您可以使用 CommaDelimitedList 参数类型在单个参数中指定多个字符串值。传递 CommaDelimitedList 参数值后,您可以稍后在模板中引用它。这是一个有效的 CloudFormation 模板:
AWSTemplateFormatVersion: 2010-09-09
Transform: 'AWS::Serverless-2016-10-31'
Parameters:
AllowedOriginsURLs:
Type: CommaDelimitedList
Default: 'https://example.com,https://example2.com'
Description: Please enter your URLs
Resources:
HttpApi:
Type: 'AWS::Serverless::HttpApi'
Properties:
StageName: my-stage-name
Tags:
Tag: MyTag
StageVariables:
StageVar: Value
CorsConfiguration:
AllowOrigins: !Ref AllowedOriginsURLs
AllowHeaders: [ x-apigateway-header ]
AllowMethods: [ GET ]
MaxAge: 600
AllowCredentials: true
AllowedOriginsURLs 参数的类型为 CommaDelimitedList,默认值为 'http://localhost:4200,http://localhost:4201'。您可以在启动时更改此参数,然后您可以在 AllowOrigins 上引用 AllowedOriginsURLs。