DevOpsって何なのかを今更学ぶ

# はじめに
今の職場では「DevOpsはもう古い。DevSecOpsはじめるよー！」という状況なんだけど
そもそも「DevOps」を知らない。検索しても「これがDevOpsじゃーい！」っていう力強い説明は見つからず
某サイトでDevOpsを実践する職場を取材するというなんとも「おお！これは期待！」という
記事を見ても、その取材先では悉く「うちはDevOpsを意識したことはありません」とのこと。

ひょっとしたら「DevOps」とはただの「言葉」にすぎないのかもしれない…。
そんな悲しい気持ちになっていたところ、ありがたいことにAWSさんがAWSさんなりの
DevOpsの解釈でこれを支援するツールを紹介しているので、これをDevOpsのヒントにしたく
わかったことをメモしよう。

# 2019/11/27時点の、DevOpsの解釈
ちょっと拗ねた考えだけど、まずはありのままの解釈はコチラ
個人的には今のところ全くキラキラした言葉ではない。
・開発と運用を一緒くたにやる
・要するに開発が運用をやる形。今の会社でやってるいつもの絶望的な状況がDevOps。

# 参考URL
今回はＡＷＳさんの「DevOpsとは？」を参考にします。
ささくれた自分の解釈をきっとキラキラしたものに変えてくれるはず。
https://aws.amazon.com/jp/devops/

# DevOpsとは？ wikipediaより

>DevOps（デブオプス）は、ソフトウェア開発手法の一つ。
>開発 (Development) と運用 (Operations) を組み合わせたかばん語であり、開発担当者と運用担当者が連携して協力する（さらに両担当者の境目もあいまいにする）開発手法をさす。
>厳密な定義は存在しておらず、抽象的な概念に留まっている。
>ソフトウェアのビルド、テスト、そしてリリースの文化と環境を以前よりも迅速に、頻繁に、確実に発生する確立を目指している。
>また、DevOpsにビジネス部門を追加したBizDevOpsというワードも広がりつつある。
[wikipedia](https://ja.wikipedia.org/wiki/DevOps)より

わかったこと
・DevOpsは「開発手法」
・「開発担当と運用担当が連携して協力」することが前提。
・目的は「迅速、頻繁にソフトウェアをリリースすること」

なるほど。別にエンジニアが楽になるとは言っていない。
まだキラキラした感じはしない。

# アジャイルと似てるような気がする…
「頻繁にリリースって要するにアジャイル開発と何が違うの？」と思ったが
AWSの定義するDevOpsモデル（下図）を見た、自分の解釈としては

アジャイルはリリースをBUILD⇒TEST⇒RELEASEを高速に回すけど
MONITOR⇒PLANの観点は無い（というかそこは範囲外）というような気がした。

![DevOps_feedback-diagram.ff668bfc299abada00b2dcbdc9ce2389bd3dce3f.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416263/e819d735-67f3-3f34-ce54-8924b81b5b2e.png)

なので、、、
　開発⇒ソフトウェアを迅速にリリースする
　運用⇒監視して、改善案を提言する
という両輪を回すことでDevOpsは完成を見るのかな？と思いました。

少しだけキラキラした未来が見えそうな気がしてきた。

# で、キラキラするために必要なモノ
開発と運用が手を取り合うキラキラした未来にするためには
https://aws.amazon.com/jp/devops/what-is-devops/
の「DevOpsの利点」と書いている、この文章を「DevOpsを実現するために必要なモノ」と読み替えると
しっくりくるような気がする。

そんなわけで読み替えて、さっくりまとめるとこんな感じか。
・スピード　　⇒　素早く更新を反映する。
　　　　　　　　　　実現手法：「継続的デリバリー」、「マイクロサービス」
・迅速な配信　⇒　ビルドからデプロイまでソフトウェアのリリース処理を自動化する。
　　　　　　　　　　実現手法：「継続的インテグレーション」、「継続的デリバリー」
・信頼性　　　⇒　それぞれの変更が機能的で安全であることをテストする。
　　　　　　　　　　実現手法：「継続的インテグレーション」、「継続的デリバリー」　　　　　　　　　
　　　　　　　　　 リアルタイムのパフォーマンス情報を常に把握する
　　　　　　　　　　実現手法：「モニタリング」、「ロギング」
・拡張性　　　⇒　規模に応じたインフラストラクチャと開発のプロセスの運用と管理を行う。
　　　　　　　　　　実現手法：「Infrastructure as code」
・共同作業の向上　⇒　開発チームと運用チームは緊密に共同作業し、多くの責任を共有し、それぞれのワークフローを組み合わせる。
・セキュリティ　⇒　制御を保持してコンプライアンスを順守しながらすばやく移行する。
　　　　　　　　　　実現手法：「Infrastructure as code」

自社はどうかというと、「モニタリング」「ロギング」はまぁまぁイケてるかもしれないけどほかの要素はちょっと怪しい。

# キラキラな未来のための実現手法はAWSだと何を提供しているのか？
宣伝臭い感じになるけど具体的なものがあるとイメージしやすいので。。。

## 実現手法：「継続的デリバリー」、「継続的インテグレーション」
|サービス|概要|
|:-------|:-------|
|AWS CodePipeline|ソフトウェアリリースのワークフロー|
|AWS CodeBuild|コードのビルドとテスト
|AWS CodeDeploy|デプロイのオートメーション|
|AWS CodeStar|統合 CI/CD プロジェクト|

## 実現手法：「マイクロサービス」
|サービス|概要|
|:-------|:-------|
|Amazon Elastic Container Service|Docker プラットフォームの運用|
|AWS Lambda|サーバーレスコンピューティング|

## 実現手法：「Infrastructure as Code」
|サービス|概要|
|:-------|:-------|
|AWS CloudFormation|テンプレート化されたインフラストラクチャプロビジョニング|
|AWS OpsWorks|Chef による設定管理|
|AWS Systems Manager|設定管理|
|AWS Config|Policy as Code|

## 実現手法：「モニタリング」、「ロギング」
|サービス|概要|
|:-------|:-------|
|Amazon CloudWatch|クラウドとネットワークのモニタリング|
|AWS X-Ray|分散トレース|
|AWS CloudTrail|アクティビティと API 使用状況の追跡|

# 終わりに（今の解釈）2019/11/27時点
・DevOpsは「開発手法」。アジャイルに運用の観点を加えたようなイメージ
・DevOpsは「サービス実装、パッチあてを高速に実施する」ことを至上目的としており「業務改善」は副産物
・開発⇒ソフトウェアを迅速にリリースする
・運用⇒監視して、改善案を提言する
・これを実現するためには「自動化」は必然

まだ具体的な道のりはみえないものの
DevOpsが完成した暁にはキラキラした未来が待っている、
という人がなぜそう言えるのかはわかるような気がしてきた。

それと自社のインフラ部隊は手動依存が強いけど、
いわゆるDevOpsができてるような気がしてきた。
ただし手動依存、人依存なので一部のメンバーが地獄のような大変さだけど…。

# オマケ：DevSecOpsについて
参考：https://www.itmedia.co.jp/enterprise/articles/1802/14/news009.html
DevSecOpsはDevOpsを更に推し進めて「セキュリティ監査」をDevOpsの各工程に差し込んだような形に見える。
なのでDevOpsが成立してから着手しないとなんだかよくわからなくなってしまうような気がしてきた。