Google Cloud FunctionにZIPファイル化したNode.jsおよびPythonのコードをデプロイしてみた(GUI編)

2022年9月27日掲載

キービジュアル

本記事では、Node.jsおよびPythonそれぞれのコードをZIPファイルとしてGoogle Cloud Functionにデプロイしてみました。

目次

  • Google Cloud Function のGUIを触ったことが無い方が対象です
  • 本記事では、Google Cloud Functionのデプロイ方法の1つである、コンソールでNode.jsおよびPythonそれぞれをデプロイする方法を説明します。
  • ZIPファイルを使ってデプロイする方法を説明します

はじめに

Google Cloud Functionはサーバレスコンピューティングプラットフォームであり、開発ユーザは小さな関数のコードを作成するだけで、開発ユーザはサーバをプロビジョニングすることなく、その関数のコードを実行することができます。

本記事では、Google Cloud Functionのデプロイ方法の1つである、コンソールでNode.jsおよびPythonそれぞれをデプロイする方法を説明します。Google Cloud Functionはコンソール上にて関数のコードを入力するだけで実行もできますが、より大きなソースコード、およびGoogle Cloud Functionコンソール上でデフォルトでは含まれていないライブラリがある場合でも、ZIPファイルを使うことでデプロイすることができます。
※本記事は 2022年9月時点の情報をもとにしております。実際のご利用にあたっては、必ず各社の最新情報をご確認ください。

1. 全体構成図

Node.jsおよびPythonそれぞれのコードをZIPファイルとしてGoogle Cloud Functionへデプロイする際の流れ、構成図としては次の通りになります。

2. Nodejsスクリプトをデプロイ - 1.Node.jsソースコードの準備

最初に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上でデプロイする際に使用します。

3. Nodejsスクリプトをデプロイ - 2.コンソールでCloud Functionを作成およびソースコードの展開

デプロイしたいNode.jsソースコードの準備が出来たら、Google Cloud Function Serviceコンソール画面に入り、`Create Function`ボタンをクリックしてNode.jsをデプロイする専用のFunctionリソースを新規で作成します

基本情報を入力し、 `Save`ボタンをクリックして設定を保存します。そのあと、`Next` ボタンをクリックして次ページへ遷移します。

操作画面

コード入力画面にて、ランタイムとエントリポイントを選択し、ソースコードオプションとして `ZIP Upload` を選択してから、先ほど準備したZIPファイルをアップロードします。
ZIPファイルアップロード後、`Deploy` ボタンをクリックしてFunctionをデプロイします。

操作画面

ここまで問題なく無事完了すると、対象のFunctionリソースはコンソールで使用可能な状態になります。

エントリポイントの問題、コールバック関数の問題、コード構造の問題など、コードにエラーがある場合は、次のような関連するエラーメッセージが表示されます。

4. Nodejsスクリプトをデプロイ - 3.Cloud Function上でデプロイ結果の確認及びテスト

Google Cloud Functionにはコードのプレビュー機能がありますが、制限事項としてコードが512 KB(実際には1.1 MB)より大きいため、プレビュー機能を利用することができません。

そのため、`Testing` タブに移動し、`Test The Function` ボタンをクリックしてスクリプトを実行します。

スクリプトに基づいて、現在の日付情報が特定の形式で表示されます。

以上が、Zipファイルを使ってNode.jsソースコードをCloud Function上にてデプロイする方法になります。

5. Pythonスクリプトをデプロイ - 1.Pythonソースコードの準備

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上でデプロイする際に使用します。

6. Pythonスクリプトをデプロイ - 2.コンソールでCloud Functionを作成およびソースコードの展開

デプロイしたいPythonソースコードの準備が出来たら、Cloud Functionコンソールのウィザードで、上記と同じ手順で新しいFunctionリソースを作成します。ランタイムはPython 3.8と選定し、事前に準備したZIPファイルをアップロードして展開します。

7. Pythonスクリプトをデプロイ - 3.Cloud Function上でデプロイ結果の確認及びテスト

Google Cloud Functionにはコードのプレビュー機能がありますが、これもNode.jsと同様、コード量が大きいためプレビュー機能を利用することができません。

そのため、`Testing` タブに移動し、`Test The Function` ボタンをクリックしてスクリプトを実行します。

デプロイする関数コードをインラインエディタでチェックし、コンソールでテストします。上記のデプロイする関数コードの中身は、Google Webサイトにアクセスし、関連するHTTPステータスコードを返すものです。

テストの結果、HTTP 200が無事返却されたので、成功です。以上が、Zipファイルを使ってPythonソースコードをGoogle Cloud Function上にてデプロイする方法になります。

8. 補足事項

・実行中のログを確認する方法

Function上のスクリプトが正常に終了しない場合は、`Log`タブで詳細情報を確認します。それで問題の切り分けが出来ます。

・ZIPパッケージからソースコードを更新する方法

ソースコードを更新する場合は、プレビュー機能は使用できないので、ZIPパッケージを再アップロードして既存のソースコードを置き換える必要があります。

9. 最後に

Node.jsおよびPythonそれぞれのコードをZIPファイルとしてGoogle Cloud Functionにデプロイする方法をご紹介しました。Google Cloud Functionは色々触ってみたところ、個人的にはパブリッククラウドの中でも最もフレキシブルに操作がしやすいサーバレスという印象がします。本記事では、Google Cloud Functionに含まれていないパッケージなどをローカルで準備し、それをAWS Google Cloud Functionとしてデプロイする際はZIPファイルを使ったアプローチが非常に役立つと思いますので、Google Cloud Functionを使ったサーバレスアプリケーションを構築する際はご参考になれば幸いです。

関連サービス

Google Cloud

Google サービスを支える、信頼性に富んだクラウドサービスです。お客さまのニーズにあわせて利用可能なコンピューティングサービスに始まり、データから価値を導き出す情報分析や、最先端の機械学習技術が搭載されています。

MSPサービス

MSP(Managed Service Provider)サービスは、お客さまのパブリッククラウドの導入から運用までをトータルでご提供するマネージドサービスです。

おすすめの記事

条件に該当するページがございません