想ひ出のへっぽこBlogⅡ from35

~ 自身の備忘録および学習促進のためにブログります。~

想ひ出27: AWS/CodePipelineに入門する/2

f:id:moqrin3:20190128091739j:plain

おはようございます、moqrinです。

前回の続きです。

当記事はCodeDeployを設定してCodePipelineを実行して確認まで、となります。

全部で4ステップで、当記事は3ステップから行います。

  1. Codecommitリポジトリ作成とHttps接続

  2. EC2インスタンスにクローンして確認

  3. CodeDeployの設定 --- ここから

  4. CodePipelineを作成して確認

目次

1. インスタンスに必要なIAMロールを設定

2. appspec.ymlを作成する

3. AWS CodeDeploy でアプリケーションを作成する

4. CodePipelineを作成する

5. CodeCommit リポジトリにPushしてみる

6. 宿題


1. インスタンスに必要なIAMロールを設定

  1. S3からCodeDeployエージェントをインストールするために新しい IAM ロールを作成
# ポリシー
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": [
        "s3:Get*",
        "s3:List*"
      ],
      "Effect": "Allow",
      "Resource": "*"
    }
  ]
}

元々のAWSCodeCommitFullAccessと上記を併せて、"CodePipelineForEC2Role"(名前は何でもいいけど)を作成。 こちらをインスタンスに付与します。

f:id:moqrin3:20190128094832p:plain

  1. CodeDeployエージェントをインストール

叩くもよし。起動時に実行させるもよし。

#!/bin/bash
yum -y update
yum install -y ruby
yum install -y aws-cli
cd /home/ec2-user
aws s3 cp s3://aws-codedeploy-ap-northeast-1/latest/install . --region ap-northeast-1
chmod +x ./install
./install auto

f:id:moqrin3:20190128094915p:plain

# エージェントを確認
service codedeploy-agent status

f:id:moqrin3:20190128101305p:plain

インスタンスは準備OK.

appspec.ymlを作成します。

2. appspec.yamlを作成する

appspec.yamlでやりたいこと

う〜ん、、、死ぬほど雑。

ローカルのリポジトリディレクトリを1つ作って、シェルスクリプトを放り込みます。 ちなみに、雑すぎてログで怒られます、、、

mkdir deploy_hooks

# vim deploy_hooks/install_dependencies.sh
#!/bin/sh

cd /var/www/html/YourSampleRepo
virtualenv --python python3 env
source ../env/bin/activate

pip install flask uwsgi flask-sqlalchemy mysqlclient flask-login flask-migrate

mkdir instance
echo "SECRET_KEY = 'secret'
SQLALCHEMY_DATABASE_URI = 'mysql://USER_NAME:USER_PASS@ENDPOINT_URL'
SQLALCHEMY_TRACK_MODIFICATIONS = True" >>instance/config.py

echo "from run import app

if __name__ == \"__main__\":
    app.run()" >wsgi.py

echo "[uwsgi]
module = wsgi:app

master = true
processes = 5

socket = flaskr.sock
chmod-socket = 660
vacuum = true

die-on-term = true" >flaskr.ini

flask db init
flask db migrate
flask db upgrade

systemctl start flaskr && systemctl start nginx
# vim deploy_hooks/stop_delete.sh

#!/bin/sh

systemctl stop flaskr && systemctl stop nginx

rm -rf /var/www/html/YourSampleRepo

mysql -h ENDPOINT_URL -u USER_NAME -pUSER_PASS DB_NAME -N -e 'show tables' | while read table; do mysql -h ENDPOINT_URL -u USER_NAME -pUSER_PASS -e "drop table $table" DB_NAME; done

そしたら、appspec.ymlをディレクトリ直下に格納しておきます。

# appspec.yml

version: 0.0
os: linux
files:
  - source: /
    destination: /var/www/html/YourSampleRepo
hooks:
   BeforeInstall:
     - location: deploy_hooks/stop_delete.sh
   AfterInstall:
     - location: deploy_hooks/install_dependencies.sh

3. AWS CodeDeploy でアプリケーションを作成する

① アプリケーションを作成

f:id:moqrin3:20190128095025p:plain

② デプロイグループの作成

f:id:moqrin3:20190128095237p:plain

f:id:moqrin3:20190128095324p:plain

ま、適当に。

4. CodePipelineを作成する

f:id:moqrin3:20190128095505p:plain

ソースはCodeCommit

f:id:moqrin3:20190128095602p:plain

今回ビルドはしないので、スキップ

そしてデプロイ

f:id:moqrin3:20190128095703p:plain

5. CodeCommit リポジトリにPushしてみる

早速Pushして確認。

ついでに、タイトルとか変えてみる。

f:id:moqrin3:20190128100405p:plain

CodePipeline上でも確認

f:id:moqrin3:20190128095934p:plain

表示

f:id:moqrin3:20190128100056p:plain

OK.

何かエラーが有った場合はこの辺を見よう。

tail -f /var/log/aws/codedeploy-agent/xxxx.log
tail -f /opt/codedeploy-agent/deployment-root/deployment-logs/xxxx.log

6. 宿題

かなり雑なやり方だったので、もうちょっと整備した方が宜しいですね。。。

参考:

チュートリアル: シンプルなパイプラインを作成する (AWS CodeCommit リポジトリの場合)

AWS BlackBelt/AWS CodeDeploy

AWS CodeDeploy のサービスロールを作成する

CodeCommit のGitリポジトリにIAM Roleで接続する

AppSpec fileを追加する

AWSのCodeDeployでエラーになったらAgentを試そう!