在serverless.yml文件中引用AWS API Gateway的主机名以获取其他CloudFormation资源?

时间:2017-06-14 01:43:50

标签: amazon-web-services aws-api-gateway serverless-framework serverless-architecture amazon-cloudformation

我使用无服务器框架使用S3,Lambda和API网关创建图像大小调整服务。这与概念here类似,但这将使用Serverless来设置和配置整个堆栈。

现在我需要找到一种不错的方法来引用serverless.yml文件中生成的API网关的主机名。这就是我的资源。 (只是一个片段)

STATIC_ROOT = os.path.join(BASE_DIR, 'static/')

$ {HOSTNAME HERE}的位置我需要成为无服务器框架生成的API网关API的主机名。

现在,我能想到的最好的方法是在某处创建一个CNAME别名,并在我的API前面使用它。然后我将该CNAME作为环境变量传递,然后在此文件中引用它。但这对我来说并不理想。我希望有人能够将这个项目拉下来,并且只需要一个桶名就可以运行它。无论如何要实现这个目标吗?

1 个答案:

答案 0 :(得分:5)

主机名不是由cloudformation直接公开的,因此您必须根据创建的资源的输出值构建它。 无服务器框架的所有资源都遵循某种命名约定: AWS - Resources

使用此信息,您可以通过以下语句创建主机名:

imageBucket:
  Type: AWS::S3::Bucket
  Properties:
    BucketName: ${env:IMAGE_BUCKET}
    WebsiteConfiguration:
      RoutingRules:
        -
          RedirectRule:
            Hostname: 
              Fn::Join:
                - ""
                - - Ref: ApiGatewayRestApi
                  - ".execute-api."
                  - Ref: AWS::Region
                  - ".amazonaws.com"
            HttpRedirectCode: 302
          RoutingRuleCondition:
            HttpErrorCodeReturnedEquals: 404