Аутентифицированная загрузка файлов в корзину S3 с помощью CloudFormation

Аутентифицированная загрузка файла в экземпляр EC2 документирована повсюду. Но я хочу загружать файлы в корзину, а не в экземпляр EC2.

Допустим, для eaxmple я создаю бессерверный статический веб-сайт, и мой index.html доступен в репозитории git или другом ведре. Как я могу загрузить этот файл во вновь созданную корзину в моем сценарии облачной информации?

Ссылка: Загрузка файлов с аутентификацией с помощью CloudFormation


person Jimson Kannanthara James    schedule 21.04.2020    source источник


Ответы (2)



Ну, наткнулся на ответ, пока искал что-то еще совсем не связанное с этим.

Ответ в точности совпадает с тем, что предложил @jarmod, мой ответ - простой указатель на существующий пример облачной информации, реализованный AWS.

Цитата из приведенной ниже ссылки, чтобы не помещать здесь просто ссылку,

При использовании этого шаблона только одна корзина должна содержать заранее zip-файл Lambda, и для поддержки недавно запущенных регионов не требуется никаких дополнительных действий. Благодаря своей гибкости это предпочтительный подход для большинства случаев использования. Однако для этого требуется большинство дополнительных ресурсов в шаблоне: встроенная функция Lambda с кодом для копирования zip-архивов, связанная роль управления идентификацией и доступом (IAM), корзина Amazon S3 и настраиваемый ресурс.

Следующий фрагмент кода создает новую корзину Amazon S3 в области стека AWS CloudFormation (LambdaZipsBucket), а затем копирует zip-файлы (CopyZips.Properties.Objects) из исходной корзины (CopyZips.Properties.SourceBucket) в новую корзину.

  Resources:
    LambdaZipsBucket:
        Type: AWS::S3::Bucket
    CopyZips:
        Type: Custom::CopyZips
        Properties:
          ServiceToken: !GetAtt 'CopyZipsFunction.Arn'
          DestBucket: !Ref 'LambdaZipsBucket'
          SourceBucket: !Ref 'QSS3BucketName'
          Prefix: !Ref 'QSS3KeyPrefix'
          Objects:
            - functions/packages/MyFunction/lambda.zip

Обратите внимание, что Objects принимает список путей, поэтому, если у вас есть несколько функций Lambda в вашем шаблоне, все zip-архивы могут быть добавлены в один ресурс CopyZips.

Теперь объявим нашу лямбда-функцию и укажем ей на только что созданную корзину.

При создании функции мы указываем MyFunction.Properties.Code.S3Bucket на LambdaZipsBucket.

  MyFunction:
    DependsOn: CopyZips
    Type: AWS::Lambda::Function
    Properties:
      Code:
        S3Bucket: !Ref 'LambdaZipsBucket'
        S3Key: !Sub '${QSS3KeyPrefix}functions/packages/MyFunction/lambda.zip'
      ...

Обратите внимание на клавишу DependsOn, указывающую на наш настраиваемый ресурс CopyZips. По умолчанию AWS CloudFormation будет пытаться запускать ресурсы, которые не зависят друг от друга, параллельно, поэтому это необходимо, чтобы быть уверенным, что zip-архивы уже были скопированы до создания нашей функции Lambda.

Чтобы реализовать это в вашем собственном шаблоне, вам также понадобится развернутый код CopyZips Lambda и соответствующая роль IAM. Полный пример реализации доступен в AWS Quick Запустить репозиторий примеров.

https://aws.amazon.com/blogs/infrastructure-and-automation/deploying-aws-lambda-functions-using-aws-cloudformation-the-portable-way/

person Jimson Kannanthara James    schedule 12.05.2020