AWS チュートリアル「継続的デリバリーパイプラインを作成する」をやってみた

# 初めに

現在デベロッパーアソシエイト合格を目指しており、CodeBuild や CodePipeline についての理解を深めたかったので、こちらのチュートリアルをやってみました。

https://aws.amazon.com/jp/getting-started/hands-on/create-continuous-delivery-pipeline/

# 開始前に

## 継続的デリバリーとは
ソフトウェアを構築、テスト、デプロイするプロセスを自動化することで、デベロッパーがソフトウェアをより迅速にリリースできるようにするソフトウェア開発手法のこと。

## 継続的インテグレーションとは

ホストされるリポジトリに変更を定期的にプッシュし、その後に自動化されたビルドとテストを実行するソフトウェア開発手法のこと。

# 1. Git リポジトリを作成する

こちらのリポジトリをフォークします。

https://github.com/aws-samples/aws-elastic-beanstalk-express-js-sample

# 2. Elastic Beanstalk で環境を作成する

アプリケーションの名前を入力します。

![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/81db5fc6-46dc-953e-8a76-e71079ff9441.png)

プラットフォームは以下のように選択します。

![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/0843aa2c-3cbc-b6bc-846e-bcb7c124b014.png)

環境の作成が始まりますのでしばらく待ちます。

![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/6b3bd99f-6575-7955-327c-ea4adb652753.png)

環境の作成が完了し以下の URL をクリックするとサンプルアプリケーションを確認できます。

![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/f6c36ddb-d2fa-bde7-f92b-a5b5502f4477.png)

URL をクリックすると以下のようなWebページに遷移します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/f7063dde-9be0-50d1-6071-8633703f37b7.png)


# 3. CodeBuild でプロジェクトを作成する

プロジェクト名を入力します。

![5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/8fc2f88f-03b9-3af7-935f-54d736bd5546.png)

GitHub をソースプロバイダに設定し、OAuth を利用した接続にチェックを入れ、「GitHub に接続」をクリックします。

![6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/43508915-292e-c6c0-3e93-e9a83ff778c6.png)

フォークしたリポジトリを選択します。

![9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/59b1103f-9a93-2b9d-8d07-5b3d5a71fb6c.png)

以下のように環境の設定をします。

![10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/fb6763d0-5068-d61a-95cd-308ec051493a.png)

ビルドコマンドを記述します。

```yaml
version: 0.2
phases:
    build:
        commands:
            - npm i --save
artifacts:
    files:
        - '**/*'
```

![11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/ee8c79f3-9c05-c15d-d8e4-8e9e180284df.png)

残りの設定はすべてデフォルトのまま、「ビルドプロジェクトを作成する」をクリックします。

![12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/445920e1-a109-bb70-b492-592f7f9a02b9.png)

「ビルドを開始」をクリックし、ビルドが正常に行われるかテストします。

![13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/b6fb4d53-ed9a-bcc8-b45c-af5a7c9d17ae.png)

# 4. パイプラインを作成する

パイプライン名を入力し、「新しいサービスロール」にチェックを入れます。CodePipeline がサービスロールを作成できるように、チェックボックスにもチェックを入れます。

![14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/dc10b8cf-ee0e-3132-085b-fc043d8c5e54.png)

ソースプロバイダは「GitHub（バージョン2）」を選択し、「GitHub に接続する」をクリックします。チュートリアルでは GitHub（バージョン1）で進めていましたが、今回はバージョン2を選択しました。しかしバージョン2ではなぜかプッシュしても自動でパイプラインが実行されませんでした。この原因がわかっていません。チュートリアル通りにバージョン1ではプッシュ後に自動でパイプラインが実行されました。

![14_5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/1d411713-4b7d-b83a-afa1-dd2d69beb5df.png)

以下のように接続名を入力し、「GitHub に接続する」をクリックします。

![15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/0f161001-2de3-f86d-70de-02d785b9d757.png)

リポジトリを選択し、「ソースコード変更時にパイプラインを開始する」にチェックを入れ、出力アーティファクト形式はデフォルトを選択します。

![16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/f721a4ff-e601-0b7b-0f46-e952e4610af8.png)

ビルドステージの追加では作成したビルドプロジェクトを選択します。

![17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/81037c02-4cf3-e1a1-558d-af1cca51c38b.png)

デプロイステージでは作成した Elastic Beanstalk のアプリケーションを選択します。

![18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/d416b483-12ba-ad2d-6ed6-e08f54a75d78.png)

レビューでは「パイプラインを作成」をクリックします。作成後、パイプラインの実行が始まります。以下のようにパイプラインの実行完了後、Elastic Beanstalk のアプリケーション画面を更新するとリポジトリの内容が反映されていることが確認できます。

![21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/f3b10d96-752e-420e-a995-87291acd7c4f.png)

# 5. パイプラインにレビューステージを追加する

作成したパイプラインを選択し、「編集」をクリックします。

![22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/32123b5d-1f24-ee00-c2a5-ba8811de8188.png)

追加したい場所の「ステージを追加する」をクリックします。

![23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/24182088-b240-b6d0-67d3-a656b2c65287.png)

ステージ名を入力し、「ステージを追加する」をクリックします。

![24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/76bebcee-8315-5878-5a44-0083678e16d1.png)

「アクショングループを追加する」をクリックします。

![25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/57add1d7-7553-53b5-7096-b7a0c8927c58.png)

アクション名を入力し、アクションプロバイダーでは「手動承認」を選択します。その後「完了」をクリックします。

![26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/64cf157a-2d9e-10d2-a265-687a33f85562.png)

ステージを保存します。

![27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/60bb75b7-20b4-9ba7-7e28-2b77656633d6.png)

コードを編集し、プッシュしたら「変更をリリースする」をクリックします。これによりパイプラインが実行されます。

![30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/f032fd6d-ac7c-133b-135e-c345a1e4ce6e.png)

パイプラインの開始後、レビューステージでパイプラインの実行は承認待ちとなり一旦停止します。承認するには「レビュー」を選択します。

![28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/6285e20a-a495-d0c4-40a7-b9f1b204f105.png)

「承認します」をクリックすると、次のステージが開始されます。


![29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/5c816ff3-6c08-f0c8-329f-1563a640258f.png)

ブラウザを更新すると変更が反映されていることを確認できました。

![a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621414/871b016a-01ef-eeb8-3deb-48c4a0850afd.png)

# 参考記事

https://aws.amazon.com/jp/getting-started/hands-on/create-continuous-delivery-pipeline/