フォーム読み込み中
2022年9月27日掲載
本記事では、Node.jsおよびPythonそれぞれのコードをZIPファイルとしてGoogle Cloud Functionにデプロイしてみました。
Google Cloud Functionはサーバレスコンピューティングプラットフォームであり、開発ユーザは小さな関数のコードを作成するだけで、開発ユーザはサーバをプロビジョニングすることなく、その関数のコードを実行することができます。
本記事では、Google Cloud Functionのデプロイ方法の1つである、コンソールでNode.jsおよびPythonそれぞれをデプロイする方法を説明します。Google Cloud Functionはコンソール上にて関数のコードを入力するだけで実行もできますが、より大きなソースコード、およびGoogle Cloud Functionコンソール上でデフォルトでは含まれていないライブラリがある場合でも、ZIPファイルを使うことでデプロイすることができます。
※本記事は 2022年9月時点の情報をもとにしております。実際のご利用にあたっては、必ず各社の最新情報をご確認ください。
Node.jsおよびPythonそれぞれのコードをZIPファイルとしてGoogle Cloud Functionへデプロイする際の流れ、構成図としては次の通りになります。
最初にGoogle Cloud FunctionでデプロイしたいNode.jsソースコードを準備します。本記事では、node_test_zip_gcpというソースコードフォルダを作成し、Cloud Functionのハンドラーが含まれるindex.jsを作成します。ハンドラー(handler)はサーバレスとして利用する言語の関数の開始位置となるもので、HTTPトリガー、イベントトリガーなどさまざまなトリガーによって実行される際に呼び出すエントリポイントです。このハンドラーは必須項目であり、ハンドラーを呼び出すことで、サーバレスとしての関数コード(以降スクリプト)が実行開始されます。ここでは、HTTP trigger を使用してコードをデプロイするため、コードは関連するフォーマットに従う必要があります。そうしないと、デプロイやテストでエラーが発生します。
上記のソースコードは次の通りです。
'use strict'; const moment = require('moment'); exports.handler = (req, res) => { let message = moment().utcOffset(9).format('YYYY-MM-DD HH:mm:ss'); res.status(200).send(message); };
Google Cloud FunctionのNode.jsランタイム環境は、一般的なNode.jsモジュールと、使用可能な共通モジュールを提供します。カスタマイズされたScriptには、サードパーティの依存関係を必要とする場合があります。 上記のソースコードでは、日付を操作するためのmomentと呼ばれるパッケージが必要であり、デプロイ前に準備する必要があります。これらのパッケージはnpmでローカルに管理します。
`npm i <package name> --save`コマンドを実行して必要なパッケージをローカルにインストールした後、node_modulesフォルダ(関連するパッケージコードを含む)とpackage.json (必要なパッケージ情報を含む)がindex.jsと同じフォルダの下にあります。
最後に、これらが含まれているソースコードフォルダ内の全てのファイルをZIPファイルへ圧縮します。ZIPファイル生成後はCloud Function上でデプロイする際に使用します。
デプロイしたいNode.jsソースコードの準備が出来たら、Google Cloud Function Serviceコンソール画面に入り、`Create Function`ボタンをクリックしてNode.jsをデプロイする専用のFunctionリソースを新規で作成します
基本情報を入力し、 `Save`ボタンをクリックして設定を保存します。そのあと、`Next` ボタンをクリックして次ページへ遷移します。
コード入力画面にて、ランタイムとエントリポイントを選択し、ソースコードオプションとして `ZIP Upload` を選択してから、先ほど準備したZIPファイルをアップロードします。
ZIPファイルアップロード後、`Deploy` ボタンをクリックしてFunctionをデプロイします。
ここまで問題なく無事完了すると、対象のFunctionリソースはコンソールで使用可能な状態になります。
エントリポイントの問題、コールバック関数の問題、コード構造の問題など、コードにエラーがある場合は、次のような関連するエラーメッセージが表示されます。
Google Cloud Functionにはコードのプレビュー機能がありますが、制限事項としてコードが512 KB(実際には1.1 MB)より大きいため、プレビュー機能を利用することができません。
そのため、`Testing` タブに移動し、`Test The Function` ボタンをクリックしてスクリプトを実行します。
スクリプトに基づいて、現在の日付情報が特定の形式で表示されます。
以上が、Zipファイルを使ってNode.jsソースコードをCloud Function上にてデプロイする方法になります。
PythonソースコードをGoogle Cloud Functionでデプロイする方法をご紹介します。python_test_zip_gcpというソースコードフォルダを作成し、Cloud Functionのハンドラーが含まれるmain.pyを作成します。今回はHTTP Triggerを使用してコード(スクリプト)をデプロイするようにします。
上記のソースコードは次の通りです。
'use strict'; import requests def handler(request): response = requests.get('http://google.com/') print(response.text) return "Access Google home page with status code: {0}".format(response.status_code)
Pythonで記述されたCloud Functionsの依存関係を指定するには、pipパッケージマネージャのrequirements.txtファイルを使用する方法と、ローカル依存関係を関数と一緒にパッケージ化する方法の2通りがあります。
今回のスクリプトでは、HTTP通信用ライブラリのrequestsという名前のサードパーティパッケージが必要であり、デプロイ前にローカルで準備する必要があります。これらのパッケージはpipを使用してローカルで管理します。
`pip3 install <package name> -t . `コマンドを実行して必要なパッケージをローカルにインストールすると、main.pyに関連するパッケージフォルダができます。
次に、ソースコードフォルダ内の全てのファイルをZIPファイルへ圧縮します。ZIPファイル生成後はCloud Function上でデプロイする際に使用します。
デプロイしたいPythonソースコードの準備が出来たら、Cloud Functionコンソールのウィザードで、上記と同じ手順で新しいFunctionリソースを作成します。ランタイムはPython 3.8と選定し、事前に準備したZIPファイルをアップロードして展開します。
Google Cloud Functionにはコードのプレビュー機能がありますが、これもNode.jsと同様、コード量が大きいためプレビュー機能を利用することができません。
そのため、`Testing` タブに移動し、`Test The Function` ボタンをクリックしてスクリプトを実行します。
デプロイする関数コードをインラインエディタでチェックし、コンソールでテストします。上記のデプロイする関数コードの中身は、Google Webサイトにアクセスし、関連するHTTPステータスコードを返すものです。
テストの結果、HTTP 200が無事返却されたので、成功です。以上が、Zipファイルを使ってPythonソースコードをGoogle Cloud Function上にてデプロイする方法になります。
Function上のスクリプトが正常に終了しない場合は、`Log`タブで詳細情報を確認します。それで問題の切り分けが出来ます。
ソースコードを更新する場合は、プレビュー機能は使用できないので、ZIPパッケージを再アップロードして既存のソースコードを置き換える必要があります。
Node.jsおよびPythonそれぞれのコードをZIPファイルとしてGoogle Cloud Functionにデプロイする方法をご紹介しました。Google Cloud Functionは色々触ってみたところ、個人的にはパブリッククラウドの中でも最もフレキシブルに操作がしやすいサーバレスという印象がします。本記事では、Google Cloud Functionに含まれていないパッケージなどをローカルで準備し、それをAWS Google Cloud Functionとしてデプロイする際はZIPファイルを使ったアプローチが非常に役立つと思いますので、Google Cloud Functionを使ったサーバレスアプリケーションを構築する際はご参考になれば幸いです。
サーバレスってなに?Alibaba Cloud, AWS, Azure, Google Cloud のサーバレスサービスを比べてみました
Google Cloud FunctionにZIPファイル化したNode.jsおよびPythonのコードをデプロイしてみた(GUI編) ← 本記事
Google Cloud FunctionをGoogle Cloud CLIベースでNode.jsおよびPythonそれぞれをデプロイしてみた(CLI編)
Azure FunctionにZIPファイル化したNode.jsおよびPythonのコードをデプロイしてみた(GUI編)
Azure FunctionをAzure CLIベースおよびAzure Function Core ToolsでNode.jsおよびPythonそれぞれをデプロイしてみた(CLI編)
Alibaba Cloud Function ComputeにZIPファイル化したNode.jsおよびPythonのコードをデプロイしてみた(GUI編)
Alibaba Cloud FunctionComputeをCLIベースでNode.jsおよびPythonそれぞれをデプロイしてみた(CLI編)
条件に該当するページがございません