Take you hand in hand to implement Serverless breakpoint debugging

概要

本記事では、Serverless Devs を使用して、Function Compute (FC) アプリケーションのブレークポイントデバッグ手順を詳しく解説します。サーバーレス環境でのブレークポイントデバッグをガイドし、「本格的なデバッグ」のコンテキストと手順を以下の 4 つの観点から明確にします。充実した内容をご用意しています。

1、概要セクションでは、デバッグ機能の重要性と、現在 Alibaba Cloud Function Compute (FC) が提供しているデバッグ機能について説明します。

2、デバッグツアーセクションでは、「Serverless Devs を使用した各 IDE でのブレークポイントデバッグ」の詳細な手順を紹介します。

3、まとめセクションでは、ブレークポイントデバッグにおける改善余地を客観的に述べます。

4、付録セクションでは、開発者向けにブレークポイントデバッグ操作の詳細な図をまとめます。

サーバーレスアプリケーションアーキテクチャにおいて、デバッグ機能はアプリケーション開発者が重視するポイントであり、プログラム開発の効率を左右します。Hackernoon のサーバーレスに関する業界調査レポートでは、これまでデバッグがサーバーレス導入における最大の課題でありチャレンジであると指摘されています。

レポート「Top 5 Serverless Trends」: https://hackernoon.com/top-5-serverless-trends-in-2020-wd1m3t8g

デバッグ機能には主に 2 種類あります。1 つはプログラムの実行機能、もう 1 つはブレークポイントデバッグ機能です。前者はデバッグの基本機能であり、開発者がプログラムが正常に実行されるか、プログラムの実行結果が正しいかを判断するのに役立ちます。後者は高度なデバッグ機能であり、プログラムの実行が正しくない場合や期待通りにならない原因箇所を容易に特定するのに役立ちます。

現在、業界の既存のサーバーレスアプリケーションデバッグ手法は、主にクラウド実行環境をシミュレートしてローカルデバッグを行う方法と、アプリケーションをクラウドにデプロイしてログに基づいてデバッグする方法に分かれます。しかし、ローカルデバッグではクラウドのネットワーク環境をシミュレートできず、クラウドデバッグではローカルの柔軟性が不足しています。これらの課題を克服し、サーバーレスアプリケーションをすぐにデバッグできるようにするため、Alibaba Cloud Function Compute チームは独自の調査を通じて業界初のデバッグツールセットを開発し、包括的なローカルデバッグとエンドツーエンドのクラウド連携デバッグ機能を提供しています。

・ローカルデバッグ:ローカル環境とネットワークに基づき、コンテナ技術を利用してサーバーレスアプリケーションを実行し、デバッグを行います。

・クラウド連携デバッグ:ローカル環境をベースにネットワーク制約を突破し、コンテナ技術を利用してサーバーレスアプリケーションを実行します。実行中にローカルとクラウドのネットワーク間の障壁を取り払い、クラウドリソースとのインタラクションを確保します。詳細は使用ドキュメントを参照してください。

https://github.com/devsapp/fc/blob/main/docs/zh/command/proxied.md

本記事で紹介するローカルデバッグツールはブレークポイントデバッグ機能を提供し、サーバーレスアプリケーション開発仕様と完全な互換性があります。次に、ブレークポイントデバッグの具体的な手順を見ていきましょう。

デバッグツアー

ブレークポイントデバッグの手順は以下の通りです。この 4 つの手順に沿って、ブレークポイントデバッグの旅に出かけましょう。

・Serverless アプリケーションの起動

・ブレークポイントデバッガーの起動

・ブレークポイントデバッグの開始

・ブレークポイントデバッグの終了

1. 事前準備

デバッグを開始する前に、いくつかの事前準備が必要です。本記事では、事前準備を一般的な事前準備とクラウド連携デバッグ用の追加事前準備に分けて説明します。

・共通の事前準備:

・デバッグ用 IDE のインストール:VSCode、PyCharm、IntelliJ の 3 つの IDE から選択できます。

これらの機能を使用する前に、デバッグツールをインストールしてください。ここでは Serverless Devs をインストールします。

次世代 Function Compute ツールチェーンの使用方法について理解しておきましょう。

・Docker のダウンロードとインストール:デバッグ機能は Docker に依存しているため、ローカル環境に Docker が必要です。

・最後に、Alibaba Cloud アカウントを登録し、Serverless Devs を使用して Alibaba Cloud アカウントを設定する必要があります。

クラウド連携デバッグ用の追加事前準備:

