Rapidly develop and deploy Serverless applications
サーバーレスアプリケーションの開発とデプロイ方法について詳しく紹介します。Alibaba Cloud の Function Compute コンソールと開発者ツール Serverless Devs を通じて、アプリケーションの初期化とデプロイを行います。最後に、アプリケーションのデバッグ方法を共有し、科学的なリリースと可観測性によるデプロイと運用のまとめを紹介することで、アプリケーションの初期化からデバッグ、リリース、運用に至る基本プロセスと主要ステップの理解を深めます。
1. サーバーレスアプリケーションの開発とデプロイ方法
1. コンソールからのファンクション作成
次に、サーバーレスアーキテクチャに基づく FaaS プラットフォームで Hello World を出力する実装を行います。基本的な手順は以下の通りです。
1) アカウントを登録してログインする。
2) 対応する FaaS 製品である Alibaba Cloud Function Compute を見つける。
3) 「ファンクションの作成」をクリックしてファンクションを作成する。
4) ファンクション名やランタイム (使用するプログラミング言語またはプログラミング環境) などのファンクションを設定する。
5) 作成を完了し、テストする。
Alibaba Cloud Function Compute を例に説明します。Alibaba Cloud アカウントを登録してログインした後、Function Compute 製品を見つけてクリックし、製品ホームページにアクセスします。図に示す通りです。
Alibaba Cloud Function Compute 製品ホームページ
左側で「サービスとファンクション」を選択し、サービスを作成します。図に示す通りです。
Alibaba Cloud Function Compute サービス作成ページ
次にファンクションを作成します。図に示す通りです。
Alibaba Cloud Function Compute ファンクション作成ページ
他のクラウドプラットフォームとは異なり、Alibaba Cloud Function Compute プラットフォームでは、作成するファンクションのファンクション名とランタイムの選択だけでなく、ファンクションが属するサービスの設定も必要です。Alibaba Cloud Function Compute のシステムにおいて、サービスの概念を導入することには以下のメリットがあります。
• 関連するファンクションをサービス単位で分類できます。これはラベルによる分類よりも直感的です。
• 同じサービス内の関連ファンクションは、VPC 設定、NAS 設定、さらには一部のログストレージの設定など、特定の設定を共有できます。
• サービスを通じてファンクション環境を適切に分離できます。たとえば、あるアルバムのプロジェクトにオンライン環境、テスト環境、開発環境がある場合、サービスレベルで区別できます。つまり、Album-release、Album-test、Album-dev の三つのサービスを作成して環境を分離できます。
• サービスを通じてファンクションを適切に整理できます。プロジェクトが比較的大規模で多くのファンクションが生成される場合、同じ階層に配置すると非常に混乱します。そのような場合、サービスを通じて効果的に整理できます。
ファンクションの作成後、コードを編集できます。Alibaba Cloud Function Compute は、オブジェクトストレージからのコードアップロード、コードパッケージの直接アップロード、およびオンライン編集をサポートしています。さらに、Alibaba Cloud Function Compute はフォルダの直接アップロードもサポートしています。図に示す通りです。
コードを保存した後、「実行」をクリックしてファンクションをトリガーし、テストできます。
システムが関連ログ「Hello World」を出力したことを確認できます。これで、非常にシンプルなファンクションが正常に作成されました。
2. ツールによるファンクションの作成とデプロイ
サーバーレス開発者ツールを使用すると、サーバーレスアプリケーションの開発、デプロイ、運用を簡単に行えます。Serverless Devs を例に、Alibaba Cloud Function Compute アプリケーションのデプロイを紹介し、ツール側でのファンクション作成やその他の機能を確認します。
Serverless Devs は、開発者に強力なツールチェーンを提供することに特化したオープンソースのサーバーレス開発者プラットフォームです。このプラットフォームを通じて、開発者はマルチクラウドのサーバーレス製品を一括で体験し、サーバーレスプロジェクトを高速でデプロイできます。公式の説明によると、Serverless Devs は複数のクラウドプロバイダーのサーバーレス関連製品をサポートしており、Lambda、Alibaba Cloud Function Compute、Baidu AI Cloud Function Computing、Tencent Cloud Function などが含まれます。
Alibaba Cloud Function Compute を例に、Serverless Devs 開発者ツールを使用したサーバーレスアプリケーションの作成とデプロイ方法を確認します。
1) Serverless Devs 開発者ツールをインストールする (npm install -g @serverless-devs/s コマンドを実行)。
2) Alibaba Cloud の認証情報を設定する (s config add --AccessKeyID AccessKeyID --AccessKeySecret AccessKeySecret --AccountID AccountID コマンドを実行)。
3) テンプレートプロジェクトを作成する (s init node.js12-http -d fc-hello-world-demo コマンドを実行)。初期化のプロセスは図に示す通りです。
Serverless Devs を使用したプロジェクト作成
4) プロジェクトディレクトリに移動 (cd fc-hello-world-demo コマンドを実行) し、デプロイする (s deploy コマンドを実行)。デプロイ後の結果は図に示す通りです。
Serverless Devs を使用したプロジェクトのデプロイ
プロジェクトのデプロイが成功した後、以下のような追加の操作を実行できます。ファンクションをトリガーする (s invoke コマンドを実行) と、結果は図に示す通りです。
Serverless Devs を使用したファンクションのトリガー
オンラインのファンクション詳細を表示する (s info コマンドを実行) と、結果は図に示す通りです。
Serverless Devs を使用したファンクション詳細の表示
Serverless Devs には、比較的完全なデスクトップクライアントもあります。開発者はデスクトップクライアントを通じてアプリケーションの作成と管理、および関連機能を利用できます。たとえば、アプリケーション一覧の表示とアプリケーションの素早い作成ができます。図に示す通りです。
Serverless Devs デスクトップクライアントによるアプリケーション一覧の表示
アプリケーションの作成後、管理ができます。次の図は Serverless Devs デスクトップクライアントのアプリケーション管理画面を示しています。
Serverless Devs デスクトップクライアントによるアプリケーション管理
その他の機能の利用方法は以下の通りです。図に示す通り、ワンクリックパフォーマンステスト機能の表示です。
Serverless Devs デスクトップクライアントによるワンクリックパフォーマンステスト
ワンクリックでファンクションリソースをデバッグします。図に示す通りです。
Serverless Devs デスクトップクライアントによるファンクションリソースのデバッグ
クリックしてファンクションの多次元メトリクス情報を表示します。図に示す通りです。
Serverless Devs デスクトップクライアントによるファンクション多次元メトリクス情報のワンクリック表示
さらに、Serverless Devs には便利な Yaml ビジュアル設定機能もあります。図に示す通りです。
Serverless Devs デスクトップクライアントによる Yaml ビジュアル設定
2. サーバーレスアプリケーションのデバッグ方法
アプリケーション開発中、または開発完了後に、実行結果が期待通りでない場合、通常ある程度のデバッグが必要です。しかし、サーバーレスアーキテクチャでは、デバッグは大きな課題に直面することが多く、特に環境要因による制約を受ける場合、以下のような状況が発生します。開発したアプリケーションはローカルでは正常に動作するが、FaaS プラットフォームでは予測できない問題が発生する。あるいは、特別な環境ではローカルでオンライン環境をシミュレートできず、アプリケーションのデバッグが困難になる。サーバーレスアプリケーションのデバッグは課題とされてきましたが、各クラウドベンダーはデバッグの方向での深い探求を継続しており、以下にいくつかの方法を紹介します。
1. オンラインデバッグ
(1) シンプルデバッグ
シンプルデバッグとは、コンソール上でデバッグを行うことです。Alibaba Cloud Function Compute を例にすると、コンソールの「コード実行」ボタンを使用して基本的なデバッグを行えます。図に示す通りです。
Function Compute コード編集ページ
必要に応じてイベントを設定して、一部のイベントをシミュレートすることもできます。
Alibaba Cloud Function Compute イベントページ
オンラインデバッグの利点は、コードテストにオンライン環境を利用できる点です。オンライン環境に VPC やその他のリソースが存在する場合、ローカル環境でのデバッグは困難です。
(2) ブレークポイントデバッグ
オンラインシンプルデバッグに加え、一部のクラウドベンダーはブレークポイントデバッグもサポートしています。たとえば、Alibaba Cloud Function Compute のリモートデバッグです。Alibaba Cloud Function Compute のリモートデバッグを例に、コンソールを通じたファンクションのオンラインデバッグを実現できます。ファンクションの作成後、リモートデバッグを選択して「デバッグ開始」ボタンをクリックします。図に示す通りです。
Function Compute リモートデバッグページ
デバッグを開始した後、しばらく待つと、システムがリモートデバッグインターフェイスに入ります。図に示す通りです。
Function Compute リモートデバッグ開始ページ
以下の画面が表示されたら、ブレークポイントデバッグを行えます。
Function Compute リモートデバッグ ブレークポイントデバッグページ
2. 端雲連調
ローカルでサーバーレスアプリケーションを開発する際、オンラインリソースが関与することがよくあります。たとえば、オブジェクトストレージトリガーによるファンクション実行のトリガーや、VPC を介したデータベースへのアクセスなどです。この場合、オンラインとオフライン環境の不一致がオフライン開発とデバッグに大きな課題をもたらします。Serverless Devs 開発者ツールは、プロキシ用の補助ファンクションを構築することでオンラインとオフラインのリソースを接続し、開発者がローカルでアプリケーションを開発およびデバッグできるようにします。このデバッグ方法は端雲連調と呼ばれます。
図に示す通り、Serverless Devs 開発者ツールは Yaml 設定ファイルに従って補助サービスと補助ファンクションを作成し、補助サービスと補助ファンクションを通じてオンラインとオフラインのリソースを接続し、エンドツーエンドの端雲連調を完了します。
Serverless Devs 端雲連調の模式図
Serverless Devs 開発者ツールは、Yaml 設定ファイルの内容に従って補助サービスと補助ファンクションを作成します (補助サービスと Yaml で宣言されたビジネスサービスの設定は一致します)。
トリガー (SDK、API、s proxied invoke コマンド、またはその他のトリガーを含む) を通じて補助ファンクション (Function Compute C) をトリガーすると、リクエストトラフィックがローカルデバッグインスタンス (ローカル環境 A) に転送されます。このとき、ローカルデバッグインスタンス (ローカルファンクション実行環境コンテナ) が受信するイベントとコンテキストは、実際にオンラインからのものです。
ローカルデバッグインスタンス (ローカル環境 A) は以下の内容に直接アクセスできます。
• RDS や Kafka イントラネットアドレスなどの VPC イントラネットリソース
• 一部のクラウドサービスのイントラネットアドレス
• ディスクマウントサービス (NAS への直接アクセス)
端雲連調の手順は以下の通りです。
1) s proxied setup コマンドを実行して、端雲連調に必要な補助リソースとローカル環境を準備する。
2) トリガーのない通常のイベント関数または HTTP トリガーの場合、準備完了後に別の新しいターミナルを起動し、プロジェクトパスに切り替えて、s proxied invoke コマンドを実行してローカル関数を呼び出す。
3) デバッグタスクの完了後、s proxied cleanup コマンドを実行して、端雲連調に必要な補助リソースとローカル環境をクリーンアップする。
コマンドによる端雲連調機能の利用に加え、VSCode 開発者ツールでも端雲連調機能を利用できます。図に示す通りです。
VSCode での端雲連調機能の利用
3. リモートデバッグ
端雲連調のチャネルサービスコンテナのほかに、ローカルにはローカル関数を実行するための Function Compute コンテナもあります。リモート補助ファンクションは単にリモートトラフィックをローカルに送信するだけです。実際のデバッグプロセスでは、インスタンスにログインしてプロジェクトをデバッグする必要があります。この場合、リモートデバッグを選択できます。
端雲連調と比較して、リモートデバッグではローカルにチャネルサービスコンテナのみが存在し、実行プロセスはオンラインに依存します。リモートファンクションが実行結果を返します。リモートデバッグの全体的なアーキテクチャは図に示す通りです。
前述のリモートデバッグアーキテクチャ図に示すチャネルサービスを通じてオンライン環境にログインしてコードデバッグや問題の定位を行うほか、一部のクラウドベンダーはインスタンスに直接ログインしてコードデバッグを行う機能も提供しています。Serverless Devs を例にすると、Alibaba Cloud Function Compute を使用する際に、instance コマンドを通じてオンラインインスタンスに直接ログインできます。
instance ログインコマンドは便利なログイン体験を提供し、複雑なシナリオでのアプリケーション例外の定位などの問題解決に役立ちますが、インスタンスにログインした後、ユーザーは関数ログやモニタリング指標を通じて直接問題を定位できず、coredump、tcpdump、jmap などのツールを使用して詳細な調査を行う必要があります。
たとえば、あるユーザーがオンラインプログラムで最近一部のファンクションエラープロンプトが表示されることを発見しました。エラー内容はリモートサービス接続時のタイムアウトでした。ユーザーはファンクションインスタンスとリモートサービス間のネットワーク接続が不安定ではないかと疑い、インスタンスに入ってインスタンスとリモートサービス間のネットワーク状況を分析したいと考えました。この場合、以下の手順で問題を調査できます。
1) 図に示す通り、インスタンスにログインした後、apt-get update コマンドと apt-get install tcpdump コマンドを実行して tcpdump ツールをインストールする必要があります。
インスタンスログインとソフトウェアインストールのレンダリング
2) インストール完了後、tcpdump コマンドを実行してリモートサービス IP へのリクエストをキャプチャし、パケットキャプチャ結果を tcpdump.cap ファイルに保存します。
3) パケットキャプチャ後、OSS コマンドラインツール ossutil64 を使用して tcpdump.cap ファイルを OSS にアップロードし、その後ローカルにダウンロードして分析ツール Wireshark で分析します。
4. ローカルデバッグ
(1) コマンドラインツール
ほとんどの FaaS プラットフォームは、Alibaba Cloud の Funcraft や、Serverless Framework、Serverless Devs などのオープンソースプロジェクトといったマルチクラウドベンダー対応のツールなど、ユーザーに比較的完全なコマンドラインツールを提供しています。コマンドラインツールによるコードデバッグの方法は非常にシンプルです。Serverless Devs を例にすると、Alibaba Cloud Function Compute のローカルデバッグの方法は、Function Compute のローカルプロジェクトがあることを確認した後、プロジェクト配下でデバッグコマンドを実行します。たとえば、Docker 内でのデバッグは以下の通りです。
コマンドラインからのローカルデバッグ
(2) エディタープラグイン
VSCode プラグインを例にします。Alibaba Cloud Function Compute 用の VSCode プラグインをダウンロードしてアカウント情報を設定した後、ローカルでファンクションを新規作成し、ブレークポイントデバッグを行います。図に示す通りです。
3. 開発者ツールによる依存関係のインストールとプロジェクトビルド
サーバーレスアーキテクチャでのアプリケーション開発と従来のアーキテクチャでのアプリケーション開発には大きな違いがあります。それらが注目する内容の次元が異なります。たとえば、理想状態では、前者はサーバーなどの基盤リソースに注意を払う必要がありません。しかし、サーバーレスの現在の開発段階において、サーバーレスアーキテクチャでのアプリケーション開発は本当にサーバーを意識する必要がないのでしょうか。実際にはそうではありません。サーバーレスアーキテクチャは NoServer の考え方を強調していますが、実際のプロダクションではクロスプラットフォームで利用できない依存関係が多く存在します。たとえば、Python 言語の一部の依存関係はバイナリコンパイルが必要で、オペレーティングシステムやソフトウェア環境と大きく関係しています。そのため、そのような依存関係がプロジェクトに導入されている場合、Function Compute プラットフォームのオンライン環境と一致する環境で依存関係をインストールし、コードをパッケージ化またはプロジェクトをデプロイする必要があります。
Alibaba Cloud Function Compute はオンラインファンクション環境について詳細に説明し、対応するドキュメントを提供しています。たとえば、C、C++、Go を使用してコンパイルされた実行可能ファイルは、Function Compute のランタイム環境と互換性が必要です。Function Compute の Python ランタイム環境は以下の通りです。
• Linux カーネルバージョン:Linux 4.4.24-2.al7.x86_64
• Docker ベースイメージ:docker pull python:2.7、docker pull python:3.6
しかし、実際のアプリケーション開発プロセスでは、依存関係のパッケージングは依然として多くの開発者にとって悩みの種です。多くのサーバーレスアプリケーション開発プロセスで同様の課題に直面します。プロジェクトはローカルでは正常に動作するが、オンラインに公開されると依存関係が見つからない、しかしその依存関係は実際に存在している。このような場合、問題の定位が非常に困難になります。
現在、サーバーレスアプリケーションの依存関係のインストールやプロジェクトビルドには主に三つの方法があります。
1) ローカルでプロジェクトを作成後、クラウドベンダーが提供する環境データに基づいてオンライン環境を構築し、依存関係をインストールする。この方法は比較的自律的で制御可能ですが、非常に難しく手間がかかります。
2) 既存の開発者ツールを使用して依存関係をインストールする。図に示す通りです。
ツールによる依存関係インストールの模式図
Serverless Devs 開発者ツールと Alibaba Cloud Function Compute 製品を例にします。開発者は言語の慣例に従って対応する言語の依存関係インストールファイルを用意するだけです。たとえば、Python 言語なら requirements.txt、Node.js 言語なら package.json などです。その後、現在のプロジェクト配下で s build --use-docker コマンドを実行して、Alibaba Cloud Function Compute プラットフォームのオンライン環境と一致した環境での依存関係のインストールを完了します。Python プロジェクトを例にすると、開発者はプロジェクトディレクトリで以下の操作を行うだけです。
1. ソースコードを開発する。
2. s build --use-docker コマンドを実行後、requirements.txt ファイルに基づいて対応する依存関係が自動的にローカルにダウンロードされ、ソースコードと一緒に成果物を形成する。
3. s deploy コマンドを実行して全体をパッケージ化して成果物とし、ファンクションを作成し、依存パッケージの環境変数を設定することで、ファンクションは対応するコードの依存パッケージを直接利用できるようになる。
3) 現在、一部のクラウドベンダーの FaaS プラットフォームコンソールは WebIDE をサポートしています。Alibaba Cloud の WebIDE はコマンドラインプログラムを実行する機能を持っているため、コンソール上の WebIDE で直接依存関係をインストールすることもできます。
1. サーバーレスアプリケーションの開発とデプロイ方法
1. コンソールからのファンクション作成
次に、サーバーレスアーキテクチャに基づく FaaS プラットフォームで Hello World を出力する実装を行います。基本的な手順は以下の通りです。
1) アカウントを登録してログインする。
2) 対応する FaaS 製品である Alibaba Cloud Function Compute を見つける。
3) 「ファンクションの作成」をクリックしてファンクションを作成する。
4) ファンクション名やランタイム (使用するプログラミング言語またはプログラミング環境) などのファンクションを設定する。
5) 作成を完了し、テストする。
Alibaba Cloud Function Compute を例に説明します。Alibaba Cloud アカウントを登録してログインした後、Function Compute 製品を見つけてクリックし、製品ホームページにアクセスします。図に示す通りです。
Alibaba Cloud Function Compute 製品ホームページ
左側で「サービスとファンクション」を選択し、サービスを作成します。図に示す通りです。
Alibaba Cloud Function Compute サービス作成ページ
次にファンクションを作成します。図に示す通りです。
Alibaba Cloud Function Compute ファンクション作成ページ
他のクラウドプラットフォームとは異なり、Alibaba Cloud Function Compute プラットフォームでは、作成するファンクションのファンクション名とランタイムの選択だけでなく、ファンクションが属するサービスの設定も必要です。Alibaba Cloud Function Compute のシステムにおいて、サービスの概念を導入することには以下のメリットがあります。
• 関連するファンクションをサービス単位で分類できます。これはラベルによる分類よりも直感的です。
• 同じサービス内の関連ファンクションは、VPC 設定、NAS 設定、さらには一部のログストレージの設定など、特定の設定を共有できます。
• サービスを通じてファンクション環境を適切に分離できます。たとえば、あるアルバムのプロジェクトにオンライン環境、テスト環境、開発環境がある場合、サービスレベルで区別できます。つまり、Album-release、Album-test、Album-dev の三つのサービスを作成して環境を分離できます。
• サービスを通じてファンクションを適切に整理できます。プロジェクトが比較的大規模で多くのファンクションが生成される場合、同じ階層に配置すると非常に混乱します。そのような場合、サービスを通じて効果的に整理できます。
ファンクションの作成後、コードを編集できます。Alibaba Cloud Function Compute は、オブジェクトストレージからのコードアップロード、コードパッケージの直接アップロード、およびオンライン編集をサポートしています。さらに、Alibaba Cloud Function Compute はフォルダの直接アップロードもサポートしています。図に示す通りです。
コードを保存した後、「実行」をクリックしてファンクションをトリガーし、テストできます。
システムが関連ログ「Hello World」を出力したことを確認できます。これで、非常にシンプルなファンクションが正常に作成されました。
2. ツールによるファンクションの作成とデプロイ
サーバーレス開発者ツールを使用すると、サーバーレスアプリケーションの開発、デプロイ、運用を簡単に行えます。Serverless Devs を例に、Alibaba Cloud Function Compute アプリケーションのデプロイを紹介し、ツール側でのファンクション作成やその他の機能を確認します。
Serverless Devs は、開発者に強力なツールチェーンを提供することに特化したオープンソースのサーバーレス開発者プラットフォームです。このプラットフォームを通じて、開発者はマルチクラウドのサーバーレス製品を一括で体験し、サーバーレスプロジェクトを高速でデプロイできます。公式の説明によると、Serverless Devs は複数のクラウドプロバイダーのサーバーレス関連製品をサポートしており、Lambda、Alibaba Cloud Function Compute、Baidu AI Cloud Function Computing、Tencent Cloud Function などが含まれます。
Alibaba Cloud Function Compute を例に、Serverless Devs 開発者ツールを使用したサーバーレスアプリケーションの作成とデプロイ方法を確認します。
1) Serverless Devs 開発者ツールをインストールする (npm install -g @serverless-devs/s コマンドを実行)。
2) Alibaba Cloud の認証情報を設定する (s config add --AccessKeyID AccessKeyID --AccessKeySecret AccessKeySecret --AccountID AccountID コマンドを実行)。
3) テンプレートプロジェクトを作成する (s init node.js12-http -d fc-hello-world-demo コマンドを実行)。初期化のプロセスは図に示す通りです。
Serverless Devs を使用したプロジェクト作成
4) プロジェクトディレクトリに移動 (cd fc-hello-world-demo コマンドを実行) し、デプロイする (s deploy コマンドを実行)。デプロイ後の結果は図に示す通りです。
Serverless Devs を使用したプロジェクトのデプロイ
プロジェクトのデプロイが成功した後、以下のような追加の操作を実行できます。ファンクションをトリガーする (s invoke コマンドを実行) と、結果は図に示す通りです。
Serverless Devs を使用したファンクションのトリガー
オンラインのファンクション詳細を表示する (s info コマンドを実行) と、結果は図に示す通りです。
Serverless Devs を使用したファンクション詳細の表示
Serverless Devs には、比較的完全なデスクトップクライアントもあります。開発者はデスクトップクライアントを通じてアプリケーションの作成と管理、および関連機能を利用できます。たとえば、アプリケーション一覧の表示とアプリケーションの素早い作成ができます。図に示す通りです。
Serverless Devs デスクトップクライアントによるアプリケーション一覧の表示
アプリケーションの作成後、管理ができます。次の図は Serverless Devs デスクトップクライアントのアプリケーション管理画面を示しています。
Serverless Devs デスクトップクライアントによるアプリケーション管理
その他の機能の利用方法は以下の通りです。図に示す通り、ワンクリックパフォーマンステスト機能の表示です。
Serverless Devs デスクトップクライアントによるワンクリックパフォーマンステスト
ワンクリックでファンクションリソースをデバッグします。図に示す通りです。
Serverless Devs デスクトップクライアントによるファンクションリソースのデバッグ
クリックしてファンクションの多次元メトリクス情報を表示します。図に示す通りです。
Serverless Devs デスクトップクライアントによるファンクション多次元メトリクス情報のワンクリック表示
さらに、Serverless Devs には便利な Yaml ビジュアル設定機能もあります。図に示す通りです。
Serverless Devs デスクトップクライアントによる Yaml ビジュアル設定
2. サーバーレスアプリケーションのデバッグ方法
アプリケーション開発中、または開発完了後に、実行結果が期待通りでない場合、通常ある程度のデバッグが必要です。しかし、サーバーレスアーキテクチャでは、デバッグは大きな課題に直面することが多く、特に環境要因による制約を受ける場合、以下のような状況が発生します。開発したアプリケーションはローカルでは正常に動作するが、FaaS プラットフォームでは予測できない問題が発生する。あるいは、特別な環境ではローカルでオンライン環境をシミュレートできず、アプリケーションのデバッグが困難になる。サーバーレスアプリケーションのデバッグは課題とされてきましたが、各クラウドベンダーはデバッグの方向での深い探求を継続しており、以下にいくつかの方法を紹介します。
1. オンラインデバッグ
(1) シンプルデバッグ
シンプルデバッグとは、コンソール上でデバッグを行うことです。Alibaba Cloud Function Compute を例にすると、コンソールの「コード実行」ボタンを使用して基本的なデバッグを行えます。図に示す通りです。
Function Compute コード編集ページ
必要に応じてイベントを設定して、一部のイベントをシミュレートすることもできます。
Alibaba Cloud Function Compute イベントページ
オンラインデバッグの利点は、コードテストにオンライン環境を利用できる点です。オンライン環境に VPC やその他のリソースが存在する場合、ローカル環境でのデバッグは困難です。
(2) ブレークポイントデバッグ
オンラインシンプルデバッグに加え、一部のクラウドベンダーはブレークポイントデバッグもサポートしています。たとえば、Alibaba Cloud Function Compute のリモートデバッグです。Alibaba Cloud Function Compute のリモートデバッグを例に、コンソールを通じたファンクションのオンラインデバッグを実現できます。ファンクションの作成後、リモートデバッグを選択して「デバッグ開始」ボタンをクリックします。図に示す通りです。
Function Compute リモートデバッグページ
デバッグを開始した後、しばらく待つと、システムがリモートデバッグインターフェイスに入ります。図に示す通りです。
Function Compute リモートデバッグ開始ページ
以下の画面が表示されたら、ブレークポイントデバッグを行えます。
Function Compute リモートデバッグ ブレークポイントデバッグページ
2. 端雲連調
ローカルでサーバーレスアプリケーションを開発する際、オンラインリソースが関与することがよくあります。たとえば、オブジェクトストレージトリガーによるファンクション実行のトリガーや、VPC を介したデータベースへのアクセスなどです。この場合、オンラインとオフライン環境の不一致がオフライン開発とデバッグに大きな課題をもたらします。Serverless Devs 開発者ツールは、プロキシ用の補助ファンクションを構築することでオンラインとオフラインのリソースを接続し、開発者がローカルでアプリケーションを開発およびデバッグできるようにします。このデバッグ方法は端雲連調と呼ばれます。
図に示す通り、Serverless Devs 開発者ツールは Yaml 設定ファイルに従って補助サービスと補助ファンクションを作成し、補助サービスと補助ファンクションを通じてオンラインとオフラインのリソースを接続し、エンドツーエンドの端雲連調を完了します。
Serverless Devs 端雲連調の模式図
Serverless Devs 開発者ツールは、Yaml 設定ファイルの内容に従って補助サービスと補助ファンクションを作成します (補助サービスと Yaml で宣言されたビジネスサービスの設定は一致します)。
トリガー (SDK、API、s proxied invoke コマンド、またはその他のトリガーを含む) を通じて補助ファンクション (Function Compute C) をトリガーすると、リクエストトラフィックがローカルデバッグインスタンス (ローカル環境 A) に転送されます。このとき、ローカルデバッグインスタンス (ローカルファンクション実行環境コンテナ) が受信するイベントとコンテキストは、実際にオンラインからのものです。
ローカルデバッグインスタンス (ローカル環境 A) は以下の内容に直接アクセスできます。
• RDS や Kafka イントラネットアドレスなどの VPC イントラネットリソース
• 一部のクラウドサービスのイントラネットアドレス
• ディスクマウントサービス (NAS への直接アクセス)
端雲連調の手順は以下の通りです。
1) s proxied setup コマンドを実行して、端雲連調に必要な補助リソースとローカル環境を準備する。
2) トリガーのない通常のイベント関数または HTTP トリガーの場合、準備完了後に別の新しいターミナルを起動し、プロジェクトパスに切り替えて、s proxied invoke コマンドを実行してローカル関数を呼び出す。
3) デバッグタスクの完了後、s proxied cleanup コマンドを実行して、端雲連調に必要な補助リソースとローカル環境をクリーンアップする。
コマンドによる端雲連調機能の利用に加え、VSCode 開発者ツールでも端雲連調機能を利用できます。図に示す通りです。
VSCode での端雲連調機能の利用
3. リモートデバッグ
端雲連調のチャネルサービスコンテナのほかに、ローカルにはローカル関数を実行するための Function Compute コンテナもあります。リモート補助ファンクションは単にリモートトラフィックをローカルに送信するだけです。実際のデバッグプロセスでは、インスタンスにログインしてプロジェクトをデバッグする必要があります。この場合、リモートデバッグを選択できます。
端雲連調と比較して、リモートデバッグではローカルにチャネルサービスコンテナのみが存在し、実行プロセスはオンラインに依存します。リモートファンクションが実行結果を返します。リモートデバッグの全体的なアーキテクチャは図に示す通りです。
前述のリモートデバッグアーキテクチャ図に示すチャネルサービスを通じてオンライン環境にログインしてコードデバッグや問題の定位を行うほか、一部のクラウドベンダーはインスタンスに直接ログインしてコードデバッグを行う機能も提供しています。Serverless Devs を例にすると、Alibaba Cloud Function Compute を使用する際に、instance コマンドを通じてオンラインインスタンスに直接ログインできます。
instance ログインコマンドは便利なログイン体験を提供し、複雑なシナリオでのアプリケーション例外の定位などの問題解決に役立ちますが、インスタンスにログインした後、ユーザーは関数ログやモニタリング指標を通じて直接問題を定位できず、coredump、tcpdump、jmap などのツールを使用して詳細な調査を行う必要があります。
たとえば、あるユーザーがオンラインプログラムで最近一部のファンクションエラープロンプトが表示されることを発見しました。エラー内容はリモートサービス接続時のタイムアウトでした。ユーザーはファンクションインスタンスとリモートサービス間のネットワーク接続が不安定ではないかと疑い、インスタンスに入ってインスタンスとリモートサービス間のネットワーク状況を分析したいと考えました。この場合、以下の手順で問題を調査できます。
1) 図に示す通り、インスタンスにログインした後、apt-get update コマンドと apt-get install tcpdump コマンドを実行して tcpdump ツールをインストールする必要があります。
インスタンスログインとソフトウェアインストールのレンダリング
2) インストール完了後、tcpdump コマンドを実行してリモートサービス IP へのリクエストをキャプチャし、パケットキャプチャ結果を tcpdump.cap ファイルに保存します。
3) パケットキャプチャ後、OSS コマンドラインツール ossutil64 を使用して tcpdump.cap ファイルを OSS にアップロードし、その後ローカルにダウンロードして分析ツール Wireshark で分析します。
4. ローカルデバッグ
(1) コマンドラインツール
ほとんどの FaaS プラットフォームは、Alibaba Cloud の Funcraft や、Serverless Framework、Serverless Devs などのオープンソースプロジェクトといったマルチクラウドベンダー対応のツールなど、ユーザーに比較的完全なコマンドラインツールを提供しています。コマンドラインツールによるコードデバッグの方法は非常にシンプルです。Serverless Devs を例にすると、Alibaba Cloud Function Compute のローカルデバッグの方法は、Function Compute のローカルプロジェクトがあることを確認した後、プロジェクト配下でデバッグコマンドを実行します。たとえば、Docker 内でのデバッグは以下の通りです。
コマンドラインからのローカルデバッグ
(2) エディタープラグイン
VSCode プラグインを例にします。Alibaba Cloud Function Compute 用の VSCode プラグインをダウンロードしてアカウント情報を設定した後、ローカルでファンクションを新規作成し、ブレークポイントデバッグを行います。図に示す通りです。
3. 開発者ツールによる依存関係のインストールとプロジェクトビルド
サーバーレスアーキテクチャでのアプリケーション開発と従来のアーキテクチャでのアプリケーション開発には大きな違いがあります。それらが注目する内容の次元が異なります。たとえば、理想状態では、前者はサーバーなどの基盤リソースに注意を払う必要がありません。しかし、サーバーレスの現在の開発段階において、サーバーレスアーキテクチャでのアプリケーション開発は本当にサーバーを意識する必要がないのでしょうか。実際にはそうではありません。サーバーレスアーキテクチャは NoServer の考え方を強調していますが、実際のプロダクションではクロスプラットフォームで利用できない依存関係が多く存在します。たとえば、Python 言語の一部の依存関係はバイナリコンパイルが必要で、オペレーティングシステムやソフトウェア環境と大きく関係しています。そのため、そのような依存関係がプロジェクトに導入されている場合、Function Compute プラットフォームのオンライン環境と一致する環境で依存関係をインストールし、コードをパッケージ化またはプロジェクトをデプロイする必要があります。
Alibaba Cloud Function Compute はオンラインファンクション環境について詳細に説明し、対応するドキュメントを提供しています。たとえば、C、C++、Go を使用してコンパイルされた実行可能ファイルは、Function Compute のランタイム環境と互換性が必要です。Function Compute の Python ランタイム環境は以下の通りです。
• Linux カーネルバージョン:Linux 4.4.24-2.al7.x86_64
• Docker ベースイメージ:docker pull python:2.7、docker pull python:3.6
しかし、実際のアプリケーション開発プロセスでは、依存関係のパッケージングは依然として多くの開発者にとって悩みの種です。多くのサーバーレスアプリケーション開発プロセスで同様の課題に直面します。プロジェクトはローカルでは正常に動作するが、オンラインに公開されると依存関係が見つからない、しかしその依存関係は実際に存在している。このような場合、問題の定位が非常に困難になります。
現在、サーバーレスアプリケーションの依存関係のインストールやプロジェクトビルドには主に三つの方法があります。
1) ローカルでプロジェクトを作成後、クラウドベンダーが提供する環境データに基づいてオンライン環境を構築し、依存関係をインストールする。この方法は比較的自律的で制御可能ですが、非常に難しく手間がかかります。
2) 既存の開発者ツールを使用して依存関係をインストールする。図に示す通りです。
ツールによる依存関係インストールの模式図
Serverless Devs 開発者ツールと Alibaba Cloud Function Compute 製品を例にします。開発者は言語の慣例に従って対応する言語の依存関係インストールファイルを用意するだけです。たとえば、Python 言語なら requirements.txt、Node.js 言語なら package.json などです。その後、現在のプロジェクト配下で s build --use-docker コマンドを実行して、Alibaba Cloud Function Compute プラットフォームのオンライン環境と一致した環境での依存関係のインストールを完了します。Python プロジェクトを例にすると、開発者はプロジェクトディレクトリで以下の操作を行うだけです。
1. ソースコードを開発する。
2. s build --use-docker コマンドを実行後、requirements.txt ファイルに基づいて対応する依存関係が自動的にローカルにダウンロードされ、ソースコードと一緒に成果物を形成する。
3. s deploy コマンドを実行して全体をパッケージ化して成果物とし、ファンクションを作成し、依存パッケージの環境変数を設定することで、ファンクションは対応するコードの依存パッケージを直接利用できるようになる。
3) 現在、一部のクラウドベンダーの FaaS プラットフォームコンソールは WebIDE をサポートしています。Alibaba Cloud の WebIDE はコマンドラインプログラムを実行する機能を持っているため、コンソール上の WebIDE で直接依存関係をインストールすることもできます。
Related Articles
-
A detailed explanation of Hadoop core architecture HDFS
Knowledge Base Team
-
What Does IOT Mean
Knowledge Base Team
-
6 Optional Technologies for Data Storage
Knowledge Base Team
-
What Is Blockchain Technology
Knowledge Base Team
Explore More Special Offers
-
Short Message Service(SMS) & Mail Service
50,000 email package starts as low as USD 1.99, 120 short messages start at only USD 1.00
