2016-11-14 60 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配置。

  • 资源使您能够引用现有的密钥,计划和其他资源。
  • 通过输出,您可以接收和保存您可能希望在部署中使用的对象的标识符。
  • 更新对象不会删除在堆栈外创建的关联(我已经能够看到),因此将外部关键点添加到您以此方式创建的使用计划是安全的。