想ひ出26: AWS/CodePipelineに入門する/1
おはようございます、moqrinです。
いつもの如く、今更感満載ですがCodePipelineに入門したので、そのまとめ1です。
当記事はCodeCommitリポジトリを作成して、EC2インスタンスにクローンして確認まで、となります。
次回がCodeDeployを利用したCodePipelineの体験となります。
素材としては、Flaskのチュートリアルブログを使います。
全部で4ステップで、当記事は2ステップまでを行います。
目次
1. CodeCommitリポジトリ作成してHttpsで接続/ローカル
3. 表示までを確認
4. 宿題
1. CodeCommitリポジトリ作成してHttpsで接続/ローカル
前提
① CodeCommitでリポジトリを作成
早速作成します。
② 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
問題なさそうなら、適当な場所にリポジトリをクローンしちゃいます。
③ ローカルからファイルを追加する
ちなみに、「macOS を使用している場合は、HTTPS を使用して AWS CodeCommit リポジトリに初めて接続すると、約 15 分後に後続のアクセスが失敗します。」とか書いているので、いきなりエラーが発生した場合にご留意下さい。いきなりエラーが出たとき、ワタクシはキョドりました・・・
次はサーバーでの対応に進みます。
2. Httpsで接続してGitクローン/インスタンス
① AWSCodeCommitFullAccessを付与してインスタンスサーバーを起動する
② 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
表示確認
4. 宿題
あれ、AutoScalingとCodeDeploy,CodePipelineってどういう感じになるか確認しなきゃ。
参考:
AWS CLI 認証情報ヘルパーを使用して Linux, macOS, or Unix 上で AWS CodeCommit リポジトリへの HTTPS 接続のセットアップステップ