Tech Hotoke Blog

IT観音とは私のことです。

AWS CodePipeline・CodeBuildについてまとめみた

これは何?

デプロイを自動化しているが、それぞれのサービスが何をやっているのかいまいち理解できていなかったのでまとめてみた。

前提

  • AWS CodePipeline, CodeBuildを使用している
  • GitHubと連携している

Tips

基本知識

  • サービスごとの棲み分け

  • CodePipelineとは?

    • AWSが提供するCI/CDを実現するサービス
  • CodePipelineでできること ソースリポジトリからビルド、テスト、デプロイまで、リリースプロセスの自動化。

  • CodeBuildとは?

    • AWSが提供するコンパイル→テスト→デプロイまでを実行できるフルマネージド型のCIサービス。料金は、使用したビルド分数に対してのみ発生する。

今回やったこと

  • 現状:codebuildに個人のgithubアカウントが紐づいていた
  • 問題:アカウントが閲覧権限を持つリポジトリが見えてしまう
  • 対応:codepipeline のソースにgithubのソースリポジトリを指定し、codebuildのソースプロバイダにcodepipelineを紐づけることで上記の問題を避ける

  • Codepipeline経由で、CodeBuildを作成しなおす すでに作成済みのCodeBuildのsource providerをCodePipline に変更することはできない。一度CodeBuildを削除してCodePipline経由で作り直さないといけないという仕様らしい

  • 既存のCodeBuildを削除 1.該当のパイプラインの詳細>編集する
  • Build-and-Deployの「ステージを編集する」
  • プロジェクト名から「プロジェクトを作成する」
  • 既存のCodeBuildと同様の設定を行う(環境変数とか漏れると面倒なので注意)
  • Sourceの「ステージを編集する」(GitHubのアクションプロバイダーがversion1だったため)
  • アクションプロバイダーで「GitHub(バージョン2)」を選択
  • 左ペインの設定から「接続を選択」
  • (今回は事前に作成されていたため手順割愛。以下の記事が参考になりそう。本来ならここで接続設定を行い、対象のGitHubリポジトリと接続する必要がある) Terraform を使って GitHub v2 ソースアクションでコードを取得する CodePipeline を構築する #AWS - Qiita
  • 該当のパイプラインの左ペインの「設定」を選択(これがマジでわかりにくかった)
  • 紐づいているサービスロールに[CodeStarConnections]を追加し、先ほど作成した接続のARNを設定する(その他必要なロールも適宜アタッチする)
例
        {
            "Action": "codestar-connections:UseConnection",
            "Effect": "Allow",
            "Resource": "arn:aws:codestar-connections:ap-northeast-1:359601428599:connection/de7f946f-fcbe-47de-8117-0c4e3055d0ba",
            "Sid": ""
        }
  1. 新規作成したCodeBuildのロールにも[CodeStarConnections]を追加する
  2. CodeBuilgのソースプロバイダがAWS CodePipelineになっていることを確認
  3. 適当にpushして正常に動作すれば完了

参考

https://media.amazonwebservices.com/jp/summit2015/docs/TA-05-Tokyo-Summit-2015.pdf

DevOps on AWS大全 #AWS - Qiita

今後調べること

  • CodeDeployをなぜ使っていないのか?