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

时间:2018-06-19 15:12:58

标签: amazon-web-services serverless-framework

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

通过在Lambda中定义API-gateway可以部署

functionserverless.yml,对于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.yml,其DominName属性指向API-gateway端点。
  4. 部署CloudFront

有什么办法可以一次全部部署(CloudFront + API-gateway + Lambda)? (但我不想提供API-gateway DNS)

2 个答案:

答案 0 :(得分:1)

您可以使用serverless-api-cloudfront来自动创建正确配置的AWS CloudFront分发,以将流量路由到API Gateway。要使用它,很简单,您必须使用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's页面。

答案 1 :(得分:1)

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

无服务器框架创建cloudformation模板以进行部署 -SLS包 -cd .serverless -cat cloudformation-template-update-stack.json

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

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