我知道這是舊的,但我最近有這個問題,並解決它,所以我想我會把我在這裏找到的。
這個答案是基於這個論壇的帖子,這需要一些背景,我讓工作: https://forum.serverless.com/t/using-an-existing-api-key/770
使用資源部分,可以添加自定義CloudFormation CONFIGS到您的部署。這包括在特定的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的命名要求,就可以將它們命名爲任何東西。
無服務器不添加了一些變數,但:
- DependsOn:這意味着,與參考文獻資源是按名稱。上面的無服務器文檔鏈接列出了用於引用非自定義資源的情況下使用的標準命名約定。例如,「ApiGatewayRestApi」是所有使用http事件進行部署時由無服務器創建的標準api。
- 參考號:對棧中另一個對象的引用。在上面的示例中,它取代了顯式傳遞ApiId或UsagePlanId(將在堆棧創建時生成或檢索)的需要。這意味着您可以在堆棧中設置依賴項,而無需記錄ID。
- 配額和節氣門:可選。將它們留出將避免更新引用的使用計劃。
此外,關於使用計劃和使用計劃鍵一些行爲:
- 使用計劃,一旦產生一次,將保留部署之間的UsagePlanId,即使你改變計劃的名稱(通過UsagePlanName )。我的測試是,在無服務器部署之外創建的UsagePlanKeys在更新時不會被刪除,但我沒有足夠廣泛地測試它以確保100%。
- 使用計劃可以在API部署的範圍之外創建,並在使用UsagePlanId變量時進行引用。
您可能感興趣的任何一個API部署之外創建AUTH結構和使用CloudFormation的(通過無服務器)輸出服務來獲得每個你所創建的資源的ARN和/或ID:
http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/outputs-section-structure.html
輸出使用相同的格式和資源的例子可以在例如AWS serverless.yml看到。這將允許您獨立於apis本身更改使用計劃並單獨維護。您可以保存這些輸出以供您的apis使用,使用JavaScript變量引用僅添加應按每個api階段啓用的計劃。
tl; dr - 使用資源結構來製作原始CloudFormation配置。
- 資源使您能夠引用現有的密鑰,計劃和其他資源。
- 通過輸出,您可以接收和保存您可能希望在部署中使用的對象的標識符。
- 更新對象不會刪除在堆棧外創建的關聯(我已經能夠看到),因此將外部關鍵點添加到您以此方式創建的使用計劃是安全的。