フォーム読み込み中
2022年9月22日掲載
Alibaba Cloud FunctionComputeをCLIベースでNode.jsおよびPythonそれぞれをデプロイする方法を紹介します。
Alibaba Cloud FunctionCompute はサーバレスコンピューティングプラットフォームであり、開発ユーザーは小さな関数のコードを作成するだけで、開発ユーザーはサーバをプロビジョニングすることなく、その関数のコードを実行することができます。
本記事では、Alibaba Cloud FunctionComputeのデプロイ方法の1つである、CLIベースでNode.jsおよびPythonそれぞれをデプロイする方法を説明します。Alibaba Cloud CLI(Command Line Interface)は、コマンドラインシェルのコマンドを使用してAlibaba CloudおよびFunctionCompute APIオペレーションを呼び出しすることができるオープンソースツールです。
CLIを使ってデプロイするモチベーションとして、例えばスクリプトの中身が定期的に更新されていくようなDevOps環境のもとで開発運用する場合、サーバレスの設定を外在化、つまり設定データをGitHubやZookeeper、Consul等CI/CDツールなど外部サードパーティやファイルに配置して、無人でもInfrastructure as Code(以降IaC)ベースで素早く自動デプロイするために、IaCを意識したCLIデプロイアプローチが重要になってきます。
※本記事は 2022年9月時点の情報をもとにしております。実際のご利用にあたっては、必ず各社の最新情報をご確認ください。
Alibaba Cloud FunctionCompute上でのNode.jsおよびPythonコードをAlibaba Cloud CLIでデプロイする際の流れ、構成図としては次の通りになります。
最初にAlibaba Cloud CLIコマンドツールを導入します。
Alibaba Cloud CLIコマンドツールを使用するには、Installation GuideとConfiguration Guideのガイドラインに従ってCLIコマンドツールをインストールし、設定します。著者はWindowsPCを使用しているので、Windowsを例に説明します。
CLIコマンドツールが正しく準備されたら、コマンド `aliyun configure --profile <profile name>` を使用してアカウントプロファイルを設定します。ターゲットアカウントは次のステップで使用されます。
Alibaba Cloud CLIでコマンドを実行することで、Function Compute APIオペレーションを呼び出すことができます。Function Computeの関連コマンドは`aliyun fc-open<function info>` です。
参考のためにFunction Compute CLIをフォローするか、直接alyun fc-openを実行してヘルプを得ることができます。
CLI導入準備ができたら、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上でデプロイする際に使用します。
ソースコードの準備ができたら、そのソースコードを保存・管理するためにAlibaba Cloud Object Storage Service(OSS)画面へ遷移し、OSS bucketを用意します。準備したZIPファイルをそこにアップロードします。ここでは、コンソールからOSSバケットを作成し、CLIコマンド`aliyun oss cp <source file> <OSS bucket path>` を使用してZIPパッケージをアップロードします。
Alibaba Cloudコンソール画面から、FunctionComputeを開きます。Function Computeサービスが現在のアカウントで既にアクティブ状態になっていることを確認します。もしまだアクティブ状態になってない場合はこの際アクティベーションにします。FunctionComputeを開き、Node.jsをデプロイする専用のサービス・リソースを新規で作成します。流れとして、①「Create Service」で新規サービスを立ち上げ、②サービス名やロギング、Tracing Analytsisなど作成に必要な情報を入力、③サービスに必要な情報の入力が完了すればOKボタンを押すと、サービスが作成されます。以降はこのサービス・リソース配下にてFunctionという名のリソースで様々な関数のコードをデプロイすることができます。
FunctionComputeコンソール画面にてサービス・リソース等の準備が出来たら、Alibaba Cloud CLIコマンド `aliyun fc-open POST /2021-04-06/services/<service name>/functions --body <JSON info>` を使用して、関数のコードを作成します。
今回はNodejs 14 ランタイムのもと、OSS bucketに保存しているターゲットのZIPファイルのソースコードをベースとしたコードを作成するため、パラメータは以下の通りに指定してコマンドを入力します。
aliyun fc-open POST /2021-04-06/services/ohara-bob-deploy/functions --body “{\"functionName\":\"ohara-bob-node-cli\",\"handler\":\"index.handler\",\"regionId\":\"ap-northeast-1\",\"runtime\":\"nodejs14\",\"serviceName\":\"ohara-bob-deploy\",\"initializer\":\"\",\"environmentVariables\":{},\"initializationTimeout\":3,\"instanceType\":\"e1\",\"memorySize\":512,\"timeout\":60,\"instanceConcurrency\":1,\"code\":{\"ossBucketName\":\"ohara-bob-jp\",\"ossObjectName\":\"fc-code/node_test_zip.zip\"}}”
コマンド入力が正しければ、コンソール画面にて関数名等が表示されます。
コンソール画面で作成した関数のコード、スクリプト、ランタイム、などをチェックします。コマンドの引数パラメータが正しければ、関連するソースコードと依存パッケージが正しく表示されています。
コマンド `aliyun fc-open POST /2021-04-06/services/<Service Name>/functions/<Function Name>/invocations` を使用して、作成された関数を呼び出します。上記で展開したスクリプトでは、現在の日付情報が特定の形式で戻されます。
以下の通りコマンドを入力します。
aliyun fc-open POST /2021-04-06/services/ohara-bob-deploy/functions/ohara-bob-node-cli/invocations
その結果、現在の日付情報が特定の形式で返されます。
以上が、CLIベースでFunctionCompute上のNode.jsソースコードをデプロイする方法になります。
次は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ソースコードの準備が出来たら、ターミナルからCLIコマンド `aliyun oss cp <source file> <OSS bucket path>` を実行して、事前に準備したZIPファイルをOSS bucketにアップロードします。次に、アップロードされたファイルをコンソールで確認します。
FunctionComputeコンソール画面にてサービス・リソース等の準備が出来たら、Alibaba Cloud CLIコマンド `aliyun fc-open POST /2021-04-06/services/<service name>/functions --body <JSON info>` を使用して、関数のコードを作成します。上記はNode.jsをランタイムパラメータ値として設定していますが、今回はPython3に設定します。
今回はpython3 ランタイムのもと、OSS bucketに保存しているターゲットのZIPファイルのソースコードをベースとしたコードを作成するため、パラメータは以下の通りに指定してコマンドを入力します。
aliyun fc-open POST /2021-04-06/services/ohara-bob-deploy/functions --body “{\"functionName\":\"ohara-bob-python-cli\",\"handler\":\"index.handler\",\"regionId\":\"ap-northeast-1\",\"runtime\":\"python3\",\"serviceName\":\"ohara-bob-deploy\",\"initializer\":\"\",\"environmentVariables\":{},\"initializationTimeout\":3,\"instanceType\":\"e1\",\"memorySize\":512,\"timeout\":60,\"instanceConcurrency\":1,\"code\":{\"ossBucketName\":\"ohara-bob-jp\",\"ossObjectName\":\"fc-code/python_test_zip.zip\"}}”
コマンド入力が正しければ、コンソール画面にて関数名等が表示されます。
コンソール画面で作成した関数のコード、スクリプト、ランタイム、などをチェックします。コマンドの引数パラメータが正しければ、関連するソースコードと依存パッケージが正しく表示されています。
コマンド`aliyun fc-open POST /2021-04-06/services/<Service Name>/functions/<Function Name>/invocations`で作成された関数を呼び出します。上記のデプロイする関数コードの中身は、Googleホームページにアクセスし、関連するHTTPステータスコードを返すものです。
以下の通りコマンドを入力します。
aliyun fc-open POST /2021-04-06/services/ohara-bob-deploy/functions/ohara-bob-python-cli/invocations
テストの結果、HTTP 200が無事返却されたので、成功です。以上が、CLIベースでFunctionCompute上のPythonソースコードをデプロイする方法になります。
Alibaba Cloud FunctionComputeをCLIベースでNode.jsおよびPythonそれぞれをデプロイする方法をご紹介しました。サーバレスアプリケーションはコードを記述しながら実行できるクラウドサービスなので、エンジニアリングリソースを小さくしてくれるため非常に便利です。一方、複数の開発者による並列操作、環境構成の管理、ランタイムで例えばPythonのバージョン変更など各環境で些細な変更が生じても素早く変更、自動的にデプロイしたい場合は、コンソール画面での操作では手入力等反映リソースが追いつかなくなるため、Infrastructure as Code(IaC)ベースで運用するのがベターです。
本記事では、IaCを意識しながらAlibaba Cloud CLIコマンドツールを介して、ローカルにあるソースコードをOSS bucketへアップロード保存し、そのままOSSからFunction ComputeへCLIコマンドでイベント操作をする方法を記載していますので、CI/CDパイプラインでサーバレスアプリケーションを構築する際はご参考になれば幸いです。
条件に該当するページがございません