Code Pipelineのチュートリアルやってみた！～CodeCommit編～

# はじめに
Code Pipelineのチュートリアルをやってみたので記事にしようと思います。

# やってみる
今回は「<a href="https://docs.aws.amazon.com/ja_jp/codepipeline/latest/userguide/tutorials-simple-codecommit.html">チュートリアル: シンプルなパイプラインを作成する (CodeCommit リポジトリ)</a>」をやりました。

## 事前準備
<a href="https://qiita.com/piro877/items/e57f08e224c168340463">前回の記事</a>で紹介したように、IAMユーザを作成します。今回は、前回与えたポリシーに加えて、`AWSCodeCommitFullAccess`も追加しました。

## 1. CodeCommitリポジトリを作成する
まずはリポジトリを作成します。
CodeCommitコンソールを開き、「リポジトリを作成」ボタンからリポジトリを作成します。
適当な名前を入力して、あとは特に何もいじりませんでした。

## 2. リポジトリをクローンする
先程作成したリポジトリを手元にクローンします。
まずは、<a href="https://docs.aws.amazon.com/codecommit/latest/userguide/setting-up-gc.html">こちらの記事</a>の「ステップ 3: CodeCommit への HTTPS 接続用の Git 認証情報を作成する」を参考に、クローン出来るように、IAMユーザに設定を追加します。
使用しているIAMユーザの詳細を開き、「セキュリティ認証情報」タブを選択します。
「AWS CodeCommit の HTTPS Git 認証情報」の欄があるので、そこから認証情報を生成します。
ユーザ名とパスワードが生成されるので、メモするか認証情報をダウンロードします。

CodeCommitリポジトリに戻り、「URLのクローン」から`HTTPS`を選択してクローンするためのURLをコピーします。
それを手元の任意のフォルダで実行し、手元にクローンします。
実行時にユーザ名とパスワードを聞かれるので生成した認証情報を入力します。

## 3. 手元のリポジトリにサンプルコードを展開する
<a href="https://docs.aws.amazon.com/ja_jp/codepipeline/latest/userguide/samples/SampleApp_Linux.zip">こちらのリンク</a>からサンプルコードをダウンロードして、先程クローンしたリポジトリに展開します。
CodeCommitリポジトリへのcommitやpushは、通常のGitと同じやり方です。

## 3. デプロイするインスタンスを作成する
サンプルコードをデプロイするためのインスタンスを作成します。
AMIは`Amazon Linux 2 Kernel 5.10 SSD`を選択しました。
インスタンスプロフィールは、<a href="https://qiita.com/piro877/items/e57f08e224c168340463#2-ec2%E3%82%A4%E3%83%B3%E3%82%B9%E3%82%BF%E3%83%B3%E3%82%B9%E3%81%AB%E3%82%A2%E3%82%BF%E3%83%83%E3%83%81%E3%81%99%E3%82%8Biam%E3%83%AD%E3%83%BC%E3%83%AB%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B">前回のチュートリアルで作成したもの</a>を利用します。
インスタンスタイプは`t2.micro`を選択し、インスタンスを一台起動します。

## 4. CodeDeployでデプロイグループを作成する
こちらは<a href="https://qiita.com/piro877/items/e57f08e224c168340463#4-codedeploy%E3%81%A7%E3%83%87%E3%83%97%E3%83%AD%E3%82%A4%E3%82%B0%E3%83%AB%E3%83%BC%E3%83%97%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B">前回のチュートリアルと同様の手順</a>で行います。

### サービスロール
サービスロールは、インスタンスに割り当てたIAMロールと同じように作成します。ユースケースで`CodeDeploy`を選択すると自動的に`AWSCodeDeployRole`ポリシーが含まれるようになるので、何もせず確認画面から作成を行います。

### アプリケーション
アプリケーションはCodeDeployコンソールに移動し、アプリケーションタブからアプリケーションの作成を行います。
***コンピューティングプラットフォーム***を選択するところでは`EC2/オンプレミス`を選択します。

### デプロイグループ
先程作成したアプリケーションの画面からデプロイグループの作成を行います。
* ***Service role***：先程作成したサービスロールを選択
* ***Deployment type***：`In-place`
* ***環境設定***：`EC2インスタンス`を選択し、キーの部分には`Name`、値の部分には***先程作成したインスタンス名***を入力。
インスタンスを作成する際につけた名前は、自動的に「Name: インスタンス名」というタグとしてインスタンスに付与されるので、これを指定します。
* ***AWSSystems Manager によるエージェント設定***：`今すぐアップデートをスケジュールする`
* ***デプロイ設定***：`CodeDeployDefault.OneAtaTime`
* ***ロードバランシングの有効化***：なし（チェックを外す）

この設定でデプロイグループを作成します。

## 5. CodePipelineでパイプラインを作成する
こちらも前回のチュートリアルと同様の手順ですが、ソースステージのところは「CodeCommit」を選択します。

### パイプラインの設定を選択する
適当な名前を入力し、サービスロールの作成を選択します。
高度な設定は特に変更しません。

### ソースステージを追加する
ソースプロバイダーに`CodeCommit`を選択します。
リポジトリには作成したものを、ブランチは表示されるものを選択します。（何も変更していなければ`master`が表示されるはずです）
検出オプションは特に変更せず、次に進みます。

### ビルドステージを追加する
こちらは`ビルドステージをスキップ`ボタンを押してスキップします。

### デプロイステージを追加する
デプロイプロバイダーに`CodeDeploy`を、アプリケーションとデプロイグループは4.で作成したものを選択します。

ここまで設定したらパイプラインを作成し、パイプラインの実行が完了するのを待ちます（数分かかります）。

パイプラインが成功したら、インスタンスのパブリックDNS名にアクセスするとSuceessページが表示されるはずです！

## 6. コードを変更してみる
ローカルリポジトリで`index.html`を編集し、背景色を変えてブランチにpushしてみましょう！
パイプラインが再度実行されて、先程表示したページに変更が表示されるはずです。

# おわりに
CodePipelineと仲良くなれそうな気がしてきました。

# 参考
* <a href="https://docs.aws.amazon.com/ja_jp/codepipeline/latest/userguide/tutorials-simple-codecommit.html">チュートリアル: シンプルなパイプラインを作成する (CodeCommit リポジトリ)</a>
* <a href="https://docs.aws.amazon.com/codecommit/latest/userguide/setting-up-gc.html">Git 認証情報を使用した HTTPS ユーザーのセットアップ</a>