Как сэкономить на AWS S3 Buckets при развертывании с помощью serverless framework


Проблема:

При развертывании одного или нескольких сервисов с помощью serverless framework создается ведро, подобное этому: <<<your-service-name>>-<<stage>>-serverlessdeploymentbucket-12i2nulwb47go, который содержит cloudformation template созданных нами ресурсов, заархивированный код и файл serverless-state.json.

Поначалу это может не представлять проблемы, за исключением случаев, когда мы управляем несколькими сервисами и несколькими средами (например: dev,qa,stg), которые могут легко превысить стандартный лимит в 100 ведер или даже жесткий лимит в 1000 ведер, кроме того, ими сложно управлять в случае, если вы больше не используете сервис и хотите его удалить.

Как решить эту проблему?

Serverless framework позволяет вам определить предопределенный bucket, который поможет нам централизовать все остальные bucket бессерверного развертывания в один. Плагин достаточно искусен, чтобы разделить наши сервисы на различные этапы в виде префиксов.

Давайте начнем с создания ведра S3 и хранилища Parameter store с именем ведра в качестве значения.

Примечание: я буду использовать aws cdk для создания этих ресурсов; можете пропустить эту часть. Если вы хотите узнать больше о cdk или о том, как его использовать, я рекомендую пройти этот семинар по CDK.

Создайте ведро, которое будет использоваться для централизации наших бессерверных развертываний. Установите публичный доступ для чтения как false и версионность как false (при желании вы можете включить ее, но это создаст разные версии объектов для каждого развертывания, что, возможно, не рекомендуется).

Создайте Parameter Store, который будет иметь в качестве значения имя нашего Bucket; это поможет нам определить имя Bucket в нашем serverless.yml программно, так как мы можем использовать имя значения с переменной в другом регионе.

В нашем serverless.yml мы добавляем эти строки, которые будут указывать на ведро, в котором находится наш код, ссылаясь на переменную, которую мы создали.

Примечание: В большинстве случаев нам не нужно устанавливать или добавлять плагин serverless-deployment-bucket.

provider:
  name: aws
  runtime: go1.x
  stage: dev
  region: us-east-1
  deploymentBucket:
    name: ${ssm(us-east-1):/GLOBAL/DEPLOYMENT_BUCKET}
Вход в полноэкранный режим Выйти из полноэкранного режима

После развертывания нашего сервиса мы заметили, что было создано два префикса, которые относятся к средам DEV и QA, что позволило нам сохранить два ведра в одном.

Однако что, если у нас есть разные сервисы в разных регионах? В этом случае ведра должны находиться в том же регионе, что и наши службы; в противном случае мы увидим эту ошибку.

Чтобы решить эту проблему, нам нужно создать ведро в том же регионе, что и наши службы, и создать еще один Parameter Store, который будет ссылаться на имя этого ведра.

Ссылка: Serverless Deployment Bucket

Оцените статью
Procodings.ru
Добавить комментарий