CodePipelineテンプレートとGitHubConnectionによるパイプラインの簡易的構築

# はじめに．
従来、CodeCommitを介してCodePipeを利用しているケースが多い中、CodeCommitが新規アカウントでの利用ができなり、CodeCommitサービス提供終了に伴う弊害は大きかったと思います。
3rdパーティのリポジトリを利用したCodePipelineの導入に関する情報が少ないため、簡易的な導入方法を提示します。（GitHub Actionを利用したケースについて、ここでは触れません。）
また、CodePipelineテンプレート機能が新しく追加されておりますので、こちらの機能を利用してみたいと思います。

# １．CodePipelineで利用できるバージョン管理システムについて
現状、CodePipelineで利用っできる3rdパーティ製のバージョン管理システムについては、大きく以下3種類存在します。
　A.GitHub
　B.Bitbucket
  C.GitLab

 本件では、利用頻度の高いA.GitHubを題材にします。

 # 2. 題材となる構成図

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3744312/8f6d0c63-2690-ef41-fc08-8b3b921b9115.png)

 # 3. 手順の流れ
  ① 準備編（GitHubリポジトリの作成）
  ② 導入編（外部リポジトリの接続リソースの作成）
  ③ 構築編（CodePipelineの構築）

 外部リポジトリとの連携部分にフォーカスしたいため、 GitHubアカウントがある前提とさせていただきます。

 # 4. 準備編（GitHubリポジトリの作成）
 セキュリティ面を意識して、プライベートリポジトリを作成します。
 GitHubのページから順次、必要設定を実施していきます。
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3744312/9b61a366-95fe-bb1e-095d-178eb5dc1ae7.png)

  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3744312/640d75ef-f805-00ca-61b5-2789ab3d271a.png)

作成完了時のリポジトリ画面になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3744312/532d27cf-9226-1d64-8fb8-0ae5047922fb.png)

リポジトリが作成できたら、リポジトリURLをメモします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3744312/958f1ace-d217-5924-e8f4-eaac54af5ae2.png)

ローカル環境に上記で作成したGitリポジトリを展開し、簡単なCloudFormationテンプレートを作成します。

先ほどメモしたGitリポジトリのURLを使用してGitクローンします。
```
$ git clone https://github.com/ueno120525/cicdrepo.git
```

CodePipelineのデプロイステージで使用するCloudFormationテンプレートになります。
（一番簡単な内容にしております。）
```template_cfn.yaml
AWSTemplateFormatVersion: "2010-09-09"
Resources:
    S3Bucket:
      Type: 'AWS::S3::Bucket'
      Properties:
        AccessControl: Private
        BucketName: githubcon-test-202412230900
```
作成したCloudFormationテンプレートをリモートのGitリポジトリにPushまで一気に実施します。
```
$ git add template_cfn.yaml
$ git commit -m "サンプルテンプレートの登録"
$ git push origin main:main
```

# 5. 導入編（外部リポジトリの接続リソースの作成）
ここからが、本題のメインとなります。
CodePipelineのマネージメントコンソールから、[設定] > [接続]から接続リソースを作成していきます。
作成イメージは、ChatbotでSlack連携となる設定を作成するイメージと同じです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3744312/c070af24-d506-c293-dbbc-e25eae8a3714.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3744312/968dc7d9-154a-0a7a-2fbc-90b21480949e.png)

GitHub側の認証画面が自動的に表示されますので、必要事項を入力して進めます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3744312/a8f99655-188c-ee3d-39b2-13602f0ddb86.png)

AWS側からの接続要求に対する、接続承認を問われますので承認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3744312/f0657dd9-6e95-9dca-d9a8-b3e12089d8da.png)

マネージメントコンソール画面の状態が変わりますので、新しい接続アプリをインストールします。
接続アプリとは、GitHub側にAWS側へ接続するGitHub接続専用ユーザとなります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3744312/fbd26458-54dd-3931-fe81-b0c228847e9f.png)

GitHub側の画面自動的に表示されますので、対象リポジトリを選択してインストールします。（ここでは全てのリポジトリを指定）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3744312/840341f3-c951-e64b-223c-f7e0814d7bef.png)

直前でインストールしたアプリの識別情報が自動入力されますので、その状態で接続します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3744312/a342a5e8-1d68-7586-5e7c-9d8b79e73972.png)

ここまでの手順を実施して、GitHubで「GitHub Apps」に「AWS Connector for GitHub」が作成されていることを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3744312/19e61bad-1047-bafe-2fce-6e70c8e3781f.png)

導入編として以上となります。

# 6. 構築編（CodePipelineの構築）
ここからは、導入したGitHubConnectionを利用して、CodePipelineを作成していきます。
導入編で作成したGitHubConnectionがCodeCommitの代わりとして、作成していく感じとなります。
本編では、最近リリースされたCodePipelineテンプレートを利用して、必要最低限の入力でデプロイしてみたいと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3744312/933ef112-d6fd-82e4-79d2-abe4ba5e951c.png)

ここで、新機能であるCodePipelineテンプレートを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3744312/b716e3a4-b046-f3b0-0c72-c9ca8cc6dd2c.png)

今回は簡易的にパイプラインを検証するため、ClodFormationデプロイを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3744312/02a10ec2-9ae5-ae65-0fdf-41d1516ce74d.png)

連携するバージョン管理のリポジトリ情報などを入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3744312/c0f58737-9780-6467-74a8-a91733dfe416.png)

リポジトリの対象ブランチから、CloudFormationデプロイの入力情報（CloudFormationテンプレート）を入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3744312/1a4aafe0-3d98-1727-17fd-bde99a3b02c1.png)

CloudFromainに設定するサービスロールを指定します。
削除保護ポリシーは、削除と維持の2種類のみ選択できますが、ここでは削除を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3744312/8e6f44ef-b01b-3253-c65b-4e988a139670.png)

CodePipelineマネージメントコンソール画面で、パイプラインを見ると自動的に作成され、動作していることが確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3744312/0f7127cf-3938-c848-a218-9a4e851fae11.png)

こちらは、CloudFormationテンプレートにてリソースが作成されていることが確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3744312/c984fbdb-abc8-ecf9-416a-bcdfc524564a.png)

# 7. おまけ
CodePipelineで構築する場合、最終ページで「Preview」エリアを開くことで
利用されているCodePipelineテンプレートの中身を確認することができます。
テンプレートを自作する場合などに参考できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3744312/2bcfc940-024b-4943-04f9-2f6b6557a9af.png)

テンプレートが長いため、後半は省略します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3744312/4af07011-dbd5-5bce-992e-4b649fad630e.png)


# まとめ
3rdパーティのバージョン管理と連携する「接続リソースを」作成することで、CodePipelineに簡単に取り組むことができるます。
CodePipelineテンプレートが新しく利用できるようになったため、少量の入力値でCodePipelineが構築できます。
CodePipelineテンプレート自体は、CI、CD、オートメーション毎に設定できそうであるため、小規模の部分的なテンプレートを作成する上では利用しやすいと感じました。