IT・ビジネススキル・人材育成の情報を掲載 | 人材育成のトレノケート【公式ブログ】

Code3兄弟?4兄弟?いえ、きっと……

作成者: 三浦 美緒 (みうら みお) |2018-12-20

こんにちは、ラーニングサービス本部 テクニカルトレーニング第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. どこからでもコードを編集したい
  2. 更新したコードを手軽にアップロードしたい
  3. テスト用と受講者公開用を分けて公開・管理したい
  4. 失敗したとき手軽にロールバックしたい

<解決策>

 (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)の解決のために、参考にしたのは、以下のブログです。

https://aws.amazon.com/jp/blogs/news/continuous-delivery-of-nested-aws-cloudformation-stacks-using-aws-codepipeline/

上記の手順を参考に環境を構築し、当初はローカル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の父」。

 

皆様、よいクリスマスを!

>> Trainocate Advent Calendar 2018 に戻る​​​​​​