Переменные среды с использованием 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:
- LIFECYCLE_EVENT: эта переменная содержит имя события жизненного цикла, связанного со сценарием.
- DEPLOYMENT_ID: эти переменные содержат идентификатор развертывания текущего развертывания.
- APPLICATION_NAME: эта переменная содержит имя развертываемого приложения. Это имя, которое пользователь задает в консоли или AWS CLI.
- DEPLOYMENT_GROUP_NAME: эта переменная содержит имя группы развертывания. Группа развертывания - это набор экземпляров, связанных с целевым приложением для развертывания.
- 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.