Переменные среды с использованием AWS CodeDeploy

У меня есть веб-приложение, которое использует переменные среды для некоторых своих настроек (учетные данные БД, ключи API и т. Д.). В настоящее время я использую Elastic Beanstalk для развертывания и могу легко установить их из AWS, что прекрасно, потому что у меня нет этих конфиденциальных данных в моей базе кода.

Тем не менее, я смотрю на переход от Elastic Beanstalk, чтобы я мог использовать немного больше гибкости с моими веб-экземплярами, и, естественно, я смотрю на развертывание (из моей настройки Codeship CI) с использованием CodeDeploy. CodeDeploy довольно прост, и я прекрасно интегрировал его с Codeship, но я заметил, что нет встроенной функции для установки переменных среды с CodeDeploy, как с Elastic Beanstalk. У кого-нибудь есть лучшие практики для этого процесса?

3 ответа

Я нашел способ установить переменные среды с помощью сценариев, запускаемых во время ловушки AfterInstall (указанной в apppec http://docs.aws.amazon.com/codedeploy/latest/userguide/app-spec-ref.html).

Я могу определить среду, в которой я сейчас развертываюсь, в этих сценариях, вызывая метаданные своих экземпляров, где я получаю идентификатор своего экземпляра, а затем использую aws cli для выполнения описательных тегов, отфильтрованных к моему идентификатору экземпляра, где у меня установлен тег для Среда

ID=$(curl "http://169.254.169.254/latest/meta-data/instance-id")
aws --region us-east-1 ec2 describe-tags --filters Name=resource-id,Values=$ID Name=key,Values=Environment

Мне это не нравится, но до тех пор, пока в Code Deploy не будет встроено что-то для передачи параметров в appspec, это лучшее, что я могу найти.

Предполагая, что вы используете github для управления вашим кодом, вот один из возможных способов управления вашей средой

Используйте git-crypt ( https://github.com/AGWA/git-crypt) для шифрования конфиденциальной информации. Вы можете поставить ключ для декодирования этих файлов на сервере. Во время фазы codedeploy afterInstall вы можете расшифровать и настроить среду.

Преимущество в том, что теперь у вас есть вся информация в одном месте безопасным способом.

Вы можете использовать переменные в сценарии bash:

  1. LIFECYCLE_EVENT: эта переменная содержит имя события жизненного цикла, связанного со сценарием.
  2. DEPLOYMENT_ID: эти переменные содержат идентификатор развертывания текущего развертывания.
  3. APPLICATION_NAME: эта переменная содержит имя развертываемого приложения. Это имя, которое пользователь задает в консоли или AWS CLI.
  4. DEPLOYMENT_GROUP_NAME: эта переменная содержит имя группы развертывания. Группа развертывания - это набор экземпляров, связанных с целевым приложением для развертывания.
  5. DEPLOYMENT_GROUP_ID: эта переменная содержит идентификатор группы развертывания в AWS CodeDeploy, которая соответствует текущему развертыванию.

Пример:

if [ "$DEPLOYMENT_GROUP_NAME" == "staging" ]
then

    #make directory with Deployment ID
    foldernameid=$(date +%Y%m%d)-$DEPLOYMENT_ID
    mkdir -p /var/www/releases/"$foldernameid"

    #print AWS variables to file
    awsvar1=$DEPLOYMENT_ID
    awsvar2=$LIFECYCLE_EVENT
    awsvar3=$APPLICATION_NAME
    awsvar4=$DEPLOYMENT_GROUP_NAME
    awsvar5=$DEPLOYMENT_GROUP_ID
    destdir=/var/www/releases/aws_var.txt
    echo "Deployment id" $awsvar1 "Lifecyckle_Event" $awsvar2 
    "Application_Name" $awsvar3 "Deployment_Group_Name" $awsvar4 
    "Deployment_Group_ID" $awsvar5 >>  $destdir

fi

Подробнее здесь:https://aws.amazon.com/blogs/devops/using-codedeploy-environment-variables/

Кажется возможным использовать переменные окружения (в основном, ваше DEPLOYMENT_GROUP_NAME).

Смотрите это руководство от Amazon.

Другие вопросы по тегам