Доступ к переменным .env во время сборки в docker для AWS Elastic Beanstalk

#laravel #docker #amazon-elastic-beanstalk #laravel-mix #docker-build

#laravel #docker #amazon-elastic-beanstalk #laravel-mix #docker-сборка

Вопрос:

Я развертываю приложение Laravel с использованием платформы Docker на AWS Elastic Beanstalk. Одним из шагов в моем Dockerfile является объединение ресурсов с использованием Laravel mix, выполнив npm run production , как показано ниже.

 # Dockerfile
...
RUN echo "${ALPINE_MIRROR}/edge/main" >> /etc/apk/repositories 
  amp;amp; apk add --no-cache nodejs nodejs-npm  --repository="http://dl-cdn.alpinelinux.org/alpine/edge/community" 
  amp;amp; npm install 
  amp;amp; npm run production
  

Когда выполняется эта команда, одним из шагов, которые она запускает, является копирование созданных ресурсов в Amazon S3, как показано ниже:

 mix.webpackConfig({
    plugins: [
        new s3Plugin({
            exclude: /.*.(html|php|htaccess|txt|json)/,
            s3Options: {
                accessKeyId: process.env.AWS_ACCESS_KEY_ID,
                secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
                region: process.env.AWS_DEFAULT_REGION,
            },
            s3UploadOptions: {
                Bucket: process.env.AWS_BUCKET,
            },
            directory: 'public',
        })
    ]
});
  

Как видно выше, скрипту нужны переменные среды AWS для работы. Однако сценарий сборки не распознает их, даже если они настроены на панели инструментов Elastic Beanstalk (в конфигурации). Одним из быстрых решений было бы определить ARG переменные в Dockerfile, но я не хочу, чтобы эта информация была видна в виде обычного текста.

Я пытался искать решения, но мне не повезло. Любой совет был бы действительно полезен. Спасибо.

Комментарии:

1. Можно ли передавать свои секреты с помощью хранилища параметров SSM или диспетчера секретов?

2. Мне удалось использовать секреты, хранящиеся в корзине S3 и доступные только через ресурсы в том же VPC. Затем эти секреты загружаются и используются в качестве переменных среды во время сборки. Спасибо!

3. Спасибо, что дали мне знать. Рад, что это сработало.

Ответ №1:

Мне удалось добиться того, что мне было нужно, используя справку из этого руководства:

https://aws.amazon.com/blogs/security/how-to-manage-secrets-for-amazon-ec2-container-service-based-applications-by-using-amazon-s3-and-docker/

В основном:

  1. Создайте корзину для хранения файла с нужными вам переменными.
  2. Установите политику корзины, чтобы ограничить доступ к одному и тому же VPC
  3. В Dockerfile запустите скрипт, который загрузит этот файл и загрузит переменные среды.

Спасибо!

Ответ №2:

Если вы хотите, чтобы эти переменные env отражались на этапе сборки, добавьте их в соответствующий раздел env проекта сборки кода.


Если вы используете ECS с Elastic beanstalk, то эти переменные среды должны быть определены в среде определения задачи.