このページの本文へ

JAWS-UG中国・四国勉強会レポート 第6回

クラウドの開発・運用に関わる責任分界点の話題をたっぷりと

AWSによるDevOpsの考え方とプラクティスをAWSJ藤原さんが例示

2017年05月23日 07時00分更新

文● 重森大

  • この記事をはてなブックマークに追加
  • 本文印刷

印象としてはDevOpsづくしだった第7回目のJAWS-UG広島。今回はAWSJ 藤原吉規さんのセッション「AWSで実現するDevOps」のレポートをお届けする。藤原さんが登壇する直前のセッションでは、Wardish,LLC 三戸 鉄也さんが現場目線でDevOpsについて語ってくれた。それに対して藤原さんのセッションはある種、教科書的な内容と言える。ある意味で正反対の視点からDevOpsが語られた聞き応えのある勉強会だった。

DevOpsは文化+実践+ツールからなり、顧客と共に取り組むべき課題

 AWSの肩書きを持ってDevOpsを語るということは、大本営発表であり、ひとつの正解を示すセッションと捉えて間違いはないだろう。とはいえ、藤原さんも前職まではスタートアップ企業でAWSを使う側に立っていた訳で、さまざまな経験をしてきたに違いない。教科書的な解答であるだけではなく、ベストプラクティスのひとつと信じるものを紹介してくれたはずだ。だって藤原さんは何も語らなかったが、きっといろいろと大変な目にあったのだろうと思うから。いやきっとそうに違いない。DevOpsがきちんと考えられておらず、困った経験があったのだろうな。あの会場にいたみんながそう感じたはずだ。藤原さんは何も語らなかったが(大事なことなので2度)。しかし飽くまで、教科書的な切り口でセッションはスタートした。

「ビジネスのスピードが高まっている上に、何が当たるかわからないので、素早い変化への対応が必要になっています。そこで重要視されているのがDevOpsです」(藤原さん)

AWS ソリューション アーキテクト 藤原 吉規さん

 DevOpsが求められる背景をそう語ってから藤原さんは、「DevOpsとは文化、実践、ツールで成り立っている」と定義した。その上で文化の面では、コラボレーションの必要性が高まっていること、営業担当者も含めてエンドツーエンドでワンチームとしてビジネスに当たらなければならないことなどを挙げた。

「実践面では、DevOpsの文脈で語られるツールや開発手法が乱立しているのが現状です。その中でも重要なのが、CI(継続的インテグレーション)とCD(継続的デリバリー)という考え方です。このCIとCDを可能な限り自動化して、デリバリーし続けることが大切です」(藤原さん)

 求める結果を事前に定義して、コードの品質と機能を検証し、改善しては最新版をデリバリーする。改善の繰り返しがCIであり、最新で最良のものを提供し続ける繰り返しがCDだ。繰り返し作業による負荷軽減とミス撲滅のために、できる限りの自動化を目指すべきというのが、藤原さんの考えだ。それもアプリケーションだけではなく、インフラの構築を含めて自動化すべきだと言う。

DevOpsを実践するためには継続的インテグレーションと継続的デリバリーが必要

「全部じゃなくてもかまいません。手順が固定化されている部分は自動化しやすいので、そういうところから順次自動化して、範囲を広げていくといいでしょう。インフラを含めて、定義や設定をアプリケーションコードのように扱い、バージョンコントロールしていく必要があります」(藤原さん)

 CI/CDを実現するためには、アプリケーションと同様にインフラもテストし、確認を繰り返していくことが重要だ。そのために使えるAWSの機能として、CodeDeployとCloudFormationが紹介された。アプリケーションだけではなくインフラのデプロイも同じように自動化できること、YMLテンプレートなどを確認して自動的にデプロイできることなどが機能的なメリットだ。

 ツールからDevOpsを見た場合には、ソフトウェア開発のライフサイクルと同様に、インフラのパフォーマンスも計測して無駄やボトルネックを取り除ける環境づくりを目指すべきとのこと。アプリケーション、インフラそれぞれのパフォーマンスを可視化できるようにしておかなければ、DevOpsがもたらす効果を最大化できない。

「DevOpsのベネフィットを得られるような開発のライフサイクルを取り入れることができるかどうかは、企業の文化による部分も少なくありません。ツールを導入するだけでは意味がなく、顧客を巻き込みながら取り組まなければなりません」(藤原さん)

DevOpsとはソフトウェア開発のライフサイクルを回し続けること

DevOpsによってクラウドならではのメリットを得られる

 では実際にAWSを使ってDevOpsを取り入れた開発環境を整えようと思ったら、どのようなサービスをどのように活用していけばいいのだろうか。

多くのサービスでAPIが用意されており自動化が可能

「AWSには90以上のサービスがありますが、そのほとんどにAPIが用意されています。APIだけではなく、各種環境や言語に対応したSDKも提供されており、デプロイの自動化などインフラの高度化がしやすい環境はすでに整っていると言っていいでしょう」(藤原さん)

各種開発環境や開発言語向けにSDKも提供されている

 AWSには機能が類似していたり重複していたりするサービスもあるので、慣れたツールや使いやすいものを選んで使えるのもメリットだと藤原さんは言う。その上で、EC2 Container Serviceへの継続的デプロイについてデモンストレーションを行なった。デモンストレーション環境でスクリプトを変更してコミットすると、CodePipelineがコードの変更を検知して自動的にDockerのビルドがスタートした。ビルドが終わればCloudFormationにより自動的にデプロイされる仕組みになっている。複数のEC2インスタンスでクラスターを組んでいる場合でも、複数のコンテナを一元管理できる。Dockerコンテナを複数のEC2に分散配置したり、Elastic Load Balancingの設定も連携して管理可能だ。

実践方法の一例として、ECSへのCI/CDを想定したデモンストレーションを実施

 もちろんこのデモンストレーションで示されたのは、数ある実践方法、サービスの組み合わせの一例でしかない。重要なことは手法そのものではなく、CI/CDを開発現場に取り入れることにある。そのためには先に藤原さんが述べているように、使い慣れたツールを選べばよい。それでもどこから手をつけたらいいかわからないという人のために、藤原さんはとっかかりのヒントもくれた。

「自動化で最初に目指すべきところは、自動ロールバックではないかと思います。自動ロールバックは、アップデート失敗時におけるもっとも速いリカバリメカニズムと言えます。まずはロールバックして、その後にログやデータを収集してデバッグして次の開発につなげることができます。もちろん、モニタリングやログ収集、アラート設定などによる状況の可視化が前提となることは言うまでもありません」(藤原さん)

 教科書のような藤原さんのDevOps講義と、現場から考えた三戸さんのDevOpsの必要性や効用。これらを合わせて考察していけば、自社に合うDevOpsアプローチが見つかるかもしれない。そんな、JAWS-UG広島の勉強会だった。

■関連サイト

カテゴリートップへ

この連載の記事