Копирование файла из S3 в мою кодовую базу при использовании Elasti c Beanstalk - PullRequest
0 голосов
/ 13 апреля 2020

У меня есть следующий скрипт:

Parameters:
  bucket:
    Type: CommaDelimitedList
    Description: "Name of the Amazon S3 bucket that contains your file"
    Default: "my-bucket"
  fileuri:
    Type: String
    Description: "Path to the file in S3"
    Default: "https://my-bucket.s3.eu-west-2.amazonaws.com/oauth-private.key"
  authrole:
    Type: String
    Description: "Role with permissions to download the file from Amazon S3"
    Default: "aws-elasticbeanstalk-ec2-role"

files:
  /var/app/current/storage/oauth-private.key:
    mode: "000600"
    owner: webapp
    group: webapp
    source: { "Ref" : "fileuri" }
    authentication: S3AccessCred

Resources:
  AWSEBAutoScalingGroup:
    Type: "AWS::AutoScaling::AutoScalingGroup"
    Metadata:
      AWS::CloudFormation::Authentication:
        S3AccessCred:
          type: "S3"
          roleName: { "Ref" : "authrole" }
          buckets: { "Ref" : "bucket" }

Проблема, с которой я сталкиваюсь, заключается в том, что при развертывании этого файла нет в каталоге /var/app/current/storage.

Я подумал, что, возможно, этот скрипт запущен слишком рано, а каталог current еще не готов, поэтому я попробовал каталог ondeck, но это тоже не работает.

Если я изменю путь в любое место, кроме моего каталога кодовой базы, он будет работать, файл будет скопирован из S3.

Есть идеи? Спасибо.

1 Ответ

1 голос
/ 14 апреля 2020

Директивы под ключом «файлы» обрабатываются до настройки вашего веб-приложения. Вам нужно будет загрузить файл в файл tmp, а затем использовать container_command для передачи его в ваше приложение в текущем каталоге.

В этом AWS do c в верхней части упоминается порядок обработки ключей. Клавиша files обрабатывается до commands, а commands запускается до настройки приложения и веб-сервера. Тем не менее, в разделе container_commands отмечается, что они используются «для выполнения команд, влияющих на исходный код вашего приложения».

Поэтому вы должны изменить свой скрипт на что-то вроде этого:

Parameters: ...
Resources: ...

files:
  "/tmp/oauth-private.key":
    mode: "000600"
    owner: webapp
    group: webapp
    source: { "Ref" : "fileuri" }
    authentication: S3AccessCred

container_commands:
  file_transfer_1:
    command: "mkdir -p storage"
  file_transfer_2:
    command: "mv /tmp/oauth-private.key storage"
...