・Alibaba Cloud アカウントを用意してください。クラウド連携デバッグでは補助リソースのデプロイと削除が伴うため、サブアカウントを使用する場合は指定された権限を追加する必要があります。具体的な権限セットについては、以下を参照してください。https://github.com/devsapp/fc/blob/main/docs/zh/command/proxied.md#%E6%9D%83%E9%99%90%E4%B8%8E%E7%AD%96%E7%95%A5%E8%AF%B4%E6%98%8E

2. パラメーターの説明

上記の前提条件の準備が完了したら、デバッグコマンドにおけるブレークポイントデバッグ関連の具体的なパラメーターについて理解しましょう。

ブレークポイントデバッグを使用する際、--config パラメーターと --debug-port パラメーターが必須です。

・--config はブレークポイントデバッグの IDE 環境を指定します。現在、VSCode、PyCharm、IntelliJ をサポートしています。

・--debug-port はデバッグのリッスンポートを指定します。

さらに、残りの 3 つのパラメーターはオプションです。

・--debug-args はプログラム起動時のデバッグ引数をカスタマイズします。デフォルトのデバッグ引数を指定しない場合は、記事末尾の付録を参照してください。

・--debugger-path はローカルの指定パスをプログラム実行環境の /tmp/debugger にマウントします。

・--tmp-dir はローカルの指定パスをプログラム実行環境の /tmp ディレクトリにマウントします。デバッグ中、プログラムが /tmp に書き込んだ結果ファイルがこのローカルディレクトリにマッピングされ、結果が期待通りかどうかを確認できます。

3. 実践演習

1)VSCode

VSCode を使用したブレークポイントデバッグは非常にシンプルです。次に、ブレークポイントデバッグのシナリオをイベント関数デバッグと HTTP 関数デバッグに分けて、それぞれ説明します。

・イベント関数のデバッグ:

ステップ 1:まず Serverless アプリケーションを起動します。ターミナルを開き、対象プロジェクトに移動して、起動コマンドを入力します。

#ローカルデバッグ

$ s local invoke --config vscode --debug-port 3000

#クラウド連携デバッグ

$ s proxied setup --config vscode --debug-port 3000

コマンドの実行を開始すると、ローカル関数計算実行環境が待機状態になり、呼び出しを待つ必要があります。同時に、現在のプロジェクトに .vscode/launch.json ファイルが生成されます。これは VSCode でのデバッグ用の設定ファイルです。ファイルが既に存在する場合は、起動コマンドが対応する設定テキストを出力します(下図参照)。この内容を使用して、既存の .vscode/launch.json の内容を上書きする必要があります。

.vscode/launch.json の更新内容サンプル

ステップ 2:ブレークポイントデバッガーを起動します。VSCode のインターフェイスを開き、s.yml の codeUri にあるソースコードを開きます。ブレークポイントを設定し、[デバッグの開始] ボタンをクリックします(下図参照)。

VSCode のデバッガー起動イメージ

ローカルデバッグの場合、デバッガーを起動するとプログラムが既に開始されており、ブレークポイントデバッグを開始できます。クラウド連携デバッグの場合、デバッガーを起動すると、起動コマンドのターミナルに「Debugger attached.」が表示され、デバッガーが正常に起動し呼び出しを待っていることを示します。次の手順に進むことができます。

ステップ 3:ブレークポイントデバッグを開始します。新しいターミナルページを開き、呼び出しコマンド s proxied invoke --event "hello" を入力すると、プログラムが起動し、ブレークポイントデバッグが開始されます。

ステップ 4:ブレークポイントデバッグを終了します。デバッグ完了後、ブレークポイントデバッガーを積極的に閉じます。クラウド連携デバッグのシナリオでは、一連の補助関数リソースが作成されます。そのため、デバッグ完了後に追加コストが発生しないよう、補助リソースをリリースする必要があります。「proxied cleanup」を実行するだけで補助リソースをリリースできます。

・PHP 7.2 イベント関数のデバッグ

PHP 7.2 ランタイムのローカルデバッグ IDE として VSCode を推奨します。ブレークポイントデバッグの手順が他の言語と異なるため、別途説明します。現在、PHP 7.2 ランタイムはクラウド連携デバッグのブレークポイントデバッグをサポートしていません。

ステップ 1:まず Serverless アプリケーションを起動します。ターミナルを開き、対象プロジェクトに移動して、起動コマンド s local invoke --config vscode --debug-port 3000 を入力します。

通常と異なり、イベント関数の起動コマンドの実行が完了すると、待機状態にならずにそのまま実行が成功します。同時に、前述の通り、現在のプロジェクトに .vscode/launch.json ファイルが生成されます。

ステップ 2:ブレークポイントデバッガーを起動します。VSCode のインターフェイスを開き、s.yml の codeUri にあるソースコードを開きます。ブレークポイントを設定し、[デバッグの開始] ボタンをクリックします(下図参照)。

