Serverless Devsは、オープンソースのサーバーレス開発者ツールです。 Serverless Devsを使用すると、プロジェクトを効率的に開発、作成、テスト、デプロイし、ライフサイクル全体でプロジェクトを管理できます。 このトピックでは、Serverless Devsを使用してFunction Computeアプリケーションテンプレートをダウンロードし、そのテンプレートを使用して関数アプリケーションを開発およびデプロイする方法について説明します。 このトピックでは、Node.js 14の関数を使用します。
背景
このトピックでは、Serverless Devsでプロジェクトを初期化する2つの方法について説明します。 Serverless Devsを初めて使用する場合は、方法1を使用することを推奨します。 Serverless Devsでローカルデバッグ、リモート呼び出し、リソース削除などの操作を実行する方法について詳しく知りたい場合は、方法2を使用することをお勧めします。
始める前に
Function Computeを有効にします。 詳細については、「Function Computeの有効化」をご参照ください。
方法1: sコマンドを使用してリソースを管理する
次のコマンドを実行してプロジェクトを初期化します。
sudo s
コマンド出力に基づいてプロジェクトを初期化します。 次の出力が返されます。
No Serverless-Devs project is currently detected. Do you want to create a new project? Yes// No Serverless-Devs projects are found in the project file. Specify whether to create a project.
Serverless Awesome: https://github.com/Serverless-Devs/Serverless-Devs/blob/master/docs/zh/awesome.md
Hello Serverless for Cloud Vendors Alibaba Cloud Serverless// Specify a cloud service provider. In this example, Alibaba Cloud is used.
Hello, serverlesser. Which template do you like? Quick start [Deploy a Hello World function to FaaS]// Specify the template that you want to use. In this example, a template is used to deploy an event function in Node.js 14.
Which template do you like? [Event] Node.js 14
Create application command: [s init devsapp/start-fc-event-nodejs14]
Please input your project name (init dir) start-fc-event-nodejs14// By default, Serverless Devs generates a project name. You can also specify a custom project name.
file decompression completed
____ _ _ ___ _ _ _ _____ ____
/ _ \/ \ / \\ \/// \ /\/ \ /| / // _\
| / \|| | | | \ / | | ||| |\ || | __\| /
| |-||| |_/\| | / / | \_/|| | \|| | | | \__
\_/ \|\____/\_//_/ \____/\_/ \| \_/ \____/
please select credential alias default// Specify an alias that is configured in Serverless Devs.
Welcome to the Aliyun FC start application
This application requires to open these services:
FC : https://fc.console.aliyun.com/
* The project is initialized. You can go to the project directory and run the s deploy command to deploy the project.
Thanks for using Serverless-Devs
You could [cd /test/start-fc-event-nodejs14] and enjoy your serverless journey!
If you need help for this example, you can use [s -h] after you enter folder.
Document Star: https://github.com/Serverless-Devs/Serverless-Devs
Do you want to deploy the project immediately? Yes// Specify whether to deploy the project. In this example, the project is deployed.
......
helloworld:
region: cn-hangzhou
service:
name: hello-world-service
function:
name: event-nodejs14
runtime: nodejs14
handler: index.handler
memorySize: 128
timeout: 60
方法2: s initコマンドを使用してリソースを管理する
プロジェクトを初期化します。
プロジェクトディレクトリで次のコマンドを実行して、プロジェクトを初期化します。
sudo s init devsapp/start-fc-http-nodejs14
説明この例では、Node.js 14のHTTP関数を展開して、プロジェクトを初期化する方法を説明します。 別のランタイム環境に他の種類の関数をデプロイする場合は、
start-fc-http-nodejs14
のhttp
を、使用するトリガーの種類 (event
など) に置き換えます。nodejs14
を別のランタイム環境に置き換えることもできます。コマンド出力の例:
Serverless Awesome: https://github.com/Serverless-Devs/Serverless-Devs/blob/master/docs/zh/awesome.md Please input your project name (init dir) start-fc-http-nodejs14// By default, Serverless Devs automatically generates a project name. You can also specify a custom project name. file decompression completed ____ _ _ ___ _ _ _ _____ ____ / _ \/ \ / \\ \/// \ /\/ \ /| / // _\ | / \|| | | | \ / | | ||| |\ || | __\| / | |-||| |_/\| | / / | \_/|| | \|| | | | \__ \_/ \|\____/\_//_/ \____/\_/ \| \_/ \____/ please select credential alias default// Specify an alias that is configured in Serverless Devs. Welcome to the Aliyun FC start application This application requires to open these services: FC : https://fc.console.aliyun.com/ * The project is initialized. You can go to the project directory and run the s deploy command to deploy the project. Thanks for using Serverless-Devs You could [cd /test/start-fc-http-nodejs14] and enjoy your serverless journey! If you need help for this example, you can use [s -h] after you enter folder. Document Star: https://github.com/Serverless-Devs/Serverless-Devs Do you want to deploy the project immediately? No// Specify whether to deploy the project.
プロジェクトが初期化されると、ディレクトリにstart-fc-http-nodejs14という名前のファイルフォルダが生成されます。 start-fc-http-nodejs14ファイルフォルダには、次のファイルが含まれます。
s.yaml: Function Computeリソースを定義するYAMLファイル。 YAML形式の詳細については、「YAML構文と権限管理」をご参照ください。
s_en.yaml: YAMLファイル。 s_en.yamlはs.yamlと同じです。 デフォルトでは、システムはs.yamlファイルを使用します。 s_en.yamlファイルを使用するには、コマンドでファイルを明示的に指定します。 たとえば、アプリケーションをデプロイするときに、コマンドに
-t
パラメーター (s deploy -t s_en.yaml -y
) を追加します。code: codeフォルダーには、関数のコードロジックを編集できるindex.jsファイルが含まれています。
readme.md: 依存モジュールやプロジェクトの設定など、依存関係を定義するファイル。
次のコマンドを実行して、プロジェクトディレクトリに移動します。
cd start-fc-http-nodejs14
オプション: アプリケーションを作成します。
プロジェクトディレクトリで次のコマンドを実行して、アプリケーションを作成します。
sudo s build
この手順を実行した後、. sファイルが現在のディレクトリに生成され、出力が格納されます。 このファイルを使用して、コンピューターにアプリケーションをデバッグおよび展開できます。
オプション: コンピューターでアプリケーションをデバッグします。
アプリケーションをビルドした後、コンピューターでアプリケーションをデバッグして、アプリケーションが期待どおりに実行されるかどうかを確認できます。 関数の種類に基づいて、次のいずれかのコマンドを実行します。
sudo s local start
HTTP関数サンプルコマンド出力:
[2021-12-16 07:17:05] [INFO] [FC-LOCAL-INVOKE] - Using trigger for start: name: httpTrigger type: http config: authType: anonymous methods: - GET [2021-12-16 07:17:05] [INFO] [FC-LOCAL-INVOKE] - HttpTrigger httpTrigger of hello-world-service/http-trigger-nodejs14 was registered url: http://localhost:7013/2016-08-15/proxy/hello-world-service/http-trigger-nodejs14/ methods: GET authType: anonymous Tips: You can also use these commands to run or debug custom domain resources: Start with customDomain: * s local start auto Debug with customDomain: * s local start -d 3000 auto Tips for next step ====================== * Deploy Resources: s deploy helloworld: status: succeed function compute app listening on port 7013!
イベント関数
sudo s local invoke
実行結果は関数の種類によって異なります。
HTTP 関数
HTTP関数をデバッグする場合、デバッグコマンドの実行後にURLが返され、デバッグが停止します。 次のいずれかの方法を使用して、関数の実行をトリガーできます。
cURLを使用してHTTP関数をトリガーします。
curl http://localhost:7013/2016-08-15/proxy/hello-world-service/http-trigger-nodejs14/
ブラウザを使用してHTTP機能をトリガーします。
http://localhost:7013/2016-08-15/proxy/hello-world-service/http-trigger-nodejs14/
イベント機能
イベント関数をデバッグする場合、デバッグコマンドの実行後にデバッグ結果が返されます。
アプリケーションをデプロイします。
次のコマンドを実行して、アプリケーションをFunction Computeにデプロイします。
sudo s deploy -y
サンプルコマンドの出力:
Checking Service, Function, Triggers (0.82s) Creating Service, Function, Triggers (0.6s) Creating custom domain (0.31s) Tips for next step ====================== * Display information of the deployed resource: s info * Display metrics: s metrics * Display logs: s logs * Invoke remote function: s invoke * Remove Service: s remove service * Remove Function: s remove function * Remove Trigger: s remove trigger * Remove CustomDomain: s remove domain helloworld: region: cn-hangzhou service: name: hello-world-service function: name: http-trigger-nodejs14 runtime: nodejs14 handler: index.handler memorySize: 128 timeout: 60 url: custom_domain: - domain: http://http-trigger-nodejs14.hello-world-service.188077086902****.cn-hangzhou.fc.devsapp.net triggers: - type: http name: httpTrigger
実行が成功すると、アプリケーションはFunction Computeにデプロイされます。
オプション: アプリケーションをリモートでデバッグします。
次のコマンドを実行して、アプリケーションをリモートでデバッグします。
sudo s invoke -e '{"body": "","method":"GET","headers":{"header_1":"v1"},"queries":{"key":"value"},"path":"/"}'
コマンドのリクエストurlのサンプル:
Request url: https://188077086902****.cn-hangzhou.fc.aliyuncs.com/2016-08-15/proxy/hello-world-service/http-trigger-nodejs14/ ========= FC invoke Logs begin ========= FC Invoke Start RequestId: 6a3adedb-5d5d-4ac5-aa0b-2d43f4ace65c load code for handler:index.handler 2022-03-04T08:39:14.770Z 6a3adedb-5d5d-4ac5-aa0b-2d43f4ace65c [verbose] hello world FC Invoke End RequestId: 6a3adedb-5d5d-4ac5-aa0b-2d43f4ace65c Duration: 66.23 ms, Billed Duration: 67 ms, Memory Size: 128 MB, Max Memory Used: 42.48 MB ========= FC invoke Logs end ========= FC Invoke Result[Code: 200]: { path: '//', queries: { key: 'value' }, headers: { accept: 'application/json', authorization: 'FC LTAI4G4cwJkK4Rza6xd9****:KZsoanKle4SoRO8EjyOjY3duLlVlR1mp78hjV9WG****', date: 'Fri, 04 Mar 2022 08:39:14 GMT', header_1: 'v1', host: '188077086902****.cn-hangzhou.fc.aliyuncs.com', 'user-agent': 'Node.js(v14.17.4) OS(linux/x64) SDK(@alicloud/fc2@v2.5.0)', 'x-forwarded-proto': 'http' }, method: 'GET', requestURI: '/2016-08-15/proxy/hello-world-service/http-trigger-nodejs14//?key=value', clientIP: '47.97.XX.XX', body: '' } End of method: invoke
この例では、HTTP関数がデプロイされています。 リモートデバッグコマンドを実行すると、URLが返されます。 cURLを使用して、function ComputeでHTTP関数をトリガーできます。
curl https://188077086902****.cn-hangzhou.fc.aliyuncs.com/2016-08-15/proxy/hello-world-service/http-trigger-nodejs14/
オプション: アプリケーションを削除します。
次のコマンドを実行して、アプリケーションを削除します。
sudo s remove service
サンプルコマンド出力:
Need to delete the resource in the cn-hangzhou area, the operation service is hello-world-service: ...... Delete trigger hello-world-service/http-trigger-nodejs14/httpTrigger success. Delete function hello-world-service/http-trigger-nodejs14 success. Delete service hello-world-service success. [2022-03-04 08:40:26] [INFO] [FC] - Getting list on-demand: _FC_NAS_hello-world-service-ensure-nas-dir-exist-service [2022-03-04 08:40:26] [INFO] [FC] - Getting list provision: _FC_NAS_hello-world-service-ensure-nas-dir-exist-service [2022-03-04 08:40:26] [INFO] [FC] - Getting listAliases: _FC_NAS_hello-world-service-ensure-nas-dir-exist-service [2022-03-04 08:40:26] [INFO] [FC] - Getting list on-demand: _FC_NAS_hello-world-service [2022-03-04 08:40:26] [INFO] [FC] - Getting list provision: _FC_NAS_hello-world-service [2022-03-04 08:40:26] [INFO] [FC] - Getting listAliases: _FC_NAS_hello-world-service End of method: remove
実行が成功すると、アプリケーションは削除されます。