我有一个无服务器项目,正在创建API网关API等。项目中的一个功能需要为API端点生成URL。
我的计划是使用serverless.yml中的资源输出获取API ID,然后创建URL并将其作为env参数传递给lambda函数。
我的问题/问题是如何在serverless.yml中将API ID作为云形成输出?
我试过了:
resources:
Outputs:
RESTApiId:
Description: The id of the API created in the API gateway
Value:
Ref: name-of-api
但这会产生错误:
The CloudFormation template is invalid: Unresolved resource dependencies [name-of-api] in the Outputs block of the template
答案 0 :(得分:2)
您可以在from collections import defaultdict
d = defaultdict(set)
for first, common_name, *others, last in my_list:
if common_name.startswith("COMMON_NAME"): # Maybe unneccessary
if last.startswith("MYFR"):
d[common_name].add(last)
d = {k: len(v) for k, v in d.items()}
# {'COMMON_NAME1': 3, 'COMMON_NAME2': 2}
文件中编写如下内容:
serverless.yml
现在,您可以使用可选的命令行选项provider:
region: ${opt:region, 'eu-west-1'}
stage: ${opt:stage, 'dev'}
environment:
REST_API_URL:
Fn::Join:
- ""
- - "https://"
- Ref: "ApiGatewayRestApi"
- ".execute-api."
- ${self:provider.region}
- Ref: "AWS::URLSuffix"
- "/"
- ${self:provider.stage}"
和/或--region调用serverless
,以覆盖上面定义的默认值,例如:
--stage
然后,您可以在代码中使用环境变量serverless deploy --stage production --region us-east-1
node.js:
REST_API_URL
python:
const restApiUrl = process.env.REST_API_URL;
Java:
import os
rest_api_url = os.environ['REST_API_URL']
答案 1 :(得分:-1)
无服务器框架有一个文档页面,介绍它们如何为资源生成名称。
请参阅。 AWS CloudFormation Resource Reference
因此,生成的RestAPI资源称为ApiGatewayRestApi
。