初めてCodePipelineを触ってみた

# はじめに
[前回の記事]では CodePipeline について調査を行いました。
今回は CodePipeline を触ってみたのでその記録を残します。

# 前提
繰り返しですが私はAWSの仕組みや各サービスの内容について詳しく理解できていません。
そのおかげで、テンプレートの作成以前に CodePipeline を触ってみる段階でも苦労しました。

# 事前準備

事前準備として必要なものは以下の2つです。

- 有効なAWSアカウント
- プロジェクトのソースコードが入っているGitHubリポジトリ


もちろん全て一人でやってみるというのは難しかったので、資格持ちの同期と ChatGPT さんに手伝ってもらいながら進めました。
では各ステージごとに何をしていったかというのと、振り返った時使えるように私が作成した時の設定値も残します。


# Source
前回の記事で触れましたが、今回は CodeCommit を使用せず、 Github をアクションプロバイダーとして使用しました。
 Github との接続方法は3つくらいあるみたいでしたが、今回は CodeStar を使って GitHub と接続 しました。手順は主に以下の記事を参考にしました。


 https://zenn.dev/taroman_zenn/articles/4007a33384c6ad
 

基本的にどれを選べばいいの！？となったときはデフォルトの値のままにしていました（パイプライン作成した後でも変更できるので）。

![screencapture-ap-northeast-1-console-aws-amazon-codesuite-codepipeline-pipelines-MyPipelineStack-MyPipeline-1yqqsTpPne2a-edit-2024-12-25-13_50_45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3577840/8da87e9f-6c1e-8508-ea9c-5aa2e8cddc16.png)

こんな感じで設定して「接続する準備が完了しました」と表示されていればOKでした（アクション名や出力アーティファクトは任意の名前で設定してください）。


# Build

ビルドにはCodeBuildを使用しました。事前にビルドプロジェクトを作成しておくと便利です。

プロジェクト作成時に BulidSpec という項目の中でビルド仕様を「builspecファイルを使用する」にしました。

![スクリーンショット 2024-12-25 14.37.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3577840/d536c3a1-537f-6145-cc3b-823557e34f14.png)

そうなると builspec ファイルが必要になるので buildspec.yml を作成してソースコードのルートディレクトリに配置しておきました。<>の中身は適宜書き換えてください。

```yaml:buildspec.yml
version: 0.2

phases:
  install:
    runtime-versions:
      python: 3.9
    commands:
      - echo "Installing dependencies"
      - pip install aws-sam-cli
  pre_build:
    commands:
      - echo "Starting pre_build phase"
      - sam --version
      - echo "Validating SAM template"
      - sam validate --template infra/sam/template.yaml

  build:
    commands:
      - echo "Starting build phase"
      - sam build --template infra/sam/template.yaml
  post_build:
    commands:
      - echo "Starting post_build phase"
      - echo "Packaging SAM application"
      - sam package --template-file .aws-sam/build/template.yaml --s3-bucket <YOUR_BUCKET_NAME> --output-template-file packaged.yaml
      - echo "Deploying SAM application"
      - sam deploy --template-file packaged.yaml --stack-name <YOUR_STACK_NAME> --capabilities CAPABILITY_IAM --region <YOUR_REGION> --parameter-overrides DalleApiKey=<REDACTED>

artifacts:
  files:
    - packaged.yaml

cache:
  paths:
    - .aws-sam/cache

```


私が一番苦労したポイントはここで、IAMのポリシー不足が原因で以下のエラーが頻発して何度もビルドに失敗しました。
```
<arn>:function:<function名> because no identity-based policy allows the lambda:ListTags action
```

一番初めに必要なポリシーを付与しておけばよかったんですが、どれが必要かわからないからとりあえず飛ばして後でやろう！という考えで後々痛い目を見ました；；

システムの構成などで必要な権限がいろいろあったので今回は雑に権限を一つずつ付与していったんですが、実際の業務では必要最低限の権限を付与するようにします。

![screencapture-ap-northeast-1-console-aws-amazon-codesuite-codepipeline-pipelines-MyPipelineStack-MyPipeline-1yqqsTpPne2a-edit-2024-12-25-13_58_08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3577840/d61a85d9-ad37-0d92-2dc4-5f9d1d17cc1c.png)



# Deploy
デプロイ先はs3に設定しました。

![screencapture-ap-northeast-1-console-aws-amazon-codesuite-codepipeline-pipelines-MyPipelineStack-MyPipeline-1yqqsTpPne2a-edit-2024-12-25-14_06_13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3577840/36c5343b-058a-8f6b-57ed-f51224bceda4.png)

フロントのソースコードをデプロイするようにしたかったんですが、おそらくGithubからソースを取得するときにリポジトリを丸ごと全部取得していたのでフロントのソースコードがうまく上がりませんでした。



# おわりに

触ってみる段階でかなり時間がかかりましたが、基本的にはコンソール画面で選択していくだけなので流れとしては簡単でした。
また、Sorceステージの設定でフロントのコードだけをs3にアップロードするように設定していなかったのでs3にソースコード全てを圧縮したzipファイルが上がってしまいました。s3のフロントコードを見てアクセスするはずのWebシステムだったので、もちろんうまく動作しませんでした。

他の構成のシステムでも使えるかどうかの検証をしたかったんですが、上記の現象に悩まされてしまい今回の研究はここまでになりました。

業務ではAWSに触れる機会が多いので、今回のようにサービスを触ってみて少しずつでも理解していきたいです（資格取得も併せて頑張ります）。




[前回の記事]:https://qiita.com/oec-shimokawa/items/3a6b41c064134540ef48