需要配置无服务器资源输出以获取api网关api id

时间:2017-07-05 23:47:42

标签: aws-api-gateway amazon-cloudformation serverless-framework

我有一个无服务器项目,正在创建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

2 个答案:

答案 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