一次通过无服务器框架部署 Lambda + API 网关 + CloudFront



我想通过serverless framework部署Lambda+API-gateway+CloudFront.

LambdaAPI-gateway可以通过在serverless.yml中定义function来部署,CloudFront我定义resources

但是,对于CloudFront,我必须定义DomainName属性,该属性应该填充API-gateway尚未部署的端点。

Resources:
ApiDistribution:
Type: AWS::CloudFront::Distribution
Properties:
DistributionConfig:
Origins:
- Id: ApiGateway
DomainName: "api-gateway endpoint"

结果,我必须按照步骤操作。

  1. 部署Lambda+API-gateway
  2. 检查API-gateway终结点。
  3. CloudFront资源添加到serverless.ymlDominName属性指向API-gateway终结点。
  4. 部署CloudFront.

有没有办法一次部署所有(CloudFront+API-gateway+Lambda(? (但我不想给API-gatewayDNS(

您可以使用serverless-api-cloudfront,它会自动创建正确配置的 AWS CloudFront 分配,将流量路由到 API 网关。要使用它,这很简单,您必须使用npm i --save-dev serverless-api-cloudfront,之后您必须添加serverless.yml文件:

plugins:
- serverless-api-cloudfront
custom:
apiCloudFront:
domain: my-custom-domain.com
certificate: arn:aws:acm:us-east-1:000000000000:certificate/00000000-1111-2222-3333-444444444444
waf: 00000000-0000-0000-0000-000000000000
compress: true
logging:
bucket: my-bucket.s3.amazonaws.com
prefix: my-prefix
cookies: none
headers:
- x-api-key
querystring:
- page
- per_page

如果你了解它是如何工作的,以及其他可能的配置,你可以访问他们的Github的页面。

您可以使用与在 cloudformation 中引用它们相同的方式引用无服务器创建的任何资源。

无服务器框架创建要部署的云形成模板 - SLS包 - cd .serverless - 猫云形成-模板-更新-堆栈.json

您可以获取 sls 为您创建的资源的名称

DomainName:
Fn::Join:
- "."
- - Ref: ApiGatewayRestApi
- execute-api
- - Ref: AWS::Region
- amazonaws.com

最新更新