Azure Functions 向け Python サポートの一般提供に関するお知らせ

2019年8月19日 に投稿済み

Principal PM Manager, Azure Functions

Azure Functions の Python サポートが一般提供となり、データ サイエンスと機械学習、自動リソース管理などにまたがる実稼働ワークロードをホストすることができるようになりました。クロスプラットフォームのオープンソース Functions 2.0 ランタイムで実行する Python 3.6 アプリを開発できるようになりました。そしてこれをコードまたは Docker コンテナーとして、Azure の Linux ベースのサーバーレス ホスティング プラットフォームに公開できます。このスタックは、General Electric Aviation や TCF Bank など、既に Python で記述された Azure 関数をサーバーレスの実稼働ワークロードに使用しているお客様による、早期導入者のソリューション革新の原動力となります。皆様の変わらぬご協力に感謝いたします。

ブロックチェーン分析エンジニアリング ディレクターである David Havera 氏は次のように述べています。「GE Aviation Digital Group の願いは、バックエンドのデータ エンジニアリングからフロントエンドの分析と機械学習まで使用できる共通言語を持つことです。Microsoft はプレビューだった Azure Functions における Python のサポートを実際に利用可能なものにし、TRUEngine プロジェクトで現実世界のデータ サイエンスとブロックチェーンの実装を可能にして、このビジョンのサポートに貢献してきました。」

Azure Functions の Python プレビューを通じて、Microsoft はコミュニティからフィードバックを集め、より簡単な作成エクスペリエンスを構築し、慣用的なプログラミング モデルを導入し、Linux 上のより高性能で堅牢なホスティング プラットフォームを作成しました。この投稿は、Azure Functions での Python のサポートについて知っておく必要のある項目を 1 か所にまとめた要約であり、好みのツールを使用する上で役に立つリソースが含まれています。

Python ワークロードを Azure Functions に移行する

多くの Python ワークロードはサーバーレス モデルに大変よく適合するため、自分は独自のビジネス ロジックに集中する一方、コードの実行は Azure に任せることが可能です。Python コミュニティから注目をいただいて、Functions 上で Python を使用する生産的なソリューションが構築されていることは喜ばしいことです。

ワークロードと設計パターン

これは決して完全なリストではありませんが、Python で記述された Azure 関数にうまく転換されるワークロードと設計パターンの例を次に示します。

簡略化されたデータ サイエンス パイプライン

Python は、データ サイエンスと機械学習 (ML) に最適な言語です。Azure Functions での Python サポートを活用して、インテリジェント アプリケーションにサーバーレス ホスティングを提供することができます。いくつかの考えを検討してみましょう。

  • 推論アプリケーションを作成するため、Azure Functions を使用してスコアリング スクリプトと一緒に、トレーニング済みの ML モデルをデプロイします。

Azure Functions の推論アプリ

  • Functions を使用してデータの取り込み、移動、準備、変換、処理を行うためにトリガーとデータ バインディングを活用します。
  • Functions を使用してイベントドリブンのトリガーを導入し、新しいデータセットが利用可能になったときに更新パイプラインの再トレーニングとモデル化を行います。

リソース管理の自動化

クラウドに移行する資産とワークロードが増加するにつれて、対応するクラウド リソースを管理、制御、自動化するための一層強力な方法が明らかに必要とされています。このような自動化のシナリオにはカスタム ロジックが必要であり、Python を使ってそれを簡単に表現できます。以下に一般的なシナリオをご紹介します。

  • Azure サービスによって生成される Azure Monitor アラートを処理する。
  • Azure Event Grid によってキャプチャされた Azure イベントに対応して、リソースに操作要件を適用する。

イベント ドリブンの自動リソース管理

  • Azure Logic Apps を活用して、Python 関数でペイロードを処理しながら、IT サービスマネジメント、DevOps、監視システムなどの外部システムに接続する。
  • スケジュール化された操作タスクを、仮想マシン、SQL Server、Web アプリなどの Azure リソース上で実行する。

強力なプログラミング モデル

Python 開発を加速するために、Azure Functions では、イベント トリガーとデータ バインディングに基づいた生産的なプログラミング モデルを提供します。このプログラミング モデルは、ローカルでの構築とデバッグから、クラウドでの展開と監視にまで及ぶ、ワールド クラスのエンドツーエンド開発者エクスペリエンスによってサポートされています。

また、このプログラミング モデルはシームレスなエクスペリエンスを Python 開発者に提供するように設計されているため、使い慣れたコード コンストラクトを使用してすばやく関数の作成に取り掛かったり、既存の .py スクリプトとモジュールをインポートして関数を構築したりすることができます。たとえば、async def 修飾子を使用して関数を非同期コルーチンとして実装したり、標準のログ モジュールを使用して監視トレースをホストに送信したりすることができます。pip インストールへの追加の依存関係は、requirements.txt ファイルを使用して構成できます。

Azure Functions プログラミング モデル

