我使用无服务器框架使用S3,Lambda和API网关创建图像大小调整服务。这与概念here类似,但这将使用Serverless来设置和配置整个堆栈。
现在我需要找到一种不错的方法来引用serverless.yml文件中生成的API网关的主机名。这就是我的资源。 (只是一个片段)
STATIC_ROOT = os.path.join(BASE_DIR, 'static/')
$ {HOSTNAME HERE}的位置我需要成为无服务器框架生成的API网关API的主机名。
现在,我能想到的最好的方法是在某处创建一个CNAME别名,并在我的API前面使用它。然后我将该CNAME作为环境变量传递,然后在此文件中引用它。但这对我来说并不理想。我希望有人能够将这个项目拉下来,并且只需要一个桶名就可以运行它。无论如何要实现这个目标吗?
答案 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