はじめに
am 8:45 の時点で行列になっていると聞いて出遅れたことを悟り、家からのライブストリーミング配信から始まった de:code 2019。
もったいないかもしれないですが、AWS re:invent や Google Cloud Next などでも基調講演は基本的にリモートから見るようにしています。(字幕、腰、トイレ的な観点で)
ということで、Microsoft de:code 2019 に初めて参加してきました。システム本部技術開発室の放地宏佳です。
自分は普段、社内でクラウドアーキテクトをしており、GCP 及び AWS を活用したアーキテクチャを考えています。
今回、普段クラウドを触っている人間として、「CD07 AWS 技術者向け Azure サーバーレス」を聞いて、他社クラウドを触っている人がどのようなことを感じ取ったかについてお話できればと思います。
免責事項となりますが、僕自身は Azure を普段触っておらず、また、セッション情報以上に各サービスの詳細には調べておりませんので、事実とは異なることがあることご了承ください。
資料の公開があるとのことでしたが、残念ながらサインインした状態でしか資料を見れないようです(6/14時点)
decode:2019 のマイページより「セッション資料及び動画の閲覧」から 「CD07」 を検索することで資料を見ることが可能です。
セッションについて
こちらの「CD07 AWS 技術者向け Azure サーバーレス」のセッションについては、主に Azure Functions を中心に、その周辺を取り巻くサービスについての説明がありました。
スライドにも記載されていますが、主に AWS Lambda からの差分・注意点・学習ポイントについて説明されているものです。
アーキテクチャを選定するにあたって必要な情報がまとまっており、また、開発者に寄り添った内容で、Azure Functions の便利機能を説明されており、技術選定をする人は是非確認するべき内容だと感じました。
以降 PDF のページにそってお話させていただきます。
p5-p10 「サーバレスアーキテクチャ」
サーバレスを用いて構築するアプリケーションについてのまとめをされています。
AWS Lambda と Azure Functions の利用用途が一緒であることを述べて、同じレイヤーで話せることを一番始めに定義されています。
このように俯瞰的なまとめ、また具体的なサービス含めていることから、これ以降のスライドがとてもわかり易くなっています。
また、サーバレスを知らない人にとっても、サーバレスというものでどのようなことが実現できるかのイメージが付いたかと思います。
p13-p17 「トリガーとバインディング」
このトリガーとバインディングという機能。とても良いと感じました。
スライド前項の方でも述べられていましたが、サーバレスなサービスは糊的な感じで、何かと何かをつなげるということが多くあります。
Azure Functions ではこのつなぎ合わせ部分をトリガーとバインディングとして定義できることで、「何を元に、何を出力とするか」というのを明確にすることができるようです。
これは見た目として明確になるのもそうですが、今まで他のサーバレスなサービスを使っていた際に、次の出力を定義するためのコードがエラー処理などを含め、大多数をしめており、実際にやりたいこと以上に労力を割いてたと考えると、レイヤーを分けたこのような機能はとても有用だと感じます。
何を基準に起動するか(トリガー)だけではなく、その処理の中で追加でどういったものが必要なのか(インプットバインディング)その結果、どういったものにデータを書き込むのか(アウトプットバインディング)をきれいに記述できるのは大きなメリットです。
エラー処理については p29 にかかれているように現在サポートされているものは「Azure BLOB Storage」「Azure Queue Storage」「 Azure Service Bus (キュー/トピック)」の3種類となってるとのことですが、こういった機能がサポートされているのであれば、今後増えていくことも期待できますし、何より、リトライや有害キュー(失敗したら退避)などがデフォルトで定義されているとコードに集中できて良さそうです。
Custom Binding も作れるとのことなので(どこまでできるかわからないものの)、こういったよくある Input/Output を個別に切り出すことができるのは多くのメリットがあると感じました。
また、 p14 の例では、複数の Functions を扱うようなディレクトリ構成を取っています。
イベントドリブンな処理であれば、これらの必要度は低いのですが、ユーザからのリクエストを受けるような Web Application においては、それぞれが独立していることは少なく、同じリソースに対する処理であったり共通的な処理というのが書かれることが多数ですので、はじめからどのような構成にすればいいか悩むことなく、書き始めることができると感じました。
p18-p25 「ホスティングプラン」
Azure Functions には「従量課金プラン」と「App Serviceプラン(固定)」の両方が提供されているようです。
Functions を通常のインスタンスで起動できるというプランのようです。また、それらは互いに変更可能のように見えました。
例えば、途中から要件がかわって固定IPが必要になった。1 request に対して巨大な処理をしなければいけなくなった。
といった開発途中で起こりうる変更についても、フレキシブルに対応できるのはとても便利に見えます。
それも独立したサービスではなく Azure Functions の中のオプションとして設定できるので、とても気軽です。
もちろん最近は Container をそのままサーバレスで動かすということもできるようになってきていますが、じゃあそれをサーバレスからサーバがある環境に移すとなると、アプリ側やインフラ側で一定の対応が必要でした。
それがなく、起動プランとして選択できるのは多くのメリットを享受できるのではないでしょうか。
また、 Premium プラン というものも今後出てくる(現在はプレビュー)とのことで、こちらではよくあるコールドスタート問題の解決であったり、より詳細なスケーリングの制御ができるようです。
自分は Google App Engine のスケーリングが好きなのですが、 Premium プランはそれと同様な概念に見えましたので、とても期待が高まっています。
p43-p48 「Durable Functions」
Durable Functions は「ステートフル関数を実現する拡張機能」として説明をされました。
サンプルを見ただけでは、基本的にはプログラミングにおける関数を分けただけで、ちょっとメリットがわからなかったですが、
聞いているうちに、おそらくこういうことなのかなってことを思いました。
・別の Azure Functions へ処理を委譲することによるスケーラビリティ
・それらのエラー処理、フロー処理の簡略化 (内部状態の保持)
p47 のサンプルにも JavaScript の Promise の例が書かれていましたが、それを裏側のサーバリソースを気にすることなく(単一インスタンスではなく)書くことができるのが、 Duable Functions なのでは無いでしょうか。
Durable Functions での Orchestrator とはフローを記述するもの。そして、そのフローにおいて、余計なことを気にすることなく、バインディング同様にコードに集中できるソリューションだと。
クラウドサービスは「何でもできるようになっている」反面、色々なものを新しく学ばないといけないというのが難しいところですが、Durable Functions は Azure Functions + α の知識でフロー処理をかけるのでとても強力だと感じました。
p50 「Microsoft Learn」
最後に紹介されたのが Microsoft Learn でした。
アカウントで不要で無料でサンドボックス機能を提供してくれるものです。
すぐに作れるっていうのがクラウドの利点ではあるのですが、技術検証や本当に Azure 使うのかといったことを検証する際には、アカウントの作成などをしなければ行けないわけですが、 そういうのがなく、とりあえず触ってみるっていうのができるのはかなりの利点ではないでしょうか
まとめ
さて、普段 AWS / GCP しか使っていない自分が本セッションを聞いて色々想像してみました。
Azure Functions はその一つのサービスで色々なことができることから、アプリケーション開発者としてはかなり強力なサービスだと感じます。
すぐにでもアプリケーションを書き始めることができる。ロジックを書くのに集中する仕組みがある。そして要件変更にも対応する事ができる。このようにアプリケーション開発をする人に寄り添ったサービスなのではないでしょうか。
こういったイベントでは Ask The Speaker と呼ばれる直接発表者の方と話すことができる場も設けられているので、色々聞いてみて、色々質問してみて、色々考察してみると楽しいと思います。
最後まで読んでいただき、ありがとうございます!
この記事をシェアしていただける方はこちらからお願いします。