[英]Using an existing API key with the Serverless Framework in AWS
在serverless.yml
文件中,您可以指定要與已部署API中的函數一起使用的API密鑰的名稱。 列出API密鑰名稱,然后將要保護的方法標記為私有。 例如:
provider:
name: aws
runtime: nodejs4.3
cfLogs: true
apiKeys:
- MyAPIKey
部署后,框架會生成API密鑰並將其分配給函數。 即使環境中已存在具有相同名稱的密鑰,它也會生成密鑰。
有沒有辦法指定現有的API密鑰,而不是讓框架生成它? 我們真的希望繼續生成與部署分開的密鑰。
我知道這是舊的,但我最近遇到了這個問題並解決了它,所以我想我會把我在這里找到的東西。
這個答案是基於這個論壇帖子,這需要一些上下文讓我工作: 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配置。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.