AWS CodePipeLineに初めて触った時のメモ

先週初めてCodePipeLineを使ってみました

その時のメモを残しておきます。

前提

  • CodeCommitにコミットができる状態であること
  • CodeBuildで手動ビルドができる状態であること

CodePipeLineとは?

CodePipeLineはAWSのCI/CDサービスです。

各フェーズごとにステージを作成することができ、

さらにステージ内で行う行動をアクションで定義することができます。

例えば、コミットステージにCodeCommitのプッシュをトリガーとして初め、そこの成果物を元にビルドステージでアクションとしてCodeBuildのビルドやテストを行う、と言ったことを直感的に作れることができます。

また、AWSサービス以外にもGitHubやCIサーバーなどサードパーティーの連携などもできるようです。

今回は第一歩目として、設定しやすいAWSのサービス内のみを使用して実現しました。

行なったこと

今回はUdemyのとある学習教材を元に、パイプラインの設定をしていきました。

この手順を以下に記載します。

まず、CodePipelineを開き、「パイプラインを作成する」ボタンを押します。

押した後の画面が下記になります。

パイプライン名は任意、そのほかはデフォルトで設定します。

設定が終わったら「次に」押します。

この段階はソースステージ、CICDを行いたいリポジトリを選択できます。

サードパーティリポジトリホスティングサービスも利用できますが、ここではCodeCommitを選択します。

CodeCommitの場合、リポジトリ名とブランチ名を検索できるので設定はかなり簡単でした。

そのほかの設定はデフォルトのままで「次に」を押します。

このページはビルドステージの追加を行うことができます。

ビルドステージではJenkinsやCircleCIなどのサードパーティのビルドサーバーやCodeBuildを選択できます。

CodeBuildの場合はソースステージで選択したリポジトリのルートにBuildspec.ymlを配置することで 記載に沿ったコマンドを実行することができます。

設定としてはあらかじめCodeBuildでビルドプロジェクトを作成していれば、プロパイダーとリージョンを指定した上でプロジェクトを選択することができます。(その場で作成することもできるようです)

経験上、かなり複雑な場合もありますのでスキップして後で追加することもできます。

自分の場合は別のチュートリアルですでにビルドプロジェクトを作成していたのでそちらを指定して「次に」を押して進みました。

デプロイステージではビルドしたものをどこにデプロイするか設定することができます。

写真ではElasticBeanStalkを指定していますが、ECSだったりS3だったり、CodeDeployだったりを指定できますが、実はCacaponはこの辺りの知見はまだありません、今後要勉強ですね。

スキップすることもできますので、わからなかったらスキップしましょう。

次が最後のページです。

確認が終わりましたら「パイプラインを作成をする」を押すと、一連のサービスが繋がった状態になります。

つまり、CodeCommitにコミットすると、CodeBuildでビルド・テストされ、正常だった場合はElasticBeanStalkにデプロイされるというフローが自動的に実行されるのです。

これで来たとき冗談抜きですげーって言っちゃいました笑

ちなみに、本番環境のデプロイなどで人間の確認が必要な場合は手動承認などのアクションもステージの中の一つのアクションとして定義することができます。SNS経由で承認者にメールを送ることもできるので、よりよいCI/CDが実現できそうですね。

課題

ここまでチュートリアルに沿って作成しましたが、何点か課題も残っています。こちらに関しては後日まとめられたらなと考えております。

CodeBuildのbuildspec.ymlの書き方がわからない

CodeBuildはルートに置かれたbuildspec.ymlに沿ってビルド作業を行います。

固有の書き方なので書いて行ったら覚えられるでしょうが、自在に描けるようになりたいですね。

CodeDeploy周りがあまりわかっていない。

できることといえば、どこにデプロイするかを決められるみたいなのですがまだ覚えられていないので要勉強です

権限まわりをどう設定するか

今回はAdmin権限で行なってしまったので、設定するのにどんな権限が必要なのか理解しておりません。

仕事ではAdmin権限などもらえませんし、現場で自力で作る時は出てくると思うので、

何の権限が必要なのかを相手に伝えるためにもちゃんと勉強したいところですね

クロスアカウントアクセスの場合の挙動の理解

早速仕事場でも自動化を進めようと思い利用してみたのですが、初回でコミットの権限がないエラーが発生してしまいました。

そちらはクロスアカウントでアクセスする形式だったのですが、この場合の挙動などはあまりわかっておりません。

ちなみに、コミットでトリガーで動いた場合は特に問題ありませんでした、なんだったのだろう。

サードパーティを絡めた場合の挙動

どれくらいめんどくさくなるのか?それともかなり簡単に作れるのか?

GithubやJenkinsを使っている人もいるでしょうしこの辺りは一通りやって理解したいですね。


という感じで、CodePipeLineをやってみた時のメモでした。

想像以上にコミットとビルドは設定できるので、CI/CDのとっかかりとしてはかなりおすすめです。

このメモが参考になりましたら幸いです、また次回のブログでお会いしましょう。