テクニカルトレーニング第1部の三浦です。Services(AWS)の認定インストラクターをしています。AWSの開発系ツールのサービス群、「CodeCommit」、「CodeDeploy」、「CodePipeline」は、しばしば「Code3兄弟」と呼ばれることがあります。これに2016年「CodeBuild」というサービスも加わり、「Code4兄弟」?と⁮言われることも。アソシエイト」資格を取得したかったこともあり(2018年10月に無事取得)、ツールの学習がてら「Cloud9」とともに使い始めてみました。いうことで、この2018年はこれらのツールにもっぱらお世話になっています。私のように、「開発系ツールかぁ」と敬遠している方もいらっしゃるかもしれません。そこで本日は、Code兄弟思ったより気軽に、そして便利に使えますよ、という記事を書いてみました。AWS」という運用担当者向けの中級コースを担当しています。CloudFormationのJSONのテンプレートを使用したAWSリソースの展開手法などを学習します。教室のPCで書いていたコードを忘れて帰ってしまったり......家でデバッグしたコードをS3にアップロードし忘れて来てしまったり......業務用PCにだけ作業途中のコードがあり、別の場所で作業の続きをできなかったり......(忘れてばっかり!)そんな私を助けてくれたのが、Cloud9とCodeCommit、そしてCodePipelineとCodeBuildです。Code」と言われる昨今、インフラエンジニアにとっても、これらの開発ツールは非常に役立ちます。Cloud9さまざまな言語に対応した統合開発環境です。ブラウザからインターネットに接続できて、AWSのマネジメントコンソールにサインインできれば、あとはいつでも、どこからでも、前回の作業状態の続きから再開できます。使い始めたら驚異的に便利でした。東京リージョンではまだサービスリリースされていないので、ダッシュボードはシンガポールリージョンを利用しています。本体(EC2)は東京リージョンです。CodeCommitAWS上にgitレポジトリを作成・管理できます。Cloud9上で更新したコードは、gitコマンドを使って差分をレポジトリにアップロードできます。いつ・何を更新したのかの履歴を確認でき、バージョン管理がとても楽になりました。CodeBuildCodePipelineを使えば、継続的なデリバリーを自動化できます。CodeCommitの更新と連動してCodePipelineが動作し、CodeBuildやCodeDeployを順次起動していくことができます。CodeBuildは、CodeCommitなどのレポジトリに配置されたコードを、設定ファイル(buildspec.yml)で指定されたビルドコマンドで、実行可能プログラムにビルドし、テストしてくれるツールです。指定し、CodeCommitのレポジトリのファイル群をS3へ同期しています。今回はEC2やLambdaへのデプロイは必要ないので、CodeDeployは出番なしです。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を使用することでますます快適になりました!まとめると全体の構成はこんな感じです。add/commit/pushCodeCommitが更新されますそれをトリガに、CodePiplineが動き出し...CodeBuildがテスト用のS3バケットにソース一式を同期します。CodePipelineからSNS経由でメール通知がきて...「確認」すると、次のBuildが流れ、テスト用バケットから本番用のバケットへsyncします。