Есть ли способ указать уже созданный сегмент развертывания s3 в бессерверном режиме?

Итак, в настоящее время мы используем бессерверный режим в нашем недавнем проекте, и наш клиент предоставил нам пользователя aws iam, потому что мы будем развертывать его ресурсы aws. Проблема в том, что они не передают пользователю политику create s3. Создание ведра s3 будет выполнено ими вручную. Итак, где в serverless.yml я могу добавить созданный ими сегмент s3 и использовать его без сервера в качестве сегмента развертывания вместо создания нового?


person Karias Bolster    schedule 05.07.2018    source источник


Ответы (2)


Я думаю, что OP спрашивает о том, как указать сегмент развертывания Serverless S3, а не о том, как ссылаться на случайный сегмент в функции Lambda.

Вы можете установить сегмент развертывания в serverless.yml следующим образом:

provider:
    deploymentBucket: <bucket name>
person Brian Winant    schedule 06.07.2018
comment
Да это только для ведра развертывания. Понятно, значит только название ведра? Не ARN? - person Karias Bolster; 08.07.2018
comment
В бессерверных документах говорится, что это только имя корзины. Поскольку сегменты S3 глобально уникальны, ARN легко вычислить на основе этого - person Brian Winant; 09.07.2018
comment
Также стоит прочитать github.com/serverless/serverless/issues/3060, если вы пришли сюда, чтобы узнать, как / можно ли настроить путь внутри корзины S3 (короче говоря, пока не поддерживается. Если у вас 10 бессерверных проектов, вам нужно 10 корзин S3). - person Ashutosh Jindal; 15.11.2019
comment
Если у вас 10 бессерверных проектов, вам не нужно 10 сегментов S3. Бессерверная версия сгенерирует уникальное имя zip-файла из имени проекта, имени стадии и отметки времени. Если у вас нет необходимости ограничивать пути S3 по причинам IAM, вы можете совместно использовать корзину для бессерверных проектов. См. github.com/serverless/serverless/issues/. - person Brian Winant; 21.11.2019

Вы можете использовать параметры в скрипте формирования облака бессерверного приложения:

"Parameters" : {
  "S3BucketArn" : {
    "Default" : "arn:aws:s3:::somebucketarndefaults",
    "Description" : "The ARN for the S3 Bucket",
    "Type" : "String"
  }
}

Я предполагаю, что вы используете это в бессерверной функции (Lambda), поэтому вы можете передать это, используя переменные среды

 "Resources" : {
    "MyAmazingFunction" : {
      "Type" : "AWS::Serverless::Function",
      "Properties": {
        "Handler": "functions::handle",
        // Yada yada
    "Environment" : {
          "Variables" : {
            "S3Arn": {"Ref" : "S3BucketArn"}
          }
        }
      }
    }

Затем в коде просто извлеките Arn, используя переменную среды S3Arn.

person Kevin Smith    schedule 05.07.2018