CodePipelineを step by step でやってみた
この記事では、CodePipelineを実践するにあたってCodeCommit、CodeBuild、CodeDeployを順に行います。最後にそれぞれをCodePipelineから呼び出します。
CodeCommit
IAMユーザの作成
リポジトリをcloneするユーザを作成します。
IAM → ユーザ追加 →既存のポリシーを直接アタッチ → AWSCodeCommitPowerUser
を指定し、ユーザを作成する
作成した、ユーザの認証情報を開き、AWS CodeCommitのHTTPS Git 認証情報
を生成します。
生成されたユーザ名、パスワードをメモします。
リポジトリの作成
CodeCommitのリポジトリより新規のリポジトリを作成します。
作成後、下記のような画面となりますので、
URLのクローン → HTTPSクローンを選択し、URLをコピーします。
コマンドラインにて下記を実行します。
git clone コピーしたURL
すると、認証情報が求められますので、先ほどメモした認証情報を入力します。
認証後リポジトリがクローンされます。
pushする
クローンしたリポジトリ内にappspec.yml、buildspec.yml、main.py、build.py、env_create.sh、run.shを準備します。 ファイルは、下記より利用しました。
demo-codecommit ├── appspec.yml ├── build.py ├── buildspec.yml ├── env_create.sh ├── main.py └── run.sh
また、GitHubのリモートリポジトリも作成を行い、
下記コマンドで追加します。
git remote add github githubリポジトリのURL
その後、下記コマンドを実行し、各リポジトリにpushを行います。
git add . git commit -m "first commit" git push origin master git push github master
すると、CodeCommitのリポジトリにファイルが追加されていることが確認できます。
CodeBuild
続いてCodeBuildを行います。
まずは、ビルドプロジェクトを作成します。
ソースには先ほど作成したCodeCommitのリポジトリを指定します。
環境については、Amazon Linux2を使用します。
他の設定はデフォルトとして作成を行います。作成後以下の画面となるので、ビルドの開始を選択します。
ビルドが始まるとログが表示され、ステータスが成功となれば問題ありません。
CodeDeploy
IAMロールの作成
AWSCodeDeployRoleをアタッチしたCodeDeploy用のIAMロールを作成します。
続いて、デプロイ対象であるEC2用のIAMロールを作成します。
EC2の作成
Amazon Linuxを指定しインスタンスの作成を行います。
IAMロールは先ほど作成したものを指定します。
ユーザデータには、CodeDeployエージェントをインストールするようにこちらにあるコードを貼ります。
タグでNameを任意の名前で設定します。
さらにセキュリティグループについては、ssh接続ができるように指定し、作成まで進めます。
CodeDeployの設定
アプリケーションの作成を行います。
今回はEC2を指定します。
続いて、デプロイグループの作成を行います。
サービスロールには、CodeDeploy用のIAMロールを指定します。
デプロイタイプはインプレースとします。
環境設定では、先ほど作成したEC2インスタンスのNameを指定します。
Loadバランサーは無効にし、作成をします。
下記のような画面となるので、デプロイを作成を選択します。
リビジョンタプをGitHubで指定し、GitHubでのメールアドレスを入力します。 その後、GitHubのリポジトリ名、コミットIDを入力し、デプロイの作成を行います。
するとデプロイが開始され、成功すると以下のような画面となります。
CodePipeline
最後に、今までのCodeCommit、CodeBuild、CodeDeployを繋げます。
新しいサービスロールを指定し、次に進みます。
ソースには、先ほどCodeCommitを指定します。
ビルドも作成したプロジェクトを指定します。
デプロイも先ほどのアプリケーションを指定し、パイプラインの作成を行います。
すると、このようにパイプラインが実行されていきます。
正常に進むと以下のようになります。
再度内容を変更しpushする
main.pyを以下のように変更します。
import requests from bs4 import BeautifulSoup # Get res = requests.get('https://dev.classmethod.jp/') # Parse soup = BeautifulSoup(res.text, 'html.parser') # title title = soup.find('title').text print(title)
変更後下記コマンドを実行し、再度pushします。
git add main.py git commit -m "main.py fix" git push origin master
すると、CodePipelineも再度実行が始まります。
EC2に接続し、ログ(scripts.log)を確認すると、正常に変更されていることが確認できます。
最後に
コードをホスティングし、自動的にビルド、テストして、AWSにデプロイという流れを一通り体験しましたが、非常に便利だと感じました。
今回は、EC2にデプロイを行なってみましたが、他にLambdaやECSにもデプロイ可能です。