【发布时间】:2022-02-01 07:26:27
【问题描述】:
最近,我尝试使用 SAM 部署 lambda 函数和 Cloudfront 发行版以及 CloudFormation yaml 模板。但是,我在 CloudFormation 中坚持使用 DomainName,因为在实际部署之前我没有 API 网关的 ID。
因此,我尝试使用!Sub "${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/" 作为DomainName 将 API 网关与 CF 分发链接,但出现以下错误:
Resource handler returned message: "Invalid request provided: The parameter origin name must be a domain name.
我的代码如下所示:
AWSTemplateFormatVersion: 2010-09-09
Description: >-
cf-apigw-lambda-dynamodb
Transform:
- AWS::Serverless-2016-10-31
Resources:
getHeadersFunction:
Type: AWS::Serverless::Function
Properties:
Handler: src/handlers/get-items.getItemsHandler
Runtime: nodejs14.x
Architectures:
- x86_64
MemorySize: 128
Timeout: 100
Description: Get all items
Events:
Api:
Type: Api
Properties:
Path: /items
Method: GET
CloudfrontDistribution:
Type: AWS::CloudFront::Distribution
Properties:
DistributionConfig:
Origins:
- DomainName: !Sub "${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/"
Id: ApiOrigin
CustomOriginConfig:
HTTPPort: 80
HTTPSPort: 443
OriginProtocolPolicy: https-only
Enabled: true
DefaultCacheBehavior:
TargetOriginId: ApiOrigin
ViewerProtocolPolicy: redirect-to-https
CachePolicyId: c17edf1f-cb61-49d6-979d-39f05ba95f91
OriginRequestPolicyId: c57eds1f-c8d1-4544-b8ce-6f4307e30d2e
Outputs:
WebEndpoint:
Description: "API Gateway endpoint URL for Prod stage"
Value: !Sub "https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/"
【问题讨论】:
-
你试过
!Sub "https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/"(加https://)
标签: amazon-web-services aws-lambda amazon-cloudformation aws-api-gateway amazon-cloudfront