想ひ出のへっぽこBlogⅡ from35

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

想ひ出26: AWS/CodePipelineに入門する/1

f:id:moqrin3:20190128091739j:plain

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

いつもの如く、今更感満載ですがCodePipelineに入門したので、そのまとめ1です。

当記事はCodeCommitリポジトリを作成して、EC2インスタンスにクローンして確認まで、となります。

次回がCodeDeployを利用したCodePipelineの体験となります。

素材としては、Flaskのチュートリアルブログを使います。

全部で4ステップで、当記事は2ステップまでを行います。

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

  2. EC2インスタンスにクローンして確認 --- ここまで

  3. CodeDeployの設定

  4. CodePipelineを作成して確認

目次

1. CodeCommitリポジトリ作成してHttpsで接続/ローカル

2. Httpsで接続してGitクローン/インスタンス

3. 表示までを確認

4. 宿題


1. CodeCommitリポジトリ作成してHttpsで接続/ローカル

前提

  • AWS CodeCommit にアクセスする権限を持っている

  • AWS CLI,Git をインストールおよび設定済み


① CodeCommitでリポジトリを作成

早速作成します。

f:id:moqrin3:20190128092246p:plain

② CodeCommit への HTTPS 接続用の Git 認証情報を作成

SSH接続でも出来ますが、インスタンスからの接続に合わせてHttps接続にしておきます。

下記コマンドを叩くだけです。

git config --global credential.helper '!aws codecommit credential-helper $@'
git config --global credential.UseHttpPath true

こんなんが追記されるはずです。

[credential]    
    helper = !aws --profile CodeCommitProfile codecommit credential-helper $@
    UseHttpPath = true

そしたら確認します。

git config --global --edit

問題なさそうなら、適当な場所にリポジトリをクローンしちゃいます。

f:id:moqrin3:20190128092506p:plain

③ ローカルからファイルを追加する

  • ローカルリポジトリにファイルを追加します。

  • .gitignoreを作成します。

  • ローカルリポジトリからGit Add & Commit & Push

ちなみに、「macOS を使用している場合は、HTTPS を使用して AWS CodeCommit リポジトリに初めて接続すると、約 15 分後に後続のアクセスが失敗します。」とか書いているので、いきなりエラーが発生した場合にご留意下さい。いきなりエラーが出たとき、ワタクシはキョドりました・・・

次はサーバーでの対応に進みます。

2. Httpsで接続してGitクローン/インスタンス

① AWSCodeCommitFullAccessを付与してインスタンスサーバーを起動する

f:id:moqrin3:20190128092602p:plain

② Git インストール

yum install -y git

③ 先ほどの認証情報ヘルパーを同様に設定して確認

git config --global credential.helper '!aws codecommit credential-helper $@'
git config --global credential.UseHttpPath true

これで、無事Git クローンできるはずです。

ここから先は、以前対応した手順とほぼ同様です。 想ひ出17: GCP/Flask1.0/Nginx/GCEにデプロイする

なので、地道な手作業の手順だけ記しておきます。

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

Amazon Linux 2 AMI (HVM), SSD Volume Type, Python3.6, Flask1.0, RDS(MySQL5.7)で対応。

# epel-releaseをインストール
amazon-linux-extras install -y epel
# amazon-repoのpriorityを変更
vim /etc/yum.repos.d/amzn2-core.repo
-> %s/priority=10/priority=99

vim /etc/yum.repos.d/amzn2-extras.repo
-> %s/priority = 10/priority = 99
# mariadbの削除
yum -y remove mariadb-libs
rm -rf /var/lib/mysql/
# MySQL5.7公式 yumリポジトリの追加
yum -y localinstall http://dev.mysql.com/get/mysql57-community-release-el7-7.noarch.rpm
# インストール
yum -y install mysql-community-server mysql-community-devel
# Nginxとその他インストール
yum install -y nginx gcc wget
# Python 3.6 をインストール
yum install -y https://centos7.iuscommunity.org/ius-release.rpm
yum install -y python36u python36u-libs python36u-devel python36u-pip
# エイリアスの設定
ln -s /bin/python3.6 /bin/python3
# pipのインストール
mkdir -p /var/www/html; cd /var/www/html
wget https://bootstrap.pypa.io/get-pip.py
python get-pip.py
# virtualenv のインストール
pip install --upgrade virtualenv
virtualenv --python python3 env
# CodeCommit レポジトリからgit cloneする
git clone https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/YourSampleRepo
# virtualenv切り替え
cd YourSampleRepo
source env/bin/activate

# ライブラリのインストール
pip install flask uwsgi flask-sqlalchemy mysqlclient flask-login flask-migrate

# DB接続設定
mkdir instance
echo "SECRET_KEY = 'secret'
SQLALCHEMY_DATABASE_URI = 'mysql://USE_NAME:USER_PASS@ENDPOINT_URL/DB_NAME'
SQLALCHEMY_TRACK_MODIFICATIONS = True" >instance/config.py

# Create the WSGI Entry Point
echo "from run import app

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

# Creating a uWSGI Configuration File
echo "[uwsgi]
module = wsgi:app

master = true
processes = 5

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

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

# 起動
uwsgi --socket 0.0.0.0:8000 --protocol=http -w wsgi:app &

# Create a Systemd Unit File
echo "[Unit]
Description=uWSGI instance to serve myproject
After=network.target

[Service]
User=プロジェクトディレクトリのユーザー
Group=nginx
WorkingDirectory=/var/www/html/YourSampleRepo
Environment="PATH=/var/www/html/env/bin"
ExecStart=/var/www/html/env/bin/uwsgi --ini flaskr.ini

[Install]
WantedBy=multi-user.target" >/etc/systemd/system/flaskr.service

# uwsgi起動
systemctl daemon-reload
systemctl start flaskr;systemctl enable flaskr

# Configuring Nginx to Proxy Requests
echo "    server {
        listen       80;
        server_name  moqrin3.flask.com;
        
        location / {
          include uwsgi_params;
          uwsgi_pass unix:/var/www/html/flaskr-tutorial/flaskr.sock;
        }
     }" >/etc/nginx/conf.d/moqrin.conf

# 起動
systemctl start nginx; systemctl enable nginx

# # Migration
cd /var/www/html/YourSampleRepo
flask db init
flask db migrate
flask db upgrade
# 何かうまくいかない場合の確認は
systemctl status flaskr -l
vim /etc/hosts
xxx.xxx.xxx.xxx moqrin3.flask.com

表示確認

f:id:moqrin3:20190128092741p:plain

4. 宿題

あれ、AutoScalingとCodeDeploy,CodePipelineってどういう感じになるか確認しなきゃ。

参考:

AWS CLI 認証情報ヘルパーを使用して Linux, macOS, or Unix 上で AWS CodeCommit リポジトリへの HTTPS 接続のセットアップステップ

mysql_confがない場合(mysql-community-serverを使っていて)