2016-11-14 35 views
2

中的無服務器框架結合使用在serverless.yml文件中,您可以指定用於部署API中的函數的API密鑰的名稱。您列出API密鑰名稱,然後將您希望使用的方法標記爲私有。例如:將現有API密鑰與AWS

provider: 
    name: aws 
    runtime: nodejs4.3 
    cfLogs: true 
    apiKeys: 
    - MyAPIKey 

一旦部署,該框架生成API密鑰並將其分配到的功能。即使環境中已經存在具有相同名稱的密鑰,它也會生成密鑰。

有沒有辦法指定一個現有的API密鑰,而不是讓框架生成它?我們確實希望繼續生成與部署分開的密鑰。

回答

2

我知道這是舊的,但我最近有這個問題,並解決它,所以我想我會把我在這裏找到的。

這個答案是基於這個論壇的帖子,這需要一些背景,我讓工作: 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配置。

  • 資源使您能夠引用現有的密鑰,計劃和其他資源。
  • 通過輸出,您可以接收和保存您可能希望在部署中使用的對象的標識符。
  • 更新對象不會刪除在堆棧外創建的關聯(我已經能夠看到),因此將外部關鍵點添加到您以此方式創建的使用計劃是安全的。