web-dev-qa-db-ja.com

AWSCodeDeployを使用した環境変数

一部の構成(DB資格情報、APIキーなど)に環境変数を利用するWebアプリケーションがあります。現在、デプロイにElastic Beanstalkを使用しており、AWS内からこれらを簡単に設定できます。これは、コードベースにこの機密データがないため素晴らしいことです。

ただし、Elastic Beanstalkからの切り替えを検討しているので、Webインスタンスでもう少し柔軟性を活用できます。当然、CodeDeployを使用して(Codeship CIセットアップから)デプロイすることも検討しています。 CodeDeployは非常に単純で、Codeshipとうまく統合しましたが、ElasticBeanstalkのようにCodeDeployで環境変数を設定する組み込み機能がないことに気付きました。このプロセスのベストプラクティスはありますか?

21
Jeff

環境変数を設定する方法の1つは、AfterInstallフック中に実行されるスクリプトを使用することです(appspec http://docs.aws.Amazon.com/codedeploy/latest/userguide/app-spec-refで指定)。 html )。

インスタンスIDを取得するインスタンスメタデータを呼び出し、aws cliを使用して、タグが設定されているインスタンスIDにフィルターされたdescribe-tagsを実行することで、これらのスクリプトで現在デプロイしている環境を特定できます。環境

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に渡すための何かが組み込まれるまで、これは私が見つけることができる最高のものです。

5
Levitron

Githubを使用してコードを管理していると仮定すると、環境を管理するための1つの潜在的な方法がここにあります。

Git-crypt( https://github.com/AGWA/git-crypt )を使用して機密情報を暗号化します。これらのファイルをサーバー上でデコードするためのキーを配置できます。コードデプロイ後のインストールフェーズ中に、環境を復号化してセットアップできます。

利点は、すべての情報を安全な方法で1か所にまとめることです。

2
dminer

Bashスクリプトで変数を使用できます。

  1. LIFECYCLE_EVENT:この変数には、スクリプトに関連付けられているライフサイクルイベントの名前が含まれています。
  2. DEPLOYMENT_ID:この変数には、現在のデプロイメントのデプロイメントIDが含まれます。
  3. APPLICATION_NAME:この変数には、デプロイされるアプリケーションの名前が含まれます。これは、ユーザーがコンソールまたはAWSCLIで設定する名前です。
  4. DEPLOYMENT_GROUP_NAME:この変数には、デプロイメントグループの名前が含まれます。デプロイメントグループは、デプロイメントの対象となるアプリケーションに関連付けられたインスタンスのセットです。
  5. DEPLOYMENT_GROUP_ID:この変数には、現在のデプロイに対応するAWSCodeDeployのデプロイグループのIDが含まれます

例:

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/

0
BartZalas