在serverless.yml
文件中,您可以指定要与已部署API中的函数一起使用的API密钥的名称。列出API密钥名称,然后将要保护的方法标记为私有。例如:
provider:
name: aws
runtime: nodejs4.3
cfLogs: true
apiKeys:
- MyAPIKey
部署后,框架生成API密钥并将其分配给函数。即使环境中已存在具有相同名称的密钥,它也会生成密钥。
有没有办法指定现有的API密钥,而不是让框架生成它?我们确实希望继续生成与部署分开的密钥。
答案 0 :(得分:6)
我知道这是旧的,但我最近遇到了这个问题并解决了,所以我想我会把我在这里找到的东西。
这个答案是基于这个论坛帖子,这需要一些上下文让我开始工作: https://forum.serverless.com/t/using-an-existing-api-key/770
使用资源部分可以将自定义CloudFormation配置添加到您的部署中。这包括添加启用了特定api密钥的自定义使用计划:
https://serverless.com/framework/docs/providers/aws/guide/resources/
结构大致如下,解释如下:
resources:
Resources:
MyServiceUsagePlan:
Type: "AWS::ApiGateway::UsagePlan"
DependsOn: ApiGatewayRestApi
Properties:
UsagePlanName: ${self:service}-${self:provider.stage}-usagePlan
Quota:
Limit: 10000
Offset: 0
Period: DAY
Throttle:
BurstLimit: 20
RateLimit: 10
ApiStages:
-
ApiId:
Ref: ApiGatewayRestApi
Stage: ${self:provider.stage}
MyServiceKey:
Type: "AWS::ApiGateway::UsagePlanKey"
DependsOn: MyServiceUsagePlan
Properties :
KeyId: ${file(./conf/${self:provider.stage}.yml):MyServiceKeyId}
KeyType: API_KEY
UsagePlanId:
Ref: MyServiceUsagePlan
每个资源都以您提供的密钥命名。无服务器为您提供无服务器生成的资源名称的名称,以防您要覆盖它们的一部分或引用它们。但是,只要符合CloudFormation命名要求,您就可以为它们命名。
无服务器 添加一些变量,但是:
此外,有关使用计划和使用计划密钥的一些行为:
您可能有兴趣在任何一个api部署之外创建auth结构,并使用CloudFormation(通过无服务器)输出服务来获取您创建的每个资源的ARN和/或ID:
http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/outputs-section-structure.html
输出使用与Resources相同的格式,示例aws serverless.yml中可以看到一个示例。这将允许您独立于apis本身更改使用计划并单独维护。您可以保存这些输出以供api使用,使用javascript变量引用仅添加应在每个阶段per-api上启用的计划。
tl; dr - 使用资源结构进行原始CloudFormation配置。