我想通过serverless framework
部署Lambda
+API-gateway
+CloudFront
.
Lambda
和API-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"
结果,我必须按照步骤操作。
- 部署
Lambda
+API-gateway
。 - 检查
API-gateway
终结点。 - 将
CloudFront
资源添加到serverless.yml
中DominName
属性指向API-gateway
终结点。 - 部署
CloudFront
.
有没有办法一次部署所有(CloudFront
+API-gateway
+Lambda
(? (但我不想给API-gateway
DNS(
您可以使用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