Microsoft ハックフェスト
はじめに
こんにちは、ソフトバンク株式会社 IT本部の丹下・朱・髙市・竜田です。
先日、日本マイクロソフトのJavaエバンジェリスト、クラウド・アドボケイトの寺田佳央さんにAzure DevOps、Azure Kubernetes Service(AKS)を利用したハックフェストを開催していただき、我々のチーム4名で参加してきました。こちらのDevOps Hubの場をお借りして共有させていただければと思います。
ハックフェストの開催背景
我々が所属するIT本部は、主にソフトバンクの通信事業を支えるITシステムの開発、保守、運用を担っています。通信事業はユーザーの生活を支える重要なインフラですので、これまでは自社のデータセンターのオンプレ環境を利用したキャリア品質のシステム構築がメインでしたが、最近ではシステムの要件的にクラウドに適したものについては、バランス良くクラウドの利用も検討しています。
また、我々のチームでは2年前からアジャイル開発に取り組んでおり、これまではMartin Fowlerが所属することで有名なThoughtWorks社のMingleというカンバンツールを使用してきました。最先端のアジャイル開発を実践するThoughtWorks社が提供するアジャイル開発向けのプロジェクト管理ツールだけあって、バーンダウンではなくバーンアップ、タスクのアサインはペア設定がデフォルトである等、非常に使いやすく、カスタマイズ性も高かったのですが、残念ながらMingleは今年(2019年)の7月でサービスが終了してしまいました。そのため、様々なカンバンツールを検討した結果、現在は昨年の9月に発表されたAzure DevOpsのAzure Boardsの機能を利用しています。
Azure DevOpsではAzure Boards以外にも、JenkinsのようなCIツールであるAzure Pipelines、GitリポジトリであるAzure Repos、Nexusのようなパッケージを管理するAzure Artifacts等のアジャイル開発を行う上でのツールチェーンが一通り揃っていることが特徴です。しかしこれらの機能は未だ活用できておらず、Azureを含めたツールチェーンの利用を検討していこうという段階でした。また、後述する我々の開発していたアプリケーションは、顧客ニーズがどこにあるのかよくわからない特性のため、仮説検証型で進めていきましたが、時間をかけて恒久的な環境を用意するオンプレミスよりも、迅速に環境を構築でき拡張や破棄も容易なクラウド環境が適しているのではないかと課題を感じていた時期でもありました。
そこでこれらの問題を解決するため、AzureとAzure DevOpsを含めたツールチェーンの構築に踏み切ることにしました。我々の所属するIT本部では、開発言語としてJavaをメインで使用しています。AzureではIaaSである仮想マシンから、PaaSであるAzure Web Apps、FaaSであるAzure Functionsと様々なものがJavaの実行環境として利用することができますが、今回はAzure Kubernetes Service(AKS)を採用することにしました。AKSを採用した理由としては以下のような点があります。
・今後変更が頻繁に行われ、バージョンアップ等の機会も多いと予想された
・可動させるサービスは一般的なWebアプリケーションであり、
大量のCPUを消費するようなものではない
・対象のシステムがそこまでミッションクリティカルではなく、
技術的な挑戦が可能だった
・技術トレンドとしてKubernetesは熱狂的なものがあり、将来性も高い
このあたりは、ハックフェストの後に公開された寺田さんのブログ「Kubernetesの導入時に考えるべきこと」にも合致していたかと思います。AKS + Azure DevOpsのツールチェーン構築の際には、オルターブース様に相談させていただき、
寺田さんとのハックフェストを開催いただけることになりました。我々、ソフトバンクのIT部門で広く利用されている言語はJavaであるため、日本でも未だ5名しか居ないJavaチャンピオンの一人であり、かつ日本マイクロソフトでAKSの普及に尽力されている寺田さんとのハックフェストは非常に貴重な機会となりました。
ハックフェストのテーマ
ハックフェストを実施するに際しては、題材となるテーマを決めておき、そのテーマをハックフェスト期間中に実装します。今回、我々がテーマとして選んだのは、全国のソフトバンクショップのスタッフがiPadから利用するシステムの一機能です。
この機能はそれほど規模が大きいものではないため、Spring BootとSpring MVCでモノリスなアプリケーションとして実装されており、すでにソフトバンクのオンプレ環境にシステム構築が完了しており、ユーザートライアルを予定しています。今回はこの機能のViewとAPIの部分をコンテナに分離し、AKS上で可動させ、さらにそれをAzure DevOpsのPipelinesからデリバリーし、Azure Monitorでモニターできるようになるまでの一通りの流れをハックフェストで実施しました。
また、今回のコンテナ化に際して、一般にJavaの弱点であるコンテナサイズとスピンアップタイムの遅さを克服するために、API部分にはGraalVMを利用したQuarkusの導入にもチャレンジしてみました。
ハックフェストの流れ
ハックフェストは以下のような流れで実施しました。
1日目 ... アプリケーションの作成 / AKSの作成 / AKSへアプリケーションをデプロイ
2日目 ... 1日目の復習 / ACI / パイプラインの作成
3日目 ... Azure Application Insights / Ingress
4日目 ... Ingressとカスタムドメインの連携 / Traffic Manager / 西・東日本での構成
これらの作業を寺田さん、オルターブースの加藤さん、花岡さん、弊社開発チームで、モブプログラミングで行いました。モブプログラミングでは大きなディスプレイにPCのディスプレイを映し、1人がドライバー、その他の方はナビゲーターとして作業を進めていきます。ドライバーは弊社開発チームがローテーションしながら担当し、寺田さん、加藤さん、花岡さんはナビゲーターに専念する形となりました。
寺田さんが開催するハックフェストは、以前は有識者の方がどんどん知識を教えていくという形式をとっていたそうなのですが、ハックフェストが終わってから開発者だけで以降の作業がなかなか進めることができないという課題があり、このようなモブプログラミングの形式を実践するようになったそうです。確かにハックフェストは、モブプロによるティーチング → 実践 → ティーチング → 実践 というサイクルを繰り返すことで、知識の定着がより深くできたと感じます。一度ティーチングを行った作業は、あえて指摘せず、時間がかかっても開発チームだけでトラブルシュートを試みさせていただき、「これなら自分たちでもある程度は進められそうだ」という感覚をハックフェスト中に得ることができました。
また、Azure Application Insightsを検証している際に、なかなか期待した結果にならない場面があったのですが、その際は寺田さんがAzure Application Insights開発者に直接お問い合わせしていたのが印象的でした。Azure Application Insightsに限らず、AzureやAzure DevOpsの仕様変更はとてもハイスピードに行われるのでどんどんフィードバックをして欲しいとおっしゃっており、Azureもまだまだ成長段階であり、更に良くなっていく可能性を秘めていると感じました。
AKS、Azure DevOpsを触ってみて
ハックフェストに向けて「しくみがわかるKubernetes Azureで動かしながら学ぶコンセプトと実践知識」などのAzure、Kubernetesの書籍を読んで予備知識を付けた上で臨みましたが、Azure Portalから利用できるAzure Cloud Shellは、azコマンド、kubectl等が最初から利用可能なだけでなく、Visual Studio Codeの機能も組み込まれており、非常に使いやすいと思いました。
正直、Kubernetesの操作は、このCloud Shellだけで事足りてしまうのでは?と思うほどで、実際にハックフェスト中のほとんどの作業はこのCloud Shellで実施していました。
また、次に印象に残ったのは、Azure Container Instances(ACI)上にコンテナをスケジューリングできる、Virtual Nodeの機能です。AKSにもクラスタのノードをスケーリングする機能がプレビューで公開されていますが、ノードを用意していなくとも、迅速にコンテナをバースティングできるこの機能はAzureならではであり、積極的に活用していきたいと感じました。
ただ、残念ながらAzure Application Insightsについては、我々が今回導入にチャレンジしたQuarkusが先走りすぎたのか、GraalVMのネイティブ・コンパイルのタイミングでSSL関連のエラーが出てしまい、今後の課題となりました。ただ、Azure Application Insights、Azure Monitorでデプロイしたアプリケーションのメトリクスが数分後にモニタリングできるようになっており、これまでのEFKスタックでの監視、運用からかなりの改善が期待できるのではないかと思います。
さらに、Azure Pipelinesから、ソースコードをGitにプッシュすると、Buildパイプラインでソース、およびコンテナをビルドしてコンテナをAzure Container Registory(ACR)にプッシュし、さらにReleaseパイプラインでAKS上にコンテナをデプロイするパイプラインの構築に取り組みました。商用環境へのデプロイに到達すると承認者にメールが飛び、承認者がメールから承認することで、商用環境へのデリバリーを簡単に実現することができ、今後のDevOpsの実現に向けて、使えそうな機能だと思いました。
さらに、Azure DevOpsには、Build/Releaseパイプラインに関する、ウィジットも用意されており、開発状況を一箇所で把握できるダッシュボードを今後、実現していければと思います。特にAzure DevOpsにはとても充実した機能があるのですが、いざ何も知らない状態で試してみようとなると何から初めていいのかわからず、お手上げになってしまうということがあったため、今回のハックフェストで一から教えていただけたのは非常に良かったと感じています。私達と同じような悩みを持っている方も一定数いるかと思いますので、習得した知見はどんどん外に発信して情報交換をしていければと思いました。
このようにAzure DevOps、AKS、Azure Monitor等で、DevOpsを構成するツールチェーンを一通り構築してみましたが、Azure DevOpsやAzure Application Insightsは他のクラウドでも利用はできますが、これまでVisual StudioやTeam Foundation Server等の開発者向けの製品を数々送り出してきた、マイクロソフトの強みを感じました。正直、Kubernetes環境だけでみれば、GoogleのGKE、Stackdriverも魅力的ですが、AzureだけでDevOps に必要と思われるすべての機能が賄えることは大きな魅力であると言えます。
最後に
ハックフェストの機会を作ってくださいました寺田さん、オルターブースの小島さん、4日間技術的なサポートをしてくださったオルターブースの加藤さん、花岡さん、本当に有難うございました。
一般的なハンズオンのようにただ教わるだけでなく、ハックフェスト中に社内のメンバーだけでAKSクラスタの構築やパイプラインの構築などに取り組む機会もいただき、基本的な技術の定着まで行うことができました。また、多数の企業へのAKSの導入経験があるエンジニアの方々から、公式のドキュメントや書籍などからは得られない、トラブルシューティングの手法などのAKSの最新の実践的なノウハウを学ぶことができました。今回のハックフェストは今後クラウドネイティブなアプリの開発に取り組んでいく上で、非常に有意義な経験になってくると感じました。
また、ハックフェストは品川の日本マイクロソフトのオフィスで開催いただきました。我々の拠点である天王洲から歩いてすぐのロケーションですが、普段の業務から解放され、ハックフェストに集中することができ、よい気分転換にもなりました。今後、このハックフェストで得られた経験・知見を元に、開発中のシステム、および次の案件でもクラウドネイティブ化を進め、また別の機会に事例報告をさせていただければと思います。
この記事の著者:ソフトバンク株式会社 IT本部 業務支援システム統括部 CN支援システム開発部
CN支援システム開発部では、顧客体験を改善するために仮説検証型のアプローチで、クラウド、アジャイル開発を実践し、
エクストリームなチームを目指して日々邁進中です。
- 関連キーワード:
- Microsoft Azure
- コラム
DevOps Hubのアカウントをフォローして
更新情報を受け取る
-
Like on Facebook
-
Like on Feedly