Я знаю, что это старо, но у меня была эта проблема в последнее время и она была решена, поэтому я подумал, что поставлю то, что нашел здесь.
Этот ответ основан на этом форуме сообщение, которое требуется немного контекста для меня, чтобы получить работу: 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.
Serverless делает добавить несколько переменных, хотя:
- DependsOn: Это означает, что ресурс с Ссылаются по имени. В безсерверной ссылке doc выше перечислены стандартные соглашения об именах, которые используются в случае, если вы хотите ссылаться на нестандартные ресурсы. Например, «ApiGatewayRestApi» - это стандартный api, созданный без сервера во всех развертываниях с помощью http-событий.
- Ссылка: Ссылка на другой объект в стеке. В приведенном выше примере он заменяет необходимость явно передавать ApiId или UsagePlanId (который будет сгенерирован или получен при создании стека). Это означает, что вы можете настроить зависимости от вещей в вашем стеке без необходимости записи идентификаторов.
- Квота и Дроссельная заслонка: дополнительно. Оставляя это, вы не будете обновлять ссылочный план использования.
Кроме того, некоторое поведение о планах использования и ключах плана использования:
- планов по использованию, когда генерируется один раз, сохранит свою UsagePlanId между внедрениями, даже если вы измените имя плана (через UsagePlanName).Мое тестирование заключается в том, что UsagePlanKeys, созданные вне развертывания без сервера, не будут удалены при обновлении, но я не тестировал это достаточно широко, чтобы быть на 100% уверенным.
- Планы использования могут создаваться за пределами развертывания API и ссылаться на переменную UsagePlanId.
Вы можете быть заинтересованы в создании структуры аутентификации за пределами какой-либо API развертывания и использования CloudFormation (через бессерверную) Выходы услуги, чтобы получить ARN и/или идентификатор каждого из ресурсов, которые вы создали:
http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/outputs-section-structure.html
Выходы используют тот же формат, что и ресурсы, и пример можно увидеть в примере aws serverless.yml. Это позволит вам изменить планы использования независимо от самих apis и поддерживать их отдельно. Вы можете сохранить эти выходы для использования с помощью apis, используя ссылку на javascript, чтобы добавить только планы, которые должны быть включены для каждой стадии на основе api.
tl; dr - Используйте структуру ресурсов для создания сырых конфигураций CloudFormation.
- Ресурсы дают вам возможность ссылаться на существующие ключи, планы и другие ресурсы.
- Выходы позволяют вам, среди прочего, получать и сохранять идентификаторы объектов, которые вы, возможно, захотите использовать во всех развертываниях.
- Обновление объектов не приведет к удалению ассоциаций (которые я смог увидеть), сделанных вне стека, поэтому безопасно добавлять внешние ключи в план использования, который вы создаете таким образом.