Code3兄弟?4兄弟?いえ、きっと……
こんにちは、ラーニングサービス本部 テクニカルトレーニング第1部の三浦です。
Amazon Web Services(AWS)の認定インストラクターをしています。
さて、AWSの開発系ツールのサービス群、「CodeCommit」、「CodeDeploy」、「CodePipeline」は、しばしば「Code3兄弟」と呼ばれることがあります。これに2016年「CodeBuild」というサービスも加わり、「Code4兄弟」?と言われることも。
インフラ・運用系のエンジニア出身のわたくし、開発系ツールにはあんまりご縁がないかなぁと、実は割と遠巻きに眺めていたのですが、「AWS認定デベロッパー - アソシエイト」資格を取得したかったこともあり(2018年10月に無事取得)、ツールの学習がてら「Cloud9」とともに使い始めてみました。そうしたら、あら、これは便利♡ ということで、この2018年はこれらのツールにもっぱらお世話になっています。
私のように、「開発系ツールかぁ」と敬遠している方もいらっしゃるかもしれません。そこで本日は、Code兄弟思ったより気軽に、そして便利に使えますよ、という記事を書いてみました。
インフラエンジニアにもCode兄弟&Cloud9はとってもお役立ち
私はAWS認定トレーニングのうち、「AWS Technical Essentials 1」「AWS Technical Essentials 2」という基礎コース(※)に加えて、「Systems Operations on AWS」という運用担当者向けの中級コースを担当しています。
後者のコースでは、AWS CLI(Command Line Interface)を使用した各種の管理作業や、AWS CloudFormationのJSONのテンプレートを使用したAWSリソースの展開手法などを学習します。
そこで、CLIやJSONテンプレートのサンプルのコードを作成して、デモンストレーションを行う準備をするわけなのですが、
教室のPCで書いていたコードを忘れて帰ってしまったり……
家でデバッグしたコードをS3にアップロードし忘れて来てしまったり……
業務用PCにだけ作業途中のコードがあり、別の場所で作業の続きをできなかったり……
(忘れてばっかり!)
そんな私を助けてくれたのが、Cloud9とCodeCommit、そしてCodePipelineとCodeBuildです。「Infrastructure as Code」と言われる昨今、インフラエンジニアにとっても、これらの開発ツールは非常に役立ちます。
※2021年4月より、両コースは「AWS Cloud Practitioner Essentials」と「AWS Practical Startup Workshop 」にそれぞれ変更となりました。
やりたかったことと解決策
<やりたかったこと>
- どこからでもコードを編集したい
- 更新したコードを手軽にアップロードしたい
- テスト用と受講者公開用を分けて公開・管理したい
- 失敗したとき手軽にロールバックしたい
<解決策>
(1) Cloud9
さまざまな言語に対応した統合開発環境です。
ブラウザからインターネットに接続できて、AWSのマネジメントコンソールにサインインできれば、あとはいつでも、どこからでも、前回の作業状態の続きから再開できます。使い始めたら驚異的に便利でした。東京リージョンではまだサービスリリースされていないので、ダッシュボードはシンガポールリージョンを利用しています。本体(EC2)は東京リージョンです。
(2) CodeCommit
AWS上にgitレポジトリを作成・管理できます。
Cloud9上で更新したコードは、gitコマンドを使って差分をレポジトリにアップロードできます。いつ・何を更新したのかの履歴を確認でき、バージョン管理がとても楽になりました。
(3) CodePipeline & CodeBuild
CodePipelineを使えば、継続的なデリバリーを自動化できます。
CodeCommitの更新と連動してCodePipelineが動作し、CodeBuildやCodeDeployを順次起動していくことができます。
CodeBuildは、CodeCommitなどのレポジトリに配置されたコードを、設定ファイル(buildspec.yml)で指定されたビルドコマンドで、実行可能プログラムにビルドし、テストしてくれるツールです。
今回やりたいことはjsonやシェルスクリプトなどのテキストファイルをS3に配置するだけなので、CodeBuildのbuildspec.ymlには、各言語用のビルドコマンドを指定する代わりにAWS CLIコマンドで 'aws s3 sync' を指定し、CodeCommitのレポジトリのファイル群をS3へ同期しています。
また、今回はEC2やLambdaへのデプロイは必要ないので、CodeDeployは出番なしです。
(4) S3(Versioning)
堅牢性の高いインターネットストレージ、AWSでも代表格のサービスですね。
S3バケットは2つ用意しています。1つはテスト用、もう1つは本番用(受講者への公開用)です。本番用はバージョニング設定をしておき、もし最新のコードで予期せぬ問題が出たら、旧バージョンへロールバックできるようにしておきます。(幸いにも、まだロールバックが必要な事態には遭遇していません。)
前項でS3へsyncするビルドは実は2パターン用意していて、1回目はテスト用のバケットへ同期し、テスト用バケットで内容を確認後、問題なければCodePipelineを次のビルドへ進めます。2回目のビルドは、テスト用バケットから本番用バケットへの同期を行います。
(2)~(4)の解決のために、参考にしたのは、以下のブログです。
上記の手順を参考に環境を構築し、当初はローカルPCのgitからCodeCommitにpushしていたのですが、Cloud9を使用することでますます快適になりました!
まとめると
全体の構成はこんな感じです。
Cloud9で編集して、git add/commit/push
CodeCommitが更新されます
それをトリガに、CodePiplineが動き出し…
CodeBuildがテスト用のS3バケットにソース一式を同期します。
CodePipelineからSNS経由でメール通知がきて…
「確認」すると、次のBuildが流れ、テスト用バケットから本番用のバケットへsyncします。
これで、最新のデータがS3に同期され、Webで表示したり、CloudFormationから読み込んだりできるようになりました!コードを編集したら、あとはgit pushするだけ。とても簡単です。
Code何兄弟?
さて、こうして今年はCode○兄弟を使い始めたわけですが……利用するにつけ、これ、「CodePipeline」さん…………兄弟の一員っていうより、兄弟たちのお尻を叩いて宿題をしっかりやらせて回る、
「お母さん」
じゃないですかね?という気持ちでいっぱいになります。CodePipelineがくるくる回りだすとなんだか強いシンパシーを感じてしまうのです (本日の執筆担当者は二男児の母)。というわけで、「ウル〇ラ兄弟」、もとい、「Code 4兄弟」は、
「Code 3兄弟 と Codeの母」
が最もしっくりきています。小さく周辺に普及活動を進めてまいりたい所存です。
以下蛇足。
(ウル〇ラファンにとってクリスマスといったら、実のところ「ウ〇トラの母」より「ウルト〇の父」なんですね。アドベントカレンダーとしては、記事の落としどころが悩ましい。)
あっ!Codeシリーズには、CodeCommit、CodeDeploy、CodePipeline、CodeBuildに加えて実はもう一つ、〇ルトラの星、ではなく……
「CodeStar」
というサービスがあるのでした!クリスマスツリーのてっぺんに星を飾るのは、家長の役割だそうです。もうおわかりですね。CodeStarこそ「Codeの父」。
皆様、よいクリスマスを!