AWS CodePipline 指定リポジトリのmasterブランチにpushされたら動くように設定する

## 概要

指定のGithubのリポジトリのmasterブランチにpushイベントが発生したらCodePiplineが動作するように設定を行う。
本記事は完全な手順紹介の記事ではなく、体験記的な側面が強い。したがって一部の設定内容はご自身の環境に読み替えて頂く必要がある。

## 前提

- Githubのアカウントが存在し、今回作業するブラウザでGithubにログインできていること。

## 基本的な設定項目

先に決定しておいたほうが良い内容を下記に記載しておく。

| 項目 | 制約や選択や内容 | 備考 |
| --- | --- | --- |
| パイプライン名 | 100文字以下<br>有効文字は`A-Za-z0-9.@-_`のみ| パイプライン作成後に変更できない |
| パイプラインタイプ | 「V1」 or 「V2」から選択 | それぞれで機能と価格が異なる<br>V1: 作成時にコスト発生、標準のパイプライン（「masterブランチが更新されたらパイプライン動作開始」） <br>V2: アクション実行1分あたりコストが発生、パラメーター化されたパイプラインが使える、V1の機能は全て使えてプラスアルファの機能がある（「このGitタグがあったらパイプライン動作開始」など詳細なトリガー設定が可能）<br>V1 V2どちらが良いか迷ったら[こちら](https://docs.aws.amazon.com/ja_jp/ja_jp/codepipeline/latest/userguide/pipeline-types-planning.html)を参照|
| サービスロール | 「新しいサービスロール」の作成<br> or<br> 「既存のサービスロール」を流用<br>から選択 | AWSサービスに紐付けるIAMのロールのこと<br>パイプライン作成時にロールを作りたいなら「新しいサービスロール」を選べば良い<br>すでにパイプラインを作成済みでロールを使いまわしたいなら「既存のサービスロール」を選択すれば良い |
| ロール名 | 有効文字は`A-Za-z0-9.@-_`のみ | サービスロールで「新しいサービスロール」を選択すると入力欄が表示<br>パイプライン名をから自動設定<br>自動設定ロール名は`AWSCodePipelineServiceRole-ap-northeast-1-`の後ろにパイプライン名が入る |
| ロールのARN | 既存のIAMロールのARNの値を入力して検索する | サービスロールで「既存のサービスロール」を選択するとARN入力欄が表示 |
| ソースプロバイダー | CodeCommitやGithubなどをプルダウンで選択 | パイプラインで監視する対象のソースを選択<br>プルダウンで選択後、ソースプロバイダーへの接続情報が表示される。 |
| 接続（ソースプロバイダーでGithub2を選んだ場合） | Githubとの接続設定を実施 | 当該AWSとGithubの紐づけ |
| リポジトリ名（ソースプロバイダーでGithub2を選んだ場合） | Github内のリポジトリ名を検索・設定 |  |
| パイプライントリガー（ソースプロバイダーでGithub2を選んだ場合） | 「ブランチにプッシュイン」 or 「Gitタグ」or 「なし」から選択 | 「ブランチにプッシュイン」: 後から選ぶブランチにpushが合ったときに動作<br>「Gitタグ」: パイプラインタイプV2じゃないと使用不可<br>「なし」: パイプライン手動実行 or スケジュール実行のどちらかになる |
| 出力アーティファクト形式（ソースプロバイダーでGithub2を選んだ場合） | 「CodePiplineのデフォルト」 or 「完全クローン」から選択 |  |

## 方法

1. 暫定デプロイで使う任意のS3バケットを作成する。（オブジェクトのバージョニングはONにしておく。それ以外はデフォルト設定でOK）
1. AWSにブラウザでログインし、CodePiplineの画面を開く。
1. 「開始方法」から「パイプラインの開始」をクリックする。
1. 下記の情報をそれぞれ入力する。（→の先は今回の設定内容）
    1. パイプライン名（100文字以下、日本語不可） → laravel10-deploy
    1. パイプラインタイプ（「V1」と「V2」より選択） → 「V2」
    1. サービスロール（「新しいサービスロール」と「既存のサービスロール」より選択） → 「新しいサービスロール」
    1. ロール名（日本語不可） → パイプライン名から自動生成されたものをそのまま使用

    ![新規のパイプラインを作成する___CodePipeline___ap-northeast-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/05b96c37-a8c3-e0e2-d5b1-369f127dfc56.png)

1. 入力できたら「次に」をクリックする。
1. ソースを選択する。ソースプロバイダーの選択にてプルダウンから「GitHub（バージョン2）」を選択する。
1. 接続の項目の「GitHubに接続する」のボタンをクリックする。

    ![新規のパイプラインを作成する___CodePipeline___ap-northeast-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/95bc42e6-3f59-9e8a-2e82-85618d29267f.png)

1. 別ウインドウが開くのでまずは接続先名を入力する。（接続名とはAWSがGithubに接続するときの設定名と思っていただきたい。必ずしも接続先のGithubのアカウント名などと一致している必要はないはず。）

    ![接続を作成___CodePipeline___ap-northeast-1_と_新規のパイプラインを作成する___CodePipeline___ap-northeast-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/f56343e8-0370-3886-ae08-2e86d55499aa.png)

1. 接続名を入力し、「Githubに接続する」をクリックすると画面が変わる。「新しいアプリをインストール」をクリックする。

    ![接続を作成___CodePipeline___ap-northeast-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/c6850c1f-1fba-251c-0244-72e2ce1260f8.png)

1. Githubのログインユーザーとオーガニゼーションの一覧が表示されるので、接続したいワークスペースを選択する。

    ![Installing_AWS_Connector_for_GitHub.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/bc701955-f1e8-a809-879a-998c304ec2db.png)

1. 筆者はすでにこの作業を完了してしまっているため下記のようにAWS Connector for GitHubというアプリが導入済みとして表示された。みなさんはもう少しポチポチして当該のアプリケーションを導入する必要があるかもしれない。

    ![Installed_GitHub_App_-_AWS_Connector_for_GitHub.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/68ac1e6b-545c-76bc-6201-329eab07f884.png)

1. すべて設定が終わると小さなウインドウが閉じて、AWSの画面に戻ってくるはずである。「接続」の部分に先程設定したGitHubとの接続情報が選択されているはずである。

    ![新規のパイプラインを作成する___CodePipeline___ap-northeast-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/87c3f1c5-7077-26fd-b02b-9609d7da5a04.png)

1. リポジトリ名の部分をクリックして、今回監視するリポジトリ名を選択する。筆者は「test」という下記のリポジトリを選択した。
    - [https://github.com/miriwo0104/test](https://github.com/miriwo0104/test)

1. 「masterブランチにpushが合ったときにPiplineを動かしたい」が今回の要望なので下記の様に設定した。
    1. パイプライントリガー（「ブランチにプッシュイン」か「Gitタグ」か「なし」から選択） → 「ブランチにプッシュイン」
    1. ブランチ名 → master

    ![新規のパイプラインを作成する___CodePipeline___ap-northeast-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/5fdac663-1fc7-d413-5e3b-56fc2db81588.png)

1. 全部設定したら「次に」をクリックする。
1. CodeBuildは設定しないため「ビルドステージをスキップ」をクリックする。

    ![新規のパイプラインを作成する___CodePipeline___ap-northeast-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/af9898c1-a432-9d92-a7d9-d2cd2d5872a9.png)

1. CodeDeployは他の記事で別途設定方法を指定するため、今回は暫定のものを設定する。
1. プルダウンでS3を選択する。適当なバケットを指定して本当に適当に設定する。（暫定なため）

    ![新規のパイプラインを作成する___CodePipeline___ap-northeast-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/45e89ad4-7a33-b426-6937-6059fc41304d.png)

1. レビューページで内容を確認し、特に問題なさそうなら「パイプラインを作成する」をクリックする。

## 確認

- 当該のブランチに空コミットを行い、リモートにプッシュする。

https://qiita.com/miriwo/items/dbf82ca73723026d96f2

- 下記のように、コミット起点でパイプラインが動作し始めれば今回の作業はうまくいっている。

    ![パイプライン___CodePipeline___ap-northeast-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/7a84db46-f383-43d8-2ad5-b319d03f58f7.png)


## 参考文献

https://nihemak.hatenablog.com/entry/2018/12/04/001852

https://carametal.hatenablog.com/entry/2020/12/05/114515#EC2%E3%82%A4%E3%83%B3%E3%82%B9%E3%82%BF%E3%83%B3%E3%82%B9%E3%81%AE%E8%B5%B7%E5%8B%95

https://docs.aws.amazon.com/ja_jp/ja_jp/codepipeline/latest/userguide/pipeline-types.html

https://docs.aws.amazon.com/ja_jp/codepipeline/latest/userguide/pipelines-create-service-role.html

https://docs.aws.amazon.com/ja_jp/codedeploy/latest/userguide/tutorials-github.html