
CodePipelineを step by step でやってみた
この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
この記事では、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にもデプロイ可能です。






