Serverless 入門(三)- 初始項目解讀

執(zhí)行 serverless create --template aws-nodejs --path hello-world 后,就會在當前目錄生成一個名為 hello-world

代碼目錄結構如下:

├── .gitignore
├── handler.js
└── serverless.yml

1. .gitignore

.gitignore 里有3個忽略項,分別如下:

  • node_modules, 是 Node.js 包管理安裝后的目錄
  • jspm_packages,jspm 是 JavaScript 包管理器,是基于 SystemJS 這種通用模塊加載器之上的包管理器
  • .serverless 是一個 serverless 部署時的打包生成的目錄,當執(zhí)行 serverless deploy 時才會生成

2. handler.js

module.exports.hello = async (event, context) => {
  return {
    statusCode: 200,
    body: JSON.stringify({
      message: 'Go Serverless v1.0! Your function executed successfully!',
      input: event,
    }),
  };
};

handler.js 是用 --template aws-nodejs 參數(shù)生成出來的 js 文件, 代碼就是輸出一個 JSON。
注:如果我們選用 aws-nodejs-typescript 模塊,就會生成 handler.ts 文件。如果你用 Microsoft Azure 服務,也可以選用 azure-nodejs 模板。關于更多項目模板,我后面章節(jié)會細講,請關注哦!

3. serverless.yml

這是 yml 文件里除注釋外的代碼

service: hello-world
provider:
  name: aws
  runtime: nodejs8.10
functions:
  hello:
    handler: handler.hello

這相當于 serverless 的描述文件,介紹了服務名為hello-world,服務提供商是 aws,運行環(huán)境是nodejs 8.10 版

你可能要問,一定要是 nodejs8.10 嗎?我要用 Node 10 行不行? 答案是:不行!?。?/code>

runtime 目前只支持:java8, nodejs6.10, nodejs8.10, python2.7, python3.6, dotnetcore1.0, dotnetcore2.0, dotnetcore2.1, go1.x (截止2019-3-9)

第 6 行的 hello: 是調(diào)用時的名稱,如果改成 hellokenny:,調(diào)用時就要用 serverless invoke -f hellokenny

第 7 行的 handler: 是不能亂改的, 如果你以后發(fā)現(xiàn) Missing "handler" property in function "hello",首先就應該檢查一下,是不是把 handler: 改錯了。
第 7 行的 handler.hello 我們分兩部分來講,點號(.)前面的 handler 是文件名,后面的 hello 是默認函數(shù)名。

我們?nèi)绻秧椖扛夸浀?handler.js 改為 index.js,那就要把 serverless.yml 里的內(nèi)容改為 handler: index.hello。

4. 最后

當我們執(zhí)行過 serverless deploy 之后就會變成如下目錄結構:

├── .gitignore
├── .serverless
│   ├── cloudformation-template-create-stack.json
│   ├── cloudformation-template-update-stack.json
│   ├── hello-world.zip
│   └── serverless-state.json
├── handler.js
└── serverless.yml
  • hello-world.zip 是項目代碼文件打包后的壓縮文件
  • serverless-state.json 是服務部署后的信息,包含服務名稱,服務提供商等信息。部分內(nèi)容如下:
  "service": {
    "service": "hello-world",
    "serviceObject": {
      "name": "hello-world"
    },
    "provider": {
      "stage": "dev",
      "region": "us-east-1",
      "variableSyntax": "\\${([ ~:a-zA-Z0-9._@'\",\\-\\/\\(\\)]+?)}",
      "name": "aws",
      "runtime": "nodejs8.10",
      "versionFunctions": true,

相關文章

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容