ステップ 3:ブレークポイントデバッグを開始します。新しいターミナルページを開き、起動コマンド s local invoke --config vscode --debug-port 3000 を再度入力します。その後、プログラムが起動し、ブレークポイントデバッグが開始されます。

ステップ 4:ブレークポイントデバッグを終了します。デバッグ完了後、ブレークポイントデバッガーを積極的に閉じます。

・HTTP 関数のデバッグ

クラウド連携デバッグでは、HTTP 関数のデバッグ方法はイベント関数と同じですので、ここでは繰り返し説明しません。このセクションでは、主にローカルでの HTTP 関数のデバッグ方法を紹介します。

ステップ 1:Serverless アプリケーションを起動します。まずターミナルを開き、対象プロジェクトに移動して、起動コマンド s local start --config vscode --debug-port 3000 を入力します。起動コマンドの実行後、ローカル関数計算実行環境が呼び出し待ちでブロックされ、HTTP 関数にアクセスするための URL が出力されます。

ステップ 2:ブレークポイントデバッガーを起動します。VSCode のインターフェイスを開き、s.yml の codeUri にあるソースコードを開いてブレークポイントを設定し、[デバッグの開始] ボタンをクリックします(図参照)。このとき、起動コマンドのターミナルに「Debugger attached.」が表示され、デバッガーが正常に起動し呼び出しを待っていることを示します。

VSCode のデバッガー起動イメージ

ステップ 3:ブレークポイントデバッグを開始します。curl コマンドやブラウザなどの方法で HTTP 関数の URL にアクセスします。これでプログラムが起動し、ブレークポイントデバッグが開始されます。

ステップ 4:ブレークポイントデバッグを終了します。デバッグ完了後、ブレークポイントデバッガーを積極的に閉じ、起動コマンドのターミナルで Ctrl+C を実行してデバッグプロセスを終了します。

・PHP 7.2 HTTP 関数のデバッグ

PHP 7.2 ランタイムのローカルデバッグ IDE として VSCode を推奨します。ブレークポイントデバッグの手順が他の言語と異なるため、別途説明します。現在、PHP 7.2 ランタイムはクラウド連携デバッグのブレークポイントデバッグをサポートしていません。

ステップ 1:まず Serverless アプリケーションを起動します。ターミナルを開き、対象プロジェクトに移動して、起動コマンド s local start --config vscode --debug-port 3000 を入力します。起動コマンドの実行後、現在のプロジェクトに .vscode/launch.json ファイルが生成されます。前述の通り、ブロック状態になるため、Ctrl+C を実行して終了する必要があります。

ステップ 2:ブレークポイントデバッガーを起動します。VSCode のインターフェイスを開き、s.yml の codeUri にあるソースコードを開きます。ブレークポイントを設定し、[デバッグの開始] ボタンをクリックします(下図参照)。

ステップ 3:ブレークポイントデバッグを開始します。新しいターミナルページを開き、起動コマンド s local start --config vscode --debug-port 3000 を再度入力します。その後、ローカル関数計算実行環境が呼び出し待ちでブロックされ、HTTP 関数の URL が出力されます。curl コマンドやブラウザなどの方法で HTTP 関数の URL にアクセスできます。これでプログラムが起動し、ブレークポイントデバッグが開始されます。

ステップ 4:ブレークポイントデバッグを終了します。デバッグ完了後、ブレークポイントデバッガーを積極的に閉じ、起動コマンドのターミナルで Ctrl+C を実行してデバッグプロセスを終了します。

2)IntelliJ

IntelliJ を使用したブレークポイントデバッグでは、言語ごとに IDE 内で対応するブレークポイントデバッガーを手動で設定する必要があります。IntelliJ で最もよく開発される言語は Java であり、IDE を変更した後に異なる手順は「ブレークポイントデバッガーの起動」のみです。そのため、Java のイベント関数のローカルデバッグを例に、「ブレークポイントデバッガーの起動」の手順を詳しく説明します。

ステップ 1:Serverless アプリケーションの起動:Java はコンパイル型言語のため、起動前にプログラムをパッケージする必要があります。この例では mvn package を使用して関数をパッケージし、起動コマンド s local invoke --config intellij --debug-port 3000 を実行します。

ステップ 2:ブレークポイントデバッガーの起動:IntelliJ のインターフェイスを開き、メニューバーから [Run] > [Edit Configurations] を選択します。

次に、下図のように新しい Remote JVM Debug を作成します。

Remote JVM Debug の新規作成

次に、デバッガー名をカスタマイズし、ポートを 3000 に設定します(下図参照)。

IntelliJ のデバッガー設定

