CodeDeployからAuto Scalingグループにデプロイする

AWS CodeDeployで用いるアプリケーション仕様ファイル(AppSpecファイル)はYAMLもしくはJSON形式のファイルです。 AppSpecファイルは、ファイルで定義されている一連のライフサイクルイベントフックとして、各デプロイを管理するために使用されます。

正しい形式の AppSpec file を作成する方法については、CodeDeploy AppSpec Fileリファレンスを参照してください。

ここまでのステップが完了すると、Auto Scalingグループ内のEC2インスタンスにアプリケーションをデプロイできるようになっています。

  1. codedeployディレクトリの内容を参照し、これからデプロイするアプリケーションの構造を確認します。

  2. CodeDeployデプロイスクリプトを編集し、RDS DBインスタンス名を更新します。 次のコマンドを発行してcodedeploy/scripts/configure_db.shを更新し、**%endpoint%**をRDS DBインスタンスのエンドポイントの値で置き換えます。

    # RDS DBインスタンスエンドポイント名を取得
    rds_endpoint=$(aws rds describe-db-instances --db-instance-identifier runningamazonec2workloadsatscale --query DBInstances[].Endpoint.Address --output text)
    
    sed -i.bak -e "s#%endpoint%#$rds_endpoint#g" codedeploy/scripts/configure_db.sh
    

    ``

  3. 続いてKoelのGitHubレポジトリを手元にクローンします。

    cd ~/environment/ec2-spot-workshops/workshops/running-amazon-ec2-workloads-at-scale/
    
    git clone https://github.com/phanan/koel.git
    
    cd koel && git checkout v3.7.2
    

    ``

    Gitから’detached HEAD’の通知が来ることを確認してください。

  4. KoelアプリケーションディレクトリにCodeDeployの構成情報をコピーします。

    cp -avr ../codedeploy/* .
    

    ``

  5. コピーされたCodeDeploy構成情報を確認し、次のコマンドでCodeDeployアプリケーションを作成します。

    aws deploy create-application --application-name koelApp
    

    ``

  6. AWS CodeDeployコンソールを開き、右上のリージョン情報が正しいことを確認した上で、作成されたアプリケーションを確認します。

CodeDeployコンソールに遷移したタイミングで、リージョンが変更されている可能性があります。右上のリージョン情報が異なっている場合、正しいリージョンを改めて選択してください。

  1. アプリケーションをCodeDeploy用S3バケットに配置します。

    aws deploy push --application-name koelApp --s3-location s3://$codeDeployBucket/koelApp.zip --no-ignore-hidden-files
    

    ``

    次のような出力が表示されることを確認してください。

    To deploy with this revision, run: aws deploy create-deployment –application-name koelApp –s3-location bucket=runningamazonec2workloadsatscale-codedeploybucket-11wv3ggxcni40,key=koelApp.zip,bundleType=zip,eTag=870b90e201bdca3a06d1b2c6cfcaab11-2 –deployment-group-name –deployment-config-name –description

  2. アプリケーションが正しくS3バケットに配置されたことを確認します。CloudFormationスタックの出力からS3バケット名を確認し(もしくは$ echo $codeDeployBucketを発行し), S3コンソールから対象バケットを選択します。

  3. 次のコマンドを発行してdeployment-group.jsonの**%codeDeployServiceRole%**を作成した値で更新します。続いてデプロイグループを作成します。

    cd ..
    
    sed -i.bak -e "s#%codeDeployServiceRole%#$codeDeployServiceRole#g" deployment-group.json
    
    aws deploy create-deployment-group --cli-input-json file://deployment-group.json
    

    ``

  4. AWS CodeDeployコンソールを開き、再度リージョンが正しいことを確認してから、アプリケーションを選択して「デプロイグループ」タブをクリックし、作成されたデプロイグループを確認します。

CodeDeployコンソールに遷移したタイミングで、リージョンが変更されている可能性があります。右上のリージョン情報が異なっている場合、正しいリージョンを改めて選択してください。

  1. 次のコマンドを発行してdeployment.jsonの**%codeDeployBucket%**を作成した値で更新します。

    sed -i.bak -e "s#%codeDeployBucket%#$codeDeployBucket#g" deployment.json
    

    ``

  2. deployment.jsonの内容を確認し、デプロイを作成します。

    aws deploy create-deployment --cli-input-json file://deployment.json
    

    ``

    deploymentId をメモしてください。

  3. AWS CodeDeployコンソールを開き、再度リージョンが正しいことを確認してから対象のデプロイIDをクリックし、デプロイ状況を確認します。下部のデプロイイベントに対象となるEC2インスタンスが表示されていることを確認します。個々のインスタンスへのデプロイ状況は「イベントの表示」から確認できます。

CodeDeployコンソールに遷移したタイミングで、リージョンが変更されている可能性があります。右上のリージョン情報が異なっている場合、正しいリージョンを改めて選択してください。

  1. アプリケーションが正しくインスタンスにデプロイされると、ターゲットグループのヘルスチェックが正常としてマークされます。ターゲットグループコンソールからTargetsタブを選択し、ヘルスチェック結果を確認します。

  2. 最低1つのインスタンスが正常とマークされたら、ロードバランサコンソールから作成したロードバランサを選択します。

  3. DNS名をコピーし、URLとしてブラウザからアクセスします。ログインページが表示されたらば、ユーザー名に'admin@example.com', パスワードに'admin-pass‘を指定してログインします。

  4. 各インスタンスにはマウントポイント**/var/www/media**があり、ここにEFSファイルシステムがマウントされており、オーディオファイルが格納される想定となっています。mp3ファイルをいくつかコピーするため、Cloud9環境からEFSファイルシステムをマウントします。CloudFormationスタックの出力から控えた $fileSystem の値に置き換えた上で、次のコマンドを実行します。

    mkdir -p ~/environment/media
    
    sudo mount -t efs $fileSystem:/ ~/environment/media
    
    sudo chown ec2-user. ~/environment/media
    
    sudo cp -av *.mp3 ~/environment/media
    

    `

  5. ブラウザのKoel画面に戻り、MANAGEからSettings, Scanと進みます。構築できた音楽サービスにしばらく触れてみてください。

  6. [オプション] 任意のmp3ファイルを同様の手順で追加することもできます。追加した後にはメディアディレクトリの再スキャンを忘れずに実施してください。