フォーム読み込み中
2022年9月21日掲載
この記事では、Node.jsおよびPythonそれぞれのコードをZIPファイルとしてAlibaba Cloud FunctionComputeにデプロイする方法を解説します
Alibaba Cloud FunctionComputeはサーバレスコンピューティングプラットフォームであり、開発ユーザは小さな関数のコードを作成するだけで、開発ユーザはサーバをプロビジョニングすることなく、その関数のコードを実行することができます。
本記事では、Alibaba Cloud FunctionComputeのデプロイ方法の1つである、コンソールでNode.jsおよびPythonそれぞれをデプロイする方法を説明します。Alibaba Cloud FunctionComputeはコンソール上にて関数のコードを入力するだけで実行もできますが、より大きなソースコード、およびAlibaba Cloud FunctionComputeコンソール上でデフォルトでは含まれていないライブラリがある場合でも、ZIPファイルを使うことでデプロイすることができます。
※本記事は 2022年9月時点の情報をもとにしております。実際のご利用にあたっては、必ず各社の最新情報をご確認ください。
Node.jsおよびPythonそれぞれのコードをZIPファイルとしてAlibaba Cloud FunctionComputeへデプロイする際の流れ、構成図としては次の通りになります。
最初にFunctionComputeでデプロイしたいNode.jsソースコードを準備します。本記事では、node_test_zipというソースコードフォルダを作成し、FunctionComputeのハンドラーが含まれるindex.jsを作成します。ハンドラー(handler)はサーバレスとして利用する言語の関数の開始位置となるもので、HTTPトリガー、イベントトリガーなどさまざまなトリガーによって実行される際に呼び出すエントリポイントです。このハンドラーは必須項目であり、ハンドラーを呼び出すことで、サーバレスとしての関数コード(以降スクリプト)が実行開始されます。ここでは、event handlerを例とします。
'use strict'; const moment = require('moment'); exports.handler = (event, context, callback) => { console.log('hello world'); callback(null, moment().utcOffset(9).format('YYYY-MM-DD HH:mm:ss')); }
FunctionComputeのNode.jsランタイム環境は、一般的なNode.jsモジュールと、使用可能な共通モジュールを提供します。カスタマイズされたScriptには、サードパーティの依存関係を必要とする場合があります。 上記のソースコードでは、日付を操作するためのmomentと呼ばれるパッケージが必要であり、デプロイ前に準備する必要があります。これらのパッケージはnpmでローカルに管理します。
`npm i<package name>--save` コマンドを実行して必要なパッケージをローカルにインストールした後、node_modulesフォルダ(関連するパッケージコードを含む)とpackage.json (必要なパッケージ情報を含む) が index.jsと同じフォルダの下にあります。
最後に、これらが含まれているソースコードフォルダ内の全てのファイルをZIPファイルへ圧縮します。ZIPファイル生成後はFunctionCompute上でデプロイする際に使用します。
デプロイしたいNode.jsソースコードの準備が出来たら、Alibaba Cloudコンソール画面から、FunctionComputeを開きます。Function Computeサービスが現在のアカウントですでにアクティブ状態になっていることを確認します。もしまだアクティブ状態になってない場合はこの際アクティベーションにします。FunctionComputeを開き、Node.jsをデプロイする専用のサービス・リソースを新規で作成します。流れとして、①「Create Service」で新規サービスを立ち上げ、②サービス名やロギング、Tracing Analytsisなど作成に必要な情報を入力、③サービスに必要な情報の入力が完了すればOKボタンを押すと、サービスが作成されます。以降はこのサービス・リソース配下にてFunctionという名のリソースでさまざまな関数のコードをデプロイすることができます。
ランタイムとしてNodeを使用して新しいFunctionを作成し、先ほど準備したZIPファイルをコードとしてアップロードします。ランタイムはコードを実行するために必要な言語設定等環境のことを指します。特にRequest Type(ここではEvent Requestsを使用)の設定が正しいことを確認します。 ZIPパッケージ経由で機能をデプロイするには、Code Upload Method を`Upload ZIP`に変更し、先ほど準備したZIPファイルを選択します。
ZIPファイルのアップロードが上手くいけば、FunctionComputeのCode編集画面に関連コードが表示されます。ソースコードを直接編集するか、’Test Function’ ボタンをクリックしてテストすることができます。
上記で展開したスクリプトでは、現在の日付情報が特定の形式で返されます。
以上が、Zipファイルを使ってNode.jsソースコードをFunctionCompute上にてデプロイする方法になります。
次にPythonソースコードをFunctionComputeでデプロイする方法をご紹介します。python_test_zipというソースコードフォルダを作成し、FunctionComputeのHandlerとして特定の関数を持つindex.pyを作成します。ここでは、Event Handlerを例とします。
上記のソースコードは次の通りです。
import requests def handler(event, context): response = requests.get('http://google.com/') print(response.text) return response.status_code
FunctionComputeのPythonランタイム環境は、一般的なPythonモジュールに加えて、Alibaba Cloud SDKパッケージや画像操作用のその他モジュールを含むビルドインモジュールを提供します。カスタマイズされたScriptには、サードパーティの依存関係が必要な場合があります。 デモでは、HTTP通信用ライブラリのrequestsという名前のサードパーティパッケージが必要であり、デプロイ前にローカルで準備する必要があります。これらのパッケージはpipを使用してローカルで管理します。
`pip3 install <パッケージ名> -t .` コマンドを実行して必要なパッケージをローカルにインストールすると、index.pyに関連するパッケージフォルダができます。
次に、ソースコードフォルダ内のすべてのファイルをZIPファイルへ圧縮します。ZIPファイル生成後はFunctionCompute上でデプロイする際に使用します。
デプロイしたいPythonソースコードの準備が出来たら、Alibaba Cloudコンソール画面から、FunctionComputeを開き、Pythonをデプロイする専用のサービス・リソースを新規で作成します。上記、すでに作成済のサービス・リソースがあれば、そのサービス・リソース配下にてPythonによるFunctionを追加する形で作成します。この作成方法は上記Node.jsと同じになります。
デプロイする関数コードをインラインエディタでチェックし、コンソールでテストします。上記のデプロイする関数コードの中身は、Googleホームページにアクセスし、関連するHTTPステータスコードを返すものです。
テストの結果、HTTP 200が無事返却されたので、成功です。以上が、Zipファイルを使ってPythonソースコードをFunctionCompute上にてデプロイする方法になります。
ここでいくつかの補足事項を記載します。
関数コードの内容で大幅修正したい場合、関数コード作成後にコンソールを介してソースコードを上書きで更新することができます。ソースコードを上書き更新する方法はコード、ZIPファイル、フォルダ、OSSオブジェクトなどがあります。ちなみにZIPファイルサイズの制限は500 MBです。 一方、新しいZIPファイルをアップロードして [Save and Deploy] をクリックすると、既存のコードが上書きされ、最新バージョンのコードを取得できなくなるため、注意が必要です。
FunctionComputeで関数コードを実行する際、Request Handlerが常に正しいかどうかを確認する必要があります。例えば、Request Handlerをindex.jsとして設定した場合、ターゲットスクリプトファイルはルートディレクトリに置く必要があります。そうしないと、ターゲット関数の設定を変更するまで以下のエラーが発生します。
この例では、Handlerはルートディレクトリではなく`src`フォルダにあるため、「/code/index.jsがない(/code/index.js is missing)」というエラーメッセージが表示されます。
これを修正するには、更新されたコードを正しい構造で再アップロードするか、Handlerの設定をそのまま変更する必要があります。
以下のコード構造体を例にとると、Request Handlerはnew_handler/index_new.handler2になります。
. └── new_handler └── index_new.js
関数構成を更新し、関数をテストします。
Node.jsおよびPythonそれぞれのコードをZIPファイルとしてAlibaba Cloud FunctionComputeにデプロイする方法をご紹介しました。本記事では、Alibaba Cloud FunctionComputeに含まれていないパッケージなどをローカルで準備し、それをFunctionComputeとしてデプロイする際はZIPファイルを使ったアプローチが非常に役立つと思いますので、FunctionComputeを使ったサーバレスアプリケーションを構築する際はご参考になれば幸いです。
条件に該当するページがございません