
エンジニアの山本です。
初日のサバイバルゲームに続き、社員旅行(合宿?)2日目は朝から大忙しでした。
早朝から数人で近くのビーチに行って泳ぎ、みんなで朝食の準備。
朝から山盛りの朝食をとったあとは、ワークショップです。
内容的にちょっと堅苦しい感じになりますがご了承ください。
ワークショップの主な議題は以下の通り。
- 会社方針
- DevOps
- DesignOps
その中から、DevOpsについて少しお話します。
DevOpsとは
一般的にDevOpsは、
開発者と運用者が協力しあう開発手法
と定義されています。
Development(開発) + Operations(運用) = DevOps ですね。
一見すると当たり前の事のように思えますが、次の理由からこの両者には大きな壁があります。
- 開発者:新しいサービスを作り出す攻めの姿勢
- 運用者:安定したサービスを提供する守りの姿勢
サービス(ビジネス)の価値を高めるという共通の目的があるのだから、協力しあってより良いサービスを作りたいですよね。
そこで登場するのがDevOpsを支援するツールや技術です。
DevOpsツールを導入すれば、コード修正後のテスト、デプロイ、リリースといった、これまで手順書を見ながらポチポチとやっていた手作業を、ほぼ自動化する事が可能です。
自動化による冪等性(誰が何度やっても同じ結果が得られる)が保証できれば、安心してリリースできるし、安心して運用できますね。
毎回神経を使う部分を自動化する事で、開発に注力する事ができます。
DevOpsを語る上で重要な要素が2つあります。
- 継続的インテグレーション(CI)
- コード修正後のビルド、テストを自動化
- 継続的デリバリー(CD)
- CIに加えて、デプロイ、リリースまでも自動化
※両方をまとめて、CI/CDと表現する事もあります。
DevOpsとCI/CDの関係をまとめたのが下図です。

AWSにおけるDevOpsの一例
最後に、AWSにおけるDevOpsの一例を紹介しておきます。

※ 上図はテストプロセスを含んでいません。
流れ
- 開発者がコードを修正し、Githubの特定ブランチにプッシュ(ここは手動)
- Githubのコード一式を取得してS3へアップ(CodePipeline)
- S3のコード一式を取得してビルド(コード、Docker)し、DockerイメージをECRに登録(CodeBuild)
- ECRの新しいDockerイメージを使って、Blue/Greenデプロイ(CodeDeploy)
- Green環境で動作確認を行い、問題なければ切り替えを実施(CodeDeploy上で手動/自動)
あくまで一例ですが、このような感じでAWSの各サービスを使えば、比較的簡単にDevOpsが実現できます。
今回は簡単な説明になってしまいましたが、機会があればもう少し突っ込んだ内容で書きたいと思います。