【问题标题】:AWS deploy Cloudfront with api gatewayAWS 使用 api 网关部署 Cloudfront
【发布时间】: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


【解决方案1】:

/Prod/ 不能包含在 DomainName

DomainName: !Sub "${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com"

【讨论】:

  • 原来如此,非常感谢!
猜你喜欢
  • 2017-08-17
  • 2022-12-10
  • 2019-02-04
  • 2020-09-30
  • 2019-06-28
  • 1970-01-01
  • 1970-01-01
  • 2020-06-21
  • 1970-01-01
相关资源
最近更新 更多