Ch10. 開発者ツール

Code Commit

Code CommitはGitの中央リポジトリ(リモートレポジトリ)を提供してくれるサービス。 Github(.comの方)のAWS版であり、リポジトリ管理のためのインフラ構築の労力を省くことが出来る。

開発の携わる全てのメンバがAIMユーザである必要があり、このためGithubのようなオープンソースプロジェクトは構成できない。 プルリクエストの機能が実装されている。在って当たり前な機能な気がするが2017年11月にリリースされた新機能らしい。

CodeBuild

JenkinsとかGithub Actions とか Gitlab CI/CDとかのAWS版という位置づけ。ビルド環境としてJava, Node.js, Pythonなどをサポートしている他、利用者指定のDocker Image上でビルドを行うことも可能。当然ビルドだけでなく、単体テストも実行可能。

ビルド対象のソースコードはCodeCommitだけでなく、GithubやBitbucketも選択できる。

ビルドに利用するインスタンスを指定したら、後はビルドに要した時間に比例した従量課金制なのでビルド用のインスタンスを保持しておくコストの心配をしなくて済む。

また、ビルド作業量が大きくなったタイミングでビルドに利用するインスタンスタイプをアップグレードできるので「当初は小さいプロダクトだったが、プロダクトが大きくなるにつれビルド時間が激増した」というあるあるも回避できる。

ビルドコマンド・テストコマンドはbuildspec.ymlに宣言しておく。

Code Deploy

複数台のサーバに対してデプロイを実施する場合、サービス全体が利用不可になる事のないよう、ロードバランサからサーバーを一台ずつ切り離して、各サーバにビルド対象を配置していくといった作業が必要になる。

各サーバへの配置を実施中にビルドの不具合が発生した場合、ロールバックの手順も確立しなくてはならない。これらの作業を自動化してくれるのがCode Deployである。

デプロイ先としてlambdaやEC2のみならずオンプレミスサーバも設定できる。但し、EC2やオンプレミスサーバに対してCode Deployを利用する場合は専用のエージェントをインストールしておく必要がある。appspec.ymlに各種資源の配置場所を宣言しておく。

複数のホストに対して資源配置を行う場合は、1度にどれだけ配置を行うのかオプションで指定する。以下のオプションが用意されている。

  • 【AllAtOnce】一度に全てのサーバーに対して配置を行う。サービス全体のダウンタイムを許容するが、最も短時間でビルドを完了させることが出来る。
  • 【HalfAtOnce】ロードバランサに紐付くサーバを半分に分けて、順番に資源配置を行う。
  • 【OnceAtATime】ロードバランサに紐付くサーバを一つずつ選んで順番に資源配置を行う。最も時間がかかるが、サービスのパフォーマンスに対する影響は最も小さい。

AutoScalingを利用して稼働サーバが増減する場合、Deployの難易度は急激に上がる(配置対象のサーバーの数が増減してしまうので当然だが)。CodeDeployはこの問題に用意に対処できるようになっている。

Code Pipline

CodeCommit, CodeBuild, CodeDeployを束ねて自動化する。 CodeCommitが新しいコードのコミットを検知したら、CodeBuildは自動で資源を作成、CodeDeployによって開発環境へのデプロイまで自動化される。ここでユーザーの承認プロセスを設けて、ユーザーによるOKが出ると本番環境へのデプロイが自動で行われる、といった運用が可能になる。