最後に、s.yml の codeUri にあるソースコードを開き、ブレークポイントを設定し、[デバッグの開始] ボタンをクリックします(図参照)。

IntelliJ のブレークポイントデバッガー起動

3)PyCharm

現在、PyCharm ではローカルデバッグのみがブレークポイントデバッグ操作をサポートしており、対応ランタイムは Python 2.7 と Python 3 の 2 つです。PyCharm でブレークポイントデバッグを行う場合、IDE でのデバッガー設定だけでなく、ユーザーのソースコードへの侵入的な変更も必要です。操作手順が通常の内容と異なるため、このセクションのデバッグ手順を詳しく説明します。

ステップ 1:Serverless アプリケーションの起動:まずターミナルを開き、対象プロジェクトに移動して、起動コマンドを入力します。

#イベント関数

$ s local invoke --config pycharm --debug-port 3000

#HTTP 関数

$ s local start --config pycharm --debug-port 3000

通常と異なり、イベント関数の起動コマンドの実行が完了すると、待機状態にならずにそのまま実行が成功します。ここで、「Tips for PyCharm remote debug」の内容を記録しておく必要があります。具体的な内容例は図の通りです。記録後、HTTP 関数の場合は Ctrl+C を入力して起動プログラムを終了します。

Tips for PyCharm remote debug の内容例

ステップ 2:次に、ブレークポイントデバッガーを起動します。ブレークポイントデバッガーの起動には、主に IDE のデバッガー設定とソースコードの更新の 2 つのパートがあります。

まず、PyCharm のインターフェイスを開き、メニューバーから [Run] > [Edit Configurations] を選択します。

次に、図のように新しい Python Debug Server を作成します。

Python Debug Server の新規作成

次に、デバッガー名をカスタマイズし、ステップ 1 で取得した内容に基づいて IDE ホスト名、ポート、パス マッピングの設定を行います(図参照)。

PyCharm のデバッガー設定

次に、s.yml の codeUri にあるソースコードを開き、前述の内容例(Tips for PyCharm remote debug の内容例)のコードをソースコードの先頭に貼り付け、必要に応じてソースコードの指定箇所にブレークポイントを設定します。そして [デバッグの開始] ボタンをクリックします(PyCharm のブレークポイントデバッガー起動の図参照)。

Tips for PyCharm remote debug の内容例

PyCharm のブレークポイントデバッガー起動

ステップ 3:ブレークポイントデバッグを開始します。ターミナルを開き、対象プロジェクトに移動して、起動コマンドを実行します。このとき、ブレークポイントデバッグ関連のパラメーターは不要です。

#イベント関数

$ s local invoke

#HTTP 関数

$ s local start

イベント関数は起動コマンドの実行後、直接ブレークポイントデバッグに入ります。HTTP 関数は起動コマンドの実行後、まず curl コマンドやブラウザなどの方法で HTTP 関数の URL にアクセスします。これでプログラムが起動し、ブレークポイントデバッグが開始されます。

ステップ 4:ブレークポイントデバッグを終了します。デバッグ完了後、ブレークポイントデバッガーを積極的に閉じます。HTTP 関数の場合は、起動コマンドのターミナルで Ctrl+C を実行してデバッグプロセスを終了する必要があります。

最後に

サーバーレスアプリケーションのデバッグはこれまで批判されることもありましたが、各クラウドベンダーはデバッグ方向への継続的な探求を止めていません。Alibaba Cloud Function Compute を例にとると、現在、オンラインデバッグ、ローカルデバッグ、クラウド連携デバッグなど複数のデバッグスキームをサポートしています。Serverless Devs ツールが提供するアプリケーションデバッグ機能も非常に充実しています。

以上が共有した実践経験ですが、その過程でいくつかの改善点も見つかりました。

・ブレークポイントデバッグの手順が煩雑で、複数のページ間を行き来する必要があります。ツールを IDE に統合し、プラグイン形式ですべてのユーザーに提供し、プロセスを簡素化できれば、エクスペリエンスは大幅に向上します。

・ブレークポイントデバッグモードでのホットアップデート機能:HTTP 関数のブレークポイントデバッグ中、コードのホットアップデートはサポートされていません。コードを変更するたびにブレークポイントデバッグプロセスを再度実行する必要があり、スムーズさに欠けるエクスペリエンスとなっています。

・ブレークポイントデバッグ機能は現在、すべてのランタイムを完全にカバーしていません。たとえば、カスタムランタイムはブレークポイントデバッグをサポートしておらず、PHP ランタイムはクラウド連携デバッグをサポートしていません。

Related Articles

Explore More Special Offers

  1. 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

phone お問い合わせ
Hi, I'm Alibaba Cloud AI Assistant!
I can help with questions and solutions.