Functions のイベント ドリブン プログラミング モデルでは、トリガーとバインディングに基づいて、関数の実行をトリガーするイベントと、関数がオーケストレーションする必要があるデータ ソースを簡単に構成できます。このモデルは、管理およびサポートする必要のある定型コード、SDK、依存関係の量を減らして、複数のデータ ソースとやり取りするアプリを開発する際の生産性の向上に役立ちます。いったん構成すれば、バインディングからデータをすばやく取得したり、エントリポイント関数のメソッド属性を使用して書き戻したりすることができます。Azure Functions の Python SDK は、HTTP 要求、タイマー イベント、他の Azure サービス (Azure Storage、Azure Cosmos DB、Service Bus、Event Hubs、Event Grid など) にバインドするための豊富な API レイヤーを提供しているため、コードを記述するときに、オートコンプリートや IntelliSense などの生産性拡張機能を使用できます。Azure Functions の拡張モデルを活用することで、独自のバインディングを関数と一緒に使用できるようになるため、KafkaSignalR などの他のデータ ストリームに接続することもできます。

Azure Functions のキュー トリガーの例

開発がさらに簡単に

Python 開発者の好みのツールを使用して関数を開発することができます。Azure Functions Core Tools を使用すると、トリガーベースのテンプレートの使用を開始して、実際のクラウド ソースから発生するリアルタイムのイベントに対してテストするためにローカルに実行したり、Azure に直接公開したりできると同時に、デプロイに構築されたサーバー側の依存関係を自動的に呼び出します。Core Tools は、好みの IDE またはテキスト エディターと組み合わせて使用でき、作成エクスペリエンスを向上させることができます。

緊密に統合された編集エクスペリエンスを得るために、Azure Functions の Visual Studio Code 向け拡張機能を利用することもできます。これにより、新しいアプリの作成、関数の追加、デプロイを、すべて数分以内に行うこともできるようになります。ワンクリックのデバッグ エクスペリエンスを使用すると、F5 キーを押すだけで、関数をローカルでテストしたり、コードにブレークポイントを設定したり、コール スタックを評価したりすることができます。これを Visual Studio Code の Python 拡張機能と組み合わせることで、オートコンプリート、IntelliSense、lint、デバッグを使用した Python 開発エクスペリエンスを強化できます。

Azure Functions の Visual Studio Code 開発

完全な継続的デリバリーのエクスペリエンスを実現するために、Azure DevOps のサービスの 1 つである Azure Pipelines との統合を、Azure Functions 用に最適化されたタスクを介して活用し、アプリの依存関係を構築し、クラウドに公開することができます。このパイプラインは、Azure DevOps テンプレートまたは Azure CLI を使用して構成できます。

Python で記述された関数に対して、Azure Application Insights を介した高度な可観測性および監視も利用できるため、ライブ メトリック ストリームを使用してアプリを監視し、データを収集し、実行ログのクエリを実行し、Azure のさまざまなサービスの分散トレースを参照できます。

Azure Functions を利用して Python アプリをホストする

Linux 上で Azure Functions の従量課金プランまたは Azure Functions の Premium プランを使用して、Python アプリをホストします。

従量課金プランは、Linux ベースのホスティングで一般提供されて、実稼働ワークロードに対応するようになりました。このサーバーレス プランでは、イベントドリブンの動的スケーリングが提供され、関数の実行中にのみコンピューティング リソースに対する料金が発生します。また、Linux プランではマネージド ID がサポートされるようになり、追加のシークレットを必要とせずに、アプリを Azure Key Vault などの Azure リソースとシームレスに連携させることもできます。

Azure Functions Linux Consumption のマネージド ID

Linux ホスティングの従量課金プランには、依存関係の管理を簡略化するための統合リモート ビルドのプレビューも含まれています。この新しい機能は、Azure Functions Core Tools を介して公開する際のオプションとして利用可能であり、この機能を利用することで、Azure Functions のホスティングに合わせてローカル ビルド環境を構成するのではなく、アプリのホスティングに使用するのと同じ環境でクラウドにおいてビルドすることができます。

Azure Functions による Python のリモート ビルド

より強力なハードウェア、インスタンスのウォーム状態を無期限に保つ機能、仮想ネットワーク接続などの高度な機能を必要とするワークロードには、Linux ベースのホスティングがプレビューで利用可能になった Premium プランが有効です。

Azure Functions の Premium プランの仮想ネットワーク統合

Linux ホスティングの Premium プランでは、アプリ コードのみを使用することもできますし、カスタム Docker イメージを使用して、Azure Functions ランタイムも含め、すべての依存関係をカプセル化することもできます (ドキュメント「カスタム イメージを使用して Linux で関数を作成する」を参照)。 どちらのオプションでも、コールド スタートを回避し、イベントに基づいて動的にスケーリングできるという恩恵を受けられます。

Azure Functions の Premium プランのコードまたはコンテナー用ホスティング

次のステップ

以下に、Azure Functions で Python アプリの構築を開始するために活用できるいくつかのリソースを示します。

Azure Functions チームでは、Python アプリケーションの開発とホスティングのための、シームレスで生産的なサーバーレス エクスペリエンスの提供に取り組んでいます。これまでの、そして今後リリースが予定されている多数の機能について、フィードバックをお聞きし、ご使用のシナリオを教えていただきたいと考えています。TwitterGitHub を通じて、チームにご連絡いただけます。また、StackOverflowUserVoice も頻繁に確認していますので、ぜひご質問やご提案をお寄せください。皆様からのたくさんのご意見をお待ちしています!