{"componentChunkName":"component---src-templates-blog-detail-tsx","path":"/blog/2020-04-20-serverless-scf","result":{"data":{"currentBlog":{"id":"43516b09-42fe-5a0d-9271-65ddd9a6e5c7","frontmatter":{"thumbnail":"https://img.serverlesscloud.cn/2020523/1590209384783-%E4%BC%81%E4%B8%9A%E5%BE%AE%E4%BF%A1%E6%88%AA%E5%9B%BE_15902093739970.png","authors":["YINUXY"],"categories":["user-stories"],"date":"2020-04-20T00:00:00.000Z","title":"使用 serverless 在腾讯云部署第一个函数","description":"现在 Serverless 这么火，那么就拿腾讯云云函数 SCF 做一个入门的 hello world。","authorslink":["https://cloud.tencent.com/developer/article/1616545"],"translators":null,"translatorslink":null,"tags":["Serverless","HelloWorld"],"keywords":"Serverless,云函数SCF,Serverless应用","outdated":true},"wordCount":{"words":121,"sentences":29,"paragraphs":29},"fileAbsolutePath":"/opt/build/repo/content/blog/2020-04-20-serverless-scf.md","fields":{"slug":"/blog/2020-04-20-serverless-scf/","keywords":["faas","go","java","nodejs","serverless","serverless framework","云函数","serverless","Serverless","sls","RequestId","dev","javascript","Duration"]},"html":"<p><code class=\"language-text\">Serverless</code> 是各大云服务商提供出来的一种无服务的计算资源。为什么叫无服务呢，因为如果你使用 <code class=\"language-text\">serverless</code>，你只需要关注应用层，而无需关心底层基础设施，无需运维。简而言之，<code class=\"language-text\">serverless</code> 并不是真的无服务，而是关于有服务的不归你管，云服务商帮你搞定，比如 <code class=\"language-text\">Google</code>，<code class=\"language-text\">AWS</code> 或者 <code class=\"language-text\">TencentCloud</code>。</p>\n<p>关注点分离，好呀好！有了 <code class=\"language-text\">serverless</code> 以后只需要也只能关心业务了，这也不知是喜是忧。但你也无需过于担心，这是对已有并且成熟的开发模式的挑战，解决痛点有限，因此很多团队对于替换为 <code class=\"language-text\">serverless</code> 也动力不足。</p>\n<p>但是我仍然建议你学习 <code class=\"language-text\">serverless</code>，毕竟各大云厂商对于 <code class=\"language-text\">serverless</code> 有很多免费额度可以让你薅羊毛，对于个人开发者利好。</p>\n<h2 id=\"serverless-framework\"><a href=\"#serverless-framework\" aria-label=\"serverless framework permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Serverless Framework</h2>\n<p><code class=\"language-text\">serverless</code> 是基于各大云服务商的产品，每一个云厂商对于 <code class=\"language-text\">serverless</code> 都有一套自己的 API。为了能够兼容这些 API，为了让你的代码 <code class=\"language-text\">Write Once, Run Everywhere</code>，于是 <code class=\"language-text\">serverless framework</code> 诞生了。</p>\n<blockquote>\n<p>通常认为 serverless = faas + baas，然而 serverless framework 只兼容到了 faas，对于 baas，如各家提供的数据存储服务，要做到兼容还是很难。</p>\n</blockquote>\n<h2 id=\"快速开始\"><a href=\"#%E5%BF%AB%E9%80%9F%E5%BC%80%E5%A7%8B\" aria-label=\"快速开始 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>快速开始</h2>\n<p><code class=\"language-text\">serverless framework</code> 与腾讯云的云函数来开始一个 <code class=\"language-text\">hello world</code> 吧！</p>\n<div\n              class=\"gatsby-code-button-container\"\n              data-toaster-id=\"59389530739529260000\"\n              data-toaster-class=\"gatsby-code-button-toaster\"\n              data-toaster-text-class=\"gatsby-code-button-toaster-text\"\n              data-toaster-text=\"代码复制成功\"\n              data-toaster-duration=\"3500\"\n              onClick=\"copyToClipboard(`\\$ npm install -g serverless`, `59389530739529260000`)\"\n            >\n              <div\n                class=\"gatsby-code-button\"\n                data-tooltip=\"\"\n              >\n                复制代码<svg class=\"gatsby-code-button-icon\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><path fill=\"none\" d=\"M0 0h24v24H0V0z\"/><path d=\"M16 1H2v16h2V3h12V1zm-1 4l6 6v12H6V5h9zm-1 7h5.5L14 6.5V12z\"/></svg>\n              </div>\n            </div>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\">$ npm install <span class=\"token operator\">-</span>g serverless</code></pre></div>\n<div\n              class=\"gatsby-code-button-container\"\n              data-toaster-id=\"95431032626200350000\"\n              data-toaster-class=\"gatsby-code-button-toaster\"\n              data-toaster-text-class=\"gatsby-code-button-toaster-text\"\n              data-toaster-text=\"代码复制成功\"\n              data-toaster-duration=\"3500\"\n              onClick=\"copyToClipboard(`\\$ mkdir hello\n\n\\$ cd hello\n\n\\$ serverless create --template tencent-nodejs --name hello\n\nServerless: Generating boilerplate...\n_______                             __\n|   _   .-----.----.--.--.-----.----|  .-----.-----.-----.\n|   |___|  -__|   _|  |  |  -__|   _|  |  -__|__ --|__ --|\n|____   |_____|__|  \\___/|_____|__| |__|_____|_____|_____|\n|   |   |             The Serverless Application Framework\n|       |                           serverless.com, v1.67.0\n-------'\n\nServerless: Successfully generated boilerplate for template: &quot;tencent-nodejs&quot;`, `95431032626200350000`)\"\n            >\n              <div\n                class=\"gatsby-code-button\"\n                data-tooltip=\"\"\n              >\n                复制代码<svg class=\"gatsby-code-button-icon\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><path fill=\"none\" d=\"M0 0h24v24H0V0z\"/><path d=\"M16 1H2v16h2V3h12V1zm-1 4l6 6v12H6V5h9zm-1 7h5.5L14 6.5V12z\"/></svg>\n              </div>\n            </div>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\">$ mkdir hello\n\n$ cd hello\n\n$ serverless create <span class=\"token operator\">--</span>template tencent<span class=\"token operator\">-</span>nodejs <span class=\"token operator\">--</span>name hello\n\nServerless<span class=\"token punctuation\">:</span> Generating boilerplate<span class=\"token operator\">...</span>\n_______                             __\n<span class=\"token operator\">|</span>   _   <span class=\"token punctuation\">.</span><span class=\"token operator\">--</span><span class=\"token operator\">--</span><span class=\"token operator\">-</span><span class=\"token punctuation\">.</span><span class=\"token operator\">--</span><span class=\"token operator\">--</span><span class=\"token punctuation\">.</span><span class=\"token operator\">--</span><span class=\"token punctuation\">.</span><span class=\"token operator\">--</span><span class=\"token punctuation\">.</span><span class=\"token operator\">--</span><span class=\"token operator\">--</span><span class=\"token operator\">-</span><span class=\"token punctuation\">.</span><span class=\"token operator\">--</span><span class=\"token operator\">--</span><span class=\"token operator\">|</span>  <span class=\"token punctuation\">.</span><span class=\"token operator\">--</span><span class=\"token operator\">--</span><span class=\"token operator\">-</span><span class=\"token punctuation\">.</span><span class=\"token operator\">--</span><span class=\"token operator\">--</span><span class=\"token operator\">-</span><span class=\"token punctuation\">.</span><span class=\"token operator\">--</span><span class=\"token operator\">--</span><span class=\"token operator\">-</span><span class=\"token punctuation\">.</span>\n<span class=\"token operator\">|</span>   <span class=\"token operator\">|</span>___<span class=\"token operator\">|</span>  <span class=\"token operator\">-</span>__<span class=\"token operator\">|</span>   _<span class=\"token operator\">|</span>  <span class=\"token operator\">|</span>  <span class=\"token operator\">|</span>  <span class=\"token operator\">-</span>__<span class=\"token operator\">|</span>   _<span class=\"token operator\">|</span>  <span class=\"token operator\">|</span>  <span class=\"token operator\">-</span>__<span class=\"token operator\">|</span>__ <span class=\"token operator\">--</span><span class=\"token operator\">|</span>__ <span class=\"token operator\">--</span><span class=\"token operator\">|</span>\n<span class=\"token operator\">|</span>____   <span class=\"token operator\">|</span>_____<span class=\"token operator\">|</span>__<span class=\"token operator\">|</span>  \\___<span class=\"token operator\">/</span><span class=\"token operator\">|</span>_____<span class=\"token operator\">|</span>__<span class=\"token operator\">|</span> <span class=\"token operator\">|</span>__<span class=\"token operator\">|</span>_____<span class=\"token operator\">|</span>_____<span class=\"token operator\">|</span>_____<span class=\"token operator\">|</span>\n<span class=\"token operator\">|</span>   <span class=\"token operator\">|</span>   <span class=\"token operator\">|</span>             The Serverless Application Framework\n<span class=\"token operator\">|</span>       <span class=\"token operator\">|</span>                           serverless<span class=\"token punctuation\">.</span>com<span class=\"token punctuation\">,</span> v1<span class=\"token punctuation\">.</span><span class=\"token number\">67.0</span>\n<span class=\"token operator\">--</span><span class=\"token operator\">--</span><span class=\"token operator\">--</span><span class=\"token operator\">-</span>'\n\nServerless<span class=\"token punctuation\">:</span> Successfully generated boilerplate <span class=\"token keyword\">for</span> template<span class=\"token punctuation\">:</span> <span class=\"token string\">\"tencent-nodejs\"</span></code></pre></div>\n<p>此时在 <code class=\"language-text\">hello</code> 目录自动生成了关于 <code class=\"language-text\">serverless</code> 在腾讯云的 <code class=\"language-text\">hello, world</code> 版。由于缺少关于腾讯云的 <code class=\"language-text\">plugin</code> 需要首先装包</p>\n<div\n              class=\"gatsby-code-button-container\"\n              data-toaster-id=\"40486191404896640000\"\n              data-toaster-class=\"gatsby-code-button-toaster\"\n              data-toaster-text-class=\"gatsby-code-button-toaster-text\"\n              data-toaster-text=\"代码复制成功\"\n              data-toaster-duration=\"3500\"\n              onClick=\"copyToClipboard(`\\$ npm i`, `40486191404896640000`)\"\n            >\n              <div\n                class=\"gatsby-code-button\"\n                data-tooltip=\"\"\n              >\n                复制代码<svg class=\"gatsby-code-button-icon\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><path fill=\"none\" d=\"M0 0h24v24H0V0z\"/><path d=\"M16 1H2v16h2V3h12V1zm-1 4l6 6v12H6V5h9zm-1 7h5.5L14 6.5V12z\"/></svg>\n              </div>\n            </div>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\">$ npm i</code></pre></div>\n<h2 id=\"简述\"><a href=\"#%E7%AE%80%E8%BF%B0\" aria-label=\"简述 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>简述</h2>\n<h3 id=\"serverlessyaml\"><a href=\"#serverlessyaml\" aria-label=\"serverlessyaml permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>serverless.yaml</h3>\n<p><code class=\"language-text\">serverless.yaml</code> 是 <code class=\"language-text\">serverless framework</code> 的核心，是一个 <code class=\"language-text\">sls</code> 服务的资源配置文件。如果把 <code class=\"language-text\">sls</code> 等同于 <code class=\"language-text\">faas + baas</code>，那么 <code class=\"language-text\">faas</code> 与 <code class=\"language-text\">baas</code> 的配置都在这里。</p>\n<div\n              class=\"gatsby-code-button-container\"\n              data-toaster-id=\"33366920467902040000\"\n              data-toaster-class=\"gatsby-code-button-toaster\"\n              data-toaster-text-class=\"gatsby-code-button-toaster-text\"\n              data-toaster-text=\"代码复制成功\"\n              data-toaster-duration=\"3500\"\n              onClick=\"copyToClipboard(`service: hello\n\n# 云厂商的信息，如 aws/google/aliyun/tencent\nprovider:\n  name: tencent\n  runtime: Nodejs8.9    # Nodejs 版本号\n  credentials: ~/credentials\n\nplugins:\n  - serverless-tencent-scf  # 腾讯云对 sls 的适配\n\nfunctions:\n  hello_world:          # 函数名\n    handler: index.main_handler # 该函数所调用的函数`, `33366920467902040000`)\"\n            >\n              <div\n                class=\"gatsby-code-button\"\n                data-tooltip=\"\"\n              >\n                复制代码<svg class=\"gatsby-code-button-icon\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><path fill=\"none\" d=\"M0 0h24v24H0V0z\"/><path d=\"M16 1H2v16h2V3h12V1zm-1 4l6 6v12H6V5h9zm-1 7h5.5L14 6.5V12z\"/></svg>\n              </div>\n            </div>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\">service<span class=\"token punctuation\">:</span> hello\n\n# 云厂商的信息，如 aws<span class=\"token operator\">/</span>google<span class=\"token operator\">/</span>aliyun<span class=\"token operator\">/</span>tencent\nprovider<span class=\"token punctuation\">:</span>\n  name<span class=\"token punctuation\">:</span> tencent\n  runtime<span class=\"token punctuation\">:</span> Nodejs8<span class=\"token punctuation\">.</span><span class=\"token number\">9</span>    # Nodejs 版本号\n  credentials<span class=\"token punctuation\">:</span> <span class=\"token operator\">~</span><span class=\"token operator\">/</span>credentials\n\nplugins<span class=\"token punctuation\">:</span>\n  <span class=\"token operator\">-</span> serverless<span class=\"token operator\">-</span>tencent<span class=\"token operator\">-</span>scf  # 腾讯云对 sls 的适配\n\nfunctions<span class=\"token punctuation\">:</span>\n  hello_world<span class=\"token punctuation\">:</span>          # 函数名\n    handler<span class=\"token punctuation\">:</span> index<span class=\"token punctuation\">.</span>main_handler # 该函数所调用的函数</code></pre></div>\n<h3 id=\"indexjs\"><a href=\"#indexjs\" aria-label=\"indexjs permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>index.js</h3>\n<div\n              class=\"gatsby-code-button-container\"\n              data-toaster-id=\"95046736912839360000\"\n              data-toaster-class=\"gatsby-code-button-toaster\"\n              data-toaster-text-class=\"gatsby-code-button-toaster-text\"\n              data-toaster-text=\"代码复制成功\"\n              data-toaster-duration=\"3500\"\n              onClick=\"copyToClipboard(`exports.main_handler = (event, context, callback) => {\n  callback(null, 'Hello World');\n};`, `95046736912839360000`)\"\n            >\n              <div\n                class=\"gatsby-code-button\"\n                data-tooltip=\"\"\n              >\n                复制代码<svg class=\"gatsby-code-button-icon\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><path fill=\"none\" d=\"M0 0h24v24H0V0z\"/><path d=\"M16 1H2v16h2V3h12V1zm-1 4l6 6v12H6V5h9zm-1 7h5.5L14 6.5V12z\"/></svg>\n              </div>\n            </div>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\">exports<span class=\"token punctuation\">.</span><span class=\"token function-variable function\">main_handler</span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\">event<span class=\"token punctuation\">,</span> context<span class=\"token punctuation\">,</span> callback</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token function\">callback</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">null</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'Hello World'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p><code class=\"language-text\">index.js</code> 中是 <code class=\"language-text\">faas</code> 中的核心，<code class=\"language-text\">function</code>。在 <code class=\"language-text\">callback</code> 中来回调你所需的数据。</p>\n<h2 id=\"部署\"><a href=\"#%E9%83%A8%E7%BD%B2\" aria-label=\"部署 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>部署</h2>\n<p>使用 <code class=\"language-text\">sls deploy</code> 打包资源并部署到腾讯云，此时需要你在腾讯云的凭证信息。<strong>你可以通过与腾讯云绑定的微信扫码授权</strong>，相比其他厂商需要手动维护凭证信息，还是很方便的。</p>\n<div\n              class=\"gatsby-code-button-container\"\n              data-toaster-id=\"11249321926414924000\"\n              data-toaster-class=\"gatsby-code-button-toaster\"\n              data-toaster-text-class=\"gatsby-code-button-toaster-text\"\n              data-toaster-text=\"代码复制成功\"\n              data-toaster-duration=\"3500\"\n              onClick=\"copyToClipboard(`# 其中 sls 是 serverless 的简写\n\\$ sls deploy\nServerless: Packaging service...\nServerless: Excluding development dependencies...\nServerless: Uploading service package to cos[sls-cloudfunction-ap-guangzhou]. hello-dev-KamjFZ-2020-04-15-21-47-11.zip\nServerless: Uploaded package successful /Users/xiange/Documents/hello/.serverless/hello.zip\nServerless: Creating function hello-dev-hello_world\nServerless: Updating code...\nServerless: Updating configure...\nServerless: Created function hello-dev-hello_world\nServerless: Setting tags for function hello-dev-hello_world\nServerless: Creating trigger for function hello-dev-hello_world\nServerless: Deployed function hello-dev-hello_world successful\nServerless: Service Information\n\nservice: hello\nstage: dev\nregion: ap-guangzhou\nstack: hello-dev\nresources: 1\nfunctions:   hello_world: hello-dev-hello_world\n\n# 如果需要部署到生产环境\n\\$ sls deploy --stage  production`, `11249321926414924000`)\"\n            >\n              <div\n                class=\"gatsby-code-button\"\n                data-tooltip=\"\"\n              >\n                复制代码<svg class=\"gatsby-code-button-icon\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><path fill=\"none\" d=\"M0 0h24v24H0V0z\"/><path d=\"M16 1H2v16h2V3h12V1zm-1 4l6 6v12H6V5h9zm-1 7h5.5L14 6.5V12z\"/></svg>\n              </div>\n            </div>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"># 其中 sls 是 serverless 的简写\n$ sls deploy\nServerless<span class=\"token punctuation\">:</span> Packaging service<span class=\"token operator\">...</span>\nServerless<span class=\"token punctuation\">:</span> Excluding development dependencies<span class=\"token operator\">...</span>\nServerless<span class=\"token punctuation\">:</span> Uploading service <span class=\"token keyword\">package</span> to cos<span class=\"token punctuation\">[</span>sls<span class=\"token operator\">-</span>cloudfunction<span class=\"token operator\">-</span>ap<span class=\"token operator\">-</span>guangzhou<span class=\"token punctuation\">]</span><span class=\"token punctuation\">.</span> hello<span class=\"token operator\">-</span>dev<span class=\"token operator\">-</span>KamjFZ<span class=\"token operator\">-</span><span class=\"token number\">2020</span><span class=\"token operator\">-</span><span class=\"token number\">04</span><span class=\"token operator\">-</span><span class=\"token number\">15</span><span class=\"token operator\">-</span><span class=\"token number\">21</span><span class=\"token operator\">-</span><span class=\"token number\">47</span><span class=\"token operator\">-</span><span class=\"token number\">11.</span>zip\nServerless<span class=\"token punctuation\">:</span> Uploaded <span class=\"token keyword\">package</span> successful <span class=\"token operator\">/</span>Users<span class=\"token operator\">/</span>xiange<span class=\"token operator\">/</span>Documents<span class=\"token operator\">/</span>hello<span class=\"token operator\">/</span><span class=\"token punctuation\">.</span>serverless<span class=\"token operator\">/</span>hello<span class=\"token punctuation\">.</span>zip\nServerless<span class=\"token punctuation\">:</span> Creating <span class=\"token keyword\">function</span> hello<span class=\"token operator\">-</span>dev<span class=\"token operator\">-</span>hello_world\nServerless<span class=\"token punctuation\">:</span> Updating code<span class=\"token operator\">...</span>\nServerless<span class=\"token punctuation\">:</span> Updating configure<span class=\"token operator\">...</span>\nServerless<span class=\"token punctuation\">:</span> Created <span class=\"token keyword\">function</span> hello<span class=\"token operator\">-</span>dev<span class=\"token operator\">-</span>hello_world\nServerless<span class=\"token punctuation\">:</span> Setting tags <span class=\"token keyword\">for</span> <span class=\"token keyword\">function</span> hello<span class=\"token operator\">-</span>dev<span class=\"token operator\">-</span>hello_world\nServerless<span class=\"token punctuation\">:</span> Creating trigger <span class=\"token keyword\">for</span> <span class=\"token keyword\">function</span> hello<span class=\"token operator\">-</span>dev<span class=\"token operator\">-</span>hello_world\nServerless<span class=\"token punctuation\">:</span> Deployed <span class=\"token keyword\">function</span> hello<span class=\"token operator\">-</span>dev<span class=\"token operator\">-</span>hello_world successful\nServerless<span class=\"token punctuation\">:</span> Service Information\n\nservice<span class=\"token punctuation\">:</span> hello\nstage<span class=\"token punctuation\">:</span> dev\nregion<span class=\"token punctuation\">:</span> ap<span class=\"token operator\">-</span>guangzhou\nstack<span class=\"token punctuation\">:</span> hello<span class=\"token operator\">-</span>dev\nresources<span class=\"token punctuation\">:</span> <span class=\"token number\">1</span>\nfunctions<span class=\"token punctuation\">:</span>   hello_world<span class=\"token punctuation\">:</span> hello<span class=\"token operator\">-</span>dev<span class=\"token operator\">-</span>hello_world\n\n# 如果需要部署到生产环境\n$ sls deploy <span class=\"token operator\">--</span>stage  production</code></pre></div>\n<p>稍等一分钟，就可以看到部署成功的信息。</p>\n<h2 id=\"函数调用\"><a href=\"#%E5%87%BD%E6%95%B0%E8%B0%83%E7%94%A8\" aria-label=\"函数调用 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>函数调用</h2>\n<p>本地函数可以很简单地通过调用函数名来执行，<code class=\"language-text\">serverless</code> 也可以通过 <code class=\"language-text\">sls invoke</code> 来调用函数。</p>\n<div\n              class=\"gatsby-code-button-container\"\n              data-toaster-id=\"81985331799832670000\"\n              data-toaster-class=\"gatsby-code-button-toaster\"\n              data-toaster-text-class=\"gatsby-code-button-toaster-text\"\n              data-toaster-text=\"代码复制成功\"\n              data-toaster-duration=\"3500\"\n              onClick=\"copyToClipboard(`\\$ sls invoke --function hello_world\n\nServerless:\n\n&quot;Hello World&quot;\n\n----------\nLog:\nSTART RequestId: 69ffc57f-0afb-471b-865d-c7289e16f2ac\nEvent RequestId: 69ffc57f-0afb-471b-865d-c7289e16f2ac\n\nEND RequestId: 69ffc57f-0afb-471b-865d-c7289e16f2ac\nReport RequestId: 69ffc57f-0afb-471b-865d-c7289e16f2ac Duration:64ms Memory:128MB MemUsage:21.8125MB`, `81985331799832670000`)\"\n            >\n              <div\n                class=\"gatsby-code-button\"\n                data-tooltip=\"\"\n              >\n                复制代码<svg class=\"gatsby-code-button-icon\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><path fill=\"none\" d=\"M0 0h24v24H0V0z\"/><path d=\"M16 1H2v16h2V3h12V1zm-1 4l6 6v12H6V5h9zm-1 7h5.5L14 6.5V12z\"/></svg>\n              </div>\n            </div>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\">$ sls invoke <span class=\"token operator\">--</span><span class=\"token keyword\">function</span> hello_world\n\nServerless<span class=\"token punctuation\">:</span>\n\n<span class=\"token string\">\"Hello World\"</span>\n\n<span class=\"token operator\">--</span><span class=\"token operator\">--</span><span class=\"token operator\">--</span><span class=\"token operator\">--</span><span class=\"token operator\">--</span>\nLog<span class=\"token punctuation\">:</span>\n<span class=\"token constant\">START</span> RequestId<span class=\"token punctuation\">:</span> <span class=\"token number\">69</span>ffc57f<span class=\"token operator\">-</span><span class=\"token number\">0</span>afb<span class=\"token operator\">-</span><span class=\"token number\">471</span>b<span class=\"token operator\">-</span><span class=\"token number\">865</span>d<span class=\"token operator\">-</span>c7289e16f2ac\nEvent RequestId<span class=\"token punctuation\">:</span> <span class=\"token number\">69</span>ffc57f<span class=\"token operator\">-</span><span class=\"token number\">0</span>afb<span class=\"token operator\">-</span><span class=\"token number\">471</span>b<span class=\"token operator\">-</span><span class=\"token number\">865</span>d<span class=\"token operator\">-</span>c7289e16f2ac\n\n<span class=\"token constant\">END</span> RequestId<span class=\"token punctuation\">:</span> <span class=\"token number\">69</span>ffc57f<span class=\"token operator\">-</span><span class=\"token number\">0</span>afb<span class=\"token operator\">-</span><span class=\"token number\">471</span>b<span class=\"token operator\">-</span><span class=\"token number\">865</span>d<span class=\"token operator\">-</span>c7289e16f2ac\nReport RequestId<span class=\"token punctuation\">:</span> <span class=\"token number\">69</span>ffc57f<span class=\"token operator\">-</span><span class=\"token number\">0</span>afb<span class=\"token operator\">-</span><span class=\"token number\">471</span>b<span class=\"token operator\">-</span><span class=\"token number\">865</span>d<span class=\"token operator\">-</span>c7289e16f2ac Duration<span class=\"token punctuation\">:</span><span class=\"token number\">64</span>ms Memory<span class=\"token punctuation\">:</span><span class=\"token number\">128</span>MB MemUsage<span class=\"token punctuation\">:</span><span class=\"token number\">21.8125</span>MB</code></pre></div>\n<h2 id=\"日志与监控\"><a href=\"#%E6%97%A5%E5%BF%97%E4%B8%8E%E7%9B%91%E6%8E%A7\" aria-label=\"日志与监控 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>日志与监控</h2>\n<p><code class=\"language-text\">serverless</code> 号称 <code class=\"language-text\">noops</code>，很大程度上是由于少了 <code class=\"language-text\">log</code> 及 <code class=\"language-text\">metrics</code> 的基础设施搭建。使用 <code class=\"language-text\">sls logs</code> 与 <code class=\"language-text\">sls metrics</code> 可以获取相关信息，但是丰富度及可定制化就完全不如 <code class=\"language-text\">kubernetes</code> 运维了。</p>\n<div\n              class=\"gatsby-code-button-container\"\n              data-toaster-id=\"17067939422316591000\"\n              data-toaster-class=\"gatsby-code-button-toaster\"\n              data-toaster-text-class=\"gatsby-code-button-toaster-text\"\n              data-toaster-text=\"代码复制成功\"\n              data-toaster-duration=\"3500\"\n              onClick=\"copyToClipboard(`\\$ sls logs\nServerless: {\n  &quot;FunctionName&quot;: &quot;hello-dev-hello_world&quot;,\n  &quot;RetMsg&quot;: &quot;\\&quot;Hello World\\&quot;&quot;,\n  &quot;RequestId&quot;: &quot;fc72271f-eede-4dbb-8315-f24045597db7&quot;,\n  &quot;StartTime&quot;: &quot;2020-04-15 21:48:55&quot;,\n  &quot;RetCode&quot;: 0,\n  &quot;InvokeFinished&quot;: 1,\n  &quot;Duration&quot;: 1,\n  &quot;BillDuration&quot;: 1,\n  &quot;MemUsage&quot;: 74870780,\n  &quot;Log&quot;: &quot;START RequestId: fc72271f-eede-4dbb-8315-f24045597db7\\nEvent RequestId: fc72271f-eede-4dbb-8315-f24045597db7\\n2020-04-15T13:48:55.344Z\\tfc72271f-eede-4dbb-8315-f24045597db7\\t{}\\n \\nEND RequestId: fc72271f-eede-4dbb-8315-f24045597db7\\nReport RequestId: fc72271f-eede-4dbb-8315-f24045597db7 Duration:1ms Memory:128MB MemUsage:71.402344MB&quot;,\n  &quot;Level&quot;: &quot;&quot;,\n  &quot;Source&quot;: &quot;&quot;\n}\nServerless: {\n  &quot;FunctionName&quot;: &quot;hello-dev-hello_world&quot;,\n  &quot;RetMsg&quot;: &quot;\\&quot;Hello World\\&quot;&quot;,\n  &quot;RequestId&quot;: &quot;62b5760e-5545-4316-bef6-423d4b568396&quot;,\n  &quot;StartTime&quot;: &quot;2020-04-15 21:48:45&quot;,\n  &quot;RetCode&quot;: 0,\n  &quot;InvokeFinished&quot;: 1,\n  &quot;Duration&quot;: 2,\n  &quot;BillDuration&quot;: 2,\n  &quot;MemUsage&quot;: 74870780,\n  &quot;Log&quot;: &quot;START RequestId: 62b5760e-5545-4316-bef6-423d4b568396\\nEvent RequestId: 62b5760e-5545-4316-bef6-423d4b568396\\n2020-04-15T13:48:47.995Z\\t62b5760e-5545-4316-bef6-423d4b568396\\t{}\\n \\nEND RequestId: 62b5760e-5545-4316-bef6-423d4b568396\\nReport RequestId: 62b5760e-5545-4316-bef6-423d4b568396 Duration:2ms Memory:128MB MemUsage:71.402344MB&quot;,\n  &quot;Level&quot;: &quot;&quot;,\n  &quot;Source&quot;: &quot;&quot;\n}\n\n\\$ sls metrics\nServerless: Service wide metrics\n2020-04-14 22:09:45 - 2020-04-15 22:09:45\n\nService:\n  Invocations: 5\n  Outflows: 0\n  Errors: 0\n  Duration(avg.): 7.3 ms\n\nFunctions:\n  hello-dev-hello_world:\n    Invocations: 5\n    Outflows: 0\n    Errors: 0\n    Duration(avg.): 7.3 ms`, `17067939422316591000`)\"\n            >\n              <div\n                class=\"gatsby-code-button\"\n                data-tooltip=\"\"\n              >\n                复制代码<svg class=\"gatsby-code-button-icon\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><path fill=\"none\" d=\"M0 0h24v24H0V0z\"/><path d=\"M16 1H2v16h2V3h12V1zm-1 4l6 6v12H6V5h9zm-1 7h5.5L14 6.5V12z\"/></svg>\n              </div>\n            </div>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\">$ sls logs\nServerless<span class=\"token punctuation\">:</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token string\">\"FunctionName\"</span><span class=\"token punctuation\">:</span> <span class=\"token string\">\"hello-dev-hello_world\"</span><span class=\"token punctuation\">,</span>\n  <span class=\"token string\">\"RetMsg\"</span><span class=\"token punctuation\">:</span> <span class=\"token string\">\"\\\"Hello World\\\"\"</span><span class=\"token punctuation\">,</span>\n  <span class=\"token string\">\"RequestId\"</span><span class=\"token punctuation\">:</span> <span class=\"token string\">\"fc72271f-eede-4dbb-8315-f24045597db7\"</span><span class=\"token punctuation\">,</span>\n  <span class=\"token string\">\"StartTime\"</span><span class=\"token punctuation\">:</span> <span class=\"token string\">\"2020-04-15 21:48:55\"</span><span class=\"token punctuation\">,</span>\n  <span class=\"token string\">\"RetCode\"</span><span class=\"token punctuation\">:</span> <span class=\"token number\">0</span><span class=\"token punctuation\">,</span>\n  <span class=\"token string\">\"InvokeFinished\"</span><span class=\"token punctuation\">:</span> <span class=\"token number\">1</span><span class=\"token punctuation\">,</span>\n  <span class=\"token string\">\"Duration\"</span><span class=\"token punctuation\">:</span> <span class=\"token number\">1</span><span class=\"token punctuation\">,</span>\n  <span class=\"token string\">\"BillDuration\"</span><span class=\"token punctuation\">:</span> <span class=\"token number\">1</span><span class=\"token punctuation\">,</span>\n  <span class=\"token string\">\"MemUsage\"</span><span class=\"token punctuation\">:</span> <span class=\"token number\">74870780</span><span class=\"token punctuation\">,</span>\n  <span class=\"token string\">\"Log\"</span><span class=\"token punctuation\">:</span> <span class=\"token string\">\"START RequestId: fc72271f-eede-4dbb-8315-f24045597db7\\nEvent RequestId: fc72271f-eede-4dbb-8315-f24045597db7\\n2020-04-15T13:48:55.344Z\\tfc72271f-eede-4dbb-8315-f24045597db7\\t{}\\n \\nEND RequestId: fc72271f-eede-4dbb-8315-f24045597db7\\nReport RequestId: fc72271f-eede-4dbb-8315-f24045597db7 Duration:1ms Memory:128MB MemUsage:71.402344MB\"</span><span class=\"token punctuation\">,</span>\n  <span class=\"token string\">\"Level\"</span><span class=\"token punctuation\">:</span> <span class=\"token string\">\"\"</span><span class=\"token punctuation\">,</span>\n  <span class=\"token string\">\"Source\"</span><span class=\"token punctuation\">:</span> <span class=\"token string\">\"\"</span>\n<span class=\"token punctuation\">}</span>\nServerless<span class=\"token punctuation\">:</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token string\">\"FunctionName\"</span><span class=\"token punctuation\">:</span> <span class=\"token string\">\"hello-dev-hello_world\"</span><span class=\"token punctuation\">,</span>\n  <span class=\"token string\">\"RetMsg\"</span><span class=\"token punctuation\">:</span> <span class=\"token string\">\"\\\"Hello World\\\"\"</span><span class=\"token punctuation\">,</span>\n  <span class=\"token string\">\"RequestId\"</span><span class=\"token punctuation\">:</span> <span class=\"token string\">\"62b5760e-5545-4316-bef6-423d4b568396\"</span><span class=\"token punctuation\">,</span>\n  <span class=\"token string\">\"StartTime\"</span><span class=\"token punctuation\">:</span> <span class=\"token string\">\"2020-04-15 21:48:45\"</span><span class=\"token punctuation\">,</span>\n  <span class=\"token string\">\"RetCode\"</span><span class=\"token punctuation\">:</span> <span class=\"token number\">0</span><span class=\"token punctuation\">,</span>\n  <span class=\"token string\">\"InvokeFinished\"</span><span class=\"token punctuation\">:</span> <span class=\"token number\">1</span><span class=\"token punctuation\">,</span>\n  <span class=\"token string\">\"Duration\"</span><span class=\"token punctuation\">:</span> <span class=\"token number\">2</span><span class=\"token punctuation\">,</span>\n  <span class=\"token string\">\"BillDuration\"</span><span class=\"token punctuation\">:</span> <span class=\"token number\">2</span><span class=\"token punctuation\">,</span>\n  <span class=\"token string\">\"MemUsage\"</span><span class=\"token punctuation\">:</span> <span class=\"token number\">74870780</span><span class=\"token punctuation\">,</span>\n  <span class=\"token string\">\"Log\"</span><span class=\"token punctuation\">:</span> <span class=\"token string\">\"START RequestId: 62b5760e-5545-4316-bef6-423d4b568396\\nEvent RequestId: 62b5760e-5545-4316-bef6-423d4b568396\\n2020-04-15T13:48:47.995Z\\t62b5760e-5545-4316-bef6-423d4b568396\\t{}\\n \\nEND RequestId: 62b5760e-5545-4316-bef6-423d4b568396\\nReport RequestId: 62b5760e-5545-4316-bef6-423d4b568396 Duration:2ms Memory:128MB MemUsage:71.402344MB\"</span><span class=\"token punctuation\">,</span>\n  <span class=\"token string\">\"Level\"</span><span class=\"token punctuation\">:</span> <span class=\"token string\">\"\"</span><span class=\"token punctuation\">,</span>\n  <span class=\"token string\">\"Source\"</span><span class=\"token punctuation\">:</span> <span class=\"token string\">\"\"</span>\n<span class=\"token punctuation\">}</span>\n\n$ sls metrics\nServerless<span class=\"token punctuation\">:</span> Service wide metrics\n<span class=\"token number\">2020</span><span class=\"token operator\">-</span><span class=\"token number\">04</span><span class=\"token operator\">-</span><span class=\"token number\">14</span> <span class=\"token number\">22</span><span class=\"token punctuation\">:</span><span class=\"token number\">09</span><span class=\"token punctuation\">:</span><span class=\"token number\">45</span> <span class=\"token operator\">-</span> <span class=\"token number\">2020</span><span class=\"token operator\">-</span><span class=\"token number\">04</span><span class=\"token operator\">-</span><span class=\"token number\">15</span> <span class=\"token number\">22</span><span class=\"token punctuation\">:</span><span class=\"token number\">09</span><span class=\"token punctuation\">:</span><span class=\"token number\">45</span>\n\nService<span class=\"token punctuation\">:</span>\n  Invocations<span class=\"token punctuation\">:</span> <span class=\"token number\">5</span>\n  Outflows<span class=\"token punctuation\">:</span> <span class=\"token number\">0</span>\n  Errors<span class=\"token punctuation\">:</span> <span class=\"token number\">0</span>\n  <span class=\"token function\">Duration</span><span class=\"token punctuation\">(</span>avg<span class=\"token punctuation\">.</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span> <span class=\"token number\">7.3</span> ms\n\nFunctions<span class=\"token punctuation\">:</span>\n  hello<span class=\"token operator\">-</span>dev<span class=\"token operator\">-</span>hello_world<span class=\"token punctuation\">:</span>\n    Invocations<span class=\"token punctuation\">:</span> <span class=\"token number\">5</span>\n    Outflows<span class=\"token punctuation\">:</span> <span class=\"token number\">0</span>\n    Errors<span class=\"token punctuation\">:</span> <span class=\"token number\">0</span>\n    <span class=\"token function\">Duration</span><span class=\"token punctuation\">(</span>avg<span class=\"token punctuation\">.</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span> <span class=\"token number\">7.3</span> ms</code></pre></div>\n<h2 id=\"小结\"><a href=\"#%E5%B0%8F%E7%BB%93\" aria-label=\"小结 permalink\" class=\"anchor\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>小结</h2>\n<p>从本篇文章，可以大概知道如何在腾讯云初建一个 <code class=\"language-text\">serverless</code> 函数，并且知道了如何执行并且调用它。而关于 <code class=\"language-text\">sls</code> 的原理，如服务编排以及容器化，可以再继续深入学习。</p>\n<hr>\n<div id='scf-deploy-iframe-or-md'></div>\n<hr>\n<blockquote>\n<p><strong>传送门：</strong></p>\n<ul>\n<li>GitHub: <a href=\"https://github.com/serverless/serverless/blob/master/README_CN.md\">github.com/serverless</a></li>\n<li>官网：<a href=\"https://serverless.com/\">serverless.com</a></li>\n</ul>\n</blockquote>\n<p>欢迎访问：<a href=\"https://serverlesscloud.cn/\">Serverless 中文网</a>，您可以在 <a href=\"https://serverlesscloud.cn/best-practice\">最佳实践</a> 里体验更多关于 Serverless 应用的开发！</p>","tableOfContents":"<ul>\n<li><a href=\"/blog/2020-04-20-serverless-scf/#serverless-framework\">Serverless Framework</a></li>\n<li><a href=\"/blog/2020-04-20-serverless-scf/#%E5%BF%AB%E9%80%9F%E5%BC%80%E5%A7%8B\">快速开始</a></li>\n<li>\n<p><a href=\"/blog/2020-04-20-serverless-scf/#%E7%AE%80%E8%BF%B0\">简述</a></p>\n<ul>\n<li><a href=\"/blog/2020-04-20-serverless-scf/#serverlessyaml\">serverless.yaml</a></li>\n<li><a href=\"/blog/2020-04-20-serverless-scf/#indexjs\">index.js</a></li>\n</ul>\n</li>\n<li><a href=\"/blog/2020-04-20-serverless-scf/#%E9%83%A8%E7%BD%B2\">部署</a></li>\n<li><a href=\"/blog/2020-04-20-serverless-scf/#%E5%87%BD%E6%95%B0%E8%B0%83%E7%94%A8\">函数调用</a></li>\n<li><a href=\"/blog/2020-04-20-serverless-scf/#%E6%97%A5%E5%BF%97%E4%B8%8E%E7%9B%91%E6%8E%A7\">日志与监控</a></li>\n<li><a href=\"/blog/2020-04-20-serverless-scf/#%E5%B0%8F%E7%BB%93\">小结</a></li>\n</ul>"},"previousBlog":{"id":"20c49255-cc0f-536e-9ea3-ce6e704ec0f6","frontmatter":{"thumbnail":"https://main.qcloudimg.com/raw/9d6b77350f4fbe80b315a0e159914b78.jpg","authors":["Serverless 社区"],"categories":["meetup"],"date":"2020-04-21T00:00:00.000Z","title":"体验一键部署 Serverless 动态网站，玩转 WordPress 视频征稿大赛！","description":"视频拍摄礼盒、腾讯牛鹅公仔、腾讯视频月卡、罗技无线键鼠等你来领！","authorslink":null,"translators":null,"translatorslink":null,"tags":["Serverless","Meetup"],"keywords":null,"outdated":null},"wordCount":{"words":112,"sentences":22,"paragraphs":22},"fileAbsolutePath":"/opt/build/repo/content/blog/2021-04-21-wordpress-meetup.md","fields":{"slug":"/blog/2021-04-21-wordpress-meetup/","keywords":["serverless","WordPress","视频","Serverless","投稿","奖品","活动","云加","wordpress"]}},"nextBlog":{"id":"04432dc5-1456-5b39-8a05-7b5ae3492394","frontmatter":{"thumbnail":"https://img.serverlesscloud.cn/2020327/1585306882223-9.jpg","authors":["serverless 社区"],"categories":["meetup"],"date":"2020-04-15T00:00:00.000Z","title":"Serverless 中文社区有奖征稿","description":"欢迎将您的技术实践、开发经验分享更多人借鉴学习！","authorslink":["https://serverlesscloud.cn"],"translators":null,"translatorslink":null,"tags":["Serverless","Meetup"],"keywords":"Serverless 全局变量组件,Serverless 征稿,Serverless Component","outdated":null},"wordCount":{"words":184,"sentences":26,"paragraphs":26},"fileAbsolutePath":"/opt/build/repo/content/blog/2020-04-15-article-meetup.md","fields":{"slug":"/blog/2020-04-15-article-meetup/","keywords":["serverless","云函数","Serverless","社区","serverless","开发","Framework","学习","礼品","整理"]}},"recommendBlogs":{"edges":[{"node":{"id":"4300b21c-7209-5256-86ff-0d38e3daec9b","frontmatter":{"thumbnail":"https://main.qcloudimg.com/raw/14f1c8eed372e76c1b139703b2f6d0fa.jpg","authors":["KieranMcCarthy"],"categories":["user-stories","engineering-culture"],"date":"2018-01-09T00:00:00.000Z","title":"我是如何在四年时间里，从厨师转行为 Serverless 应用开发者","description":"我是厨师出身，现在成为了一名 Serverless 应用开发者。","authorslink":["https://serverless.com/author/kieranmccarthy/"],"translators":["Aceyclee"],"translatorslink":["https://www.zhihu.com/people/Aceyclee"],"tags":["应用开发","Serverless"],"keywords":"Serverless 应用开发,Serverless 管理,厨师转行为 Serverless 应用开发者","outdated":null},"wordCount":{"words":285,"sentences":38,"paragraphs":36},"fileAbsolutePath":"/opt/build/repo/content/blog/2018-01-09-from-chef-to-serverless-developer-in-4-years.md","fields":{"slug":"/blog/2018-01-09-from-chef-to-serverless-developer-in-4-years/","keywords":["无服务器","无服务器开发","云函数","学习","Serverless","构建","Framework","开发者","服务器","应用","学位","简历"]}}},{"node":{"id":"713a0563-4bf9-5721-bacb-3b4ef609fe4a","frontmatter":{"thumbnail":"https://s3-us-west-2.amazonaws.com/assets.blog.serverless.com/camp-fire/camp-fire-housing-thumb.jpg","authors":["EricWyne"],"categories":["guides-and-tutorials","user-stories"],"date":"2018-12-05T00:00:00.000Z","title":"Serverless Twitter 机器人帮助为坎普山火受灾者安置住房","description":"加利福尼亚州的坎普山火致使数千人流离失所，为此，我构建了一个简单的 Serverless Twitter 机器人来帮助将受灾者安置在临时住房！","authorslink":["https://serverless.com/author/ericwyne/"],"translators":["Aceyclee"],"translatorslink":["zhihu.com/people/Aceyclee"],"tags":null,"keywords":null,"outdated":null},"wordCount":{"words":157,"sentences":26,"paragraphs":26},"fileAbsolutePath":"/opt/build/repo/content/blog/2018-12-05-serverless-twitter-camp-fire.md","fields":{"slug":"/blog/2018-12-05-serverless-twitter-camp-fire/","keywords":["serverless","无服务器","云函数","Serverless","org","住房","Twitter","函数","受灾","机器人","山火"]}}},{"node":{"id":"98602143-b837-5f50-a24f-3b1ec76044d7","frontmatter":{"thumbnail":"https://s3-us-west-2.amazonaws.com/assets.blog.serverless.com/sqquid/sqquid-serverless-thumb.jpg","authors":["RonPeled"],"categories":["user-stories"],"date":"2018-12-17T00:00:00.000Z","title":"SQQUID：100% 无服务器初创公司","description":"SQQUID 将 AWS Lambda 和无服务器框架用于其核心产品和营销网站。我们来看看一个完全无服务器的初创公司是怎样的。","authorslink":null,"translators":null,"translatorslink":null,"tags":null,"keywords":null,"outdated":null},"wordCount":{"words":266,"sentences":42,"paragraphs":42},"fileAbsolutePath":"/opt/build/repo/content/blog/2018-12-17-sqquid-one-hundred-percent-serverless.md","fields":{"slug":"/blog/2018-12-17-sqquid-one-hundred-percent-serverless/","keywords":["go","serverless","无服务器","无服务器架构","服务器","架构","Lambda","集成","FaaS","串行","系统"]}}},{"node":{"id":"29dc2e58-d2ba-56f9-aee1-d21b0bc62e0e","frontmatter":{"thumbnail":"https://s3-us-west-2.amazonaws.com/assets.blog.serverless.com/ao-com-story/ao-serverless-thumbnail.png","authors":["NickGottlieb"],"categories":["user-stories"],"date":"2019-04-24T00:00:00.000Z","title":"AO.com：逐渐转向无服务器优先","description":"AO.com 的 SCV 团队率先尝试无服务器服务。折服于无服务器框架的快速周转时间和低维护成本，整个团队逐渐转向无服务器优先。","authorslink":null,"translators":null,"translatorslink":null,"tags":null,"keywords":null,"outdated":null},"wordCount":{"words":236,"sentences":42,"paragraphs":35},"fileAbsolutePath":"/opt/build/repo/content/blog/2019-04-24-ao-serverless-first.md","fields":{"slug":"/blog/2019-04-24-ao-serverless-first/","keywords":["serverless","无服务器","服务器","团队","Lambda","功能","构建"]}}},{"node":{"id":"752d08d1-387a-5bde-acf3-98141baab294","frontmatter":{"thumbnail":"https://img.serverlesscloud.cn/2020414/1586871710979-%E5%85%AC%E5%85%B1%E7%94%A8.png","authors":["Anycodes"],"categories":["user-stories"],"date":"2019-06-20T00:00:00.000Z","title":"如何用 Serverless 为 Python 云函数打包依赖","description":"在使用无服务器云函数SCF时通常会遇到导入第三方库的问题，很多小伙伴比较头疼是：应该如何打包进去？这里，推荐几个不错的方法。","authorslink":["https://zhuanlan.zhihu.com/ServerlessGo"],"translators":null,"translatorslink":null,"tags":["云函数","Serverless"],"keywords":"Serverless,Serverless应用,无服务器云函数","outdated":null},"wordCount":{"words":81,"sentences":43,"paragraphs":43},"fileAbsolutePath":"/opt/build/repo/content/blog/2019-06-20-for-python-cloud-functions.md","fields":{"slug":"/blog/2019-06-20-for-python-cloud-functions/","keywords":["java","serverless","无服务器","无服务器云函数","云函数","serverlesscloud","安装","serverless","pillowtest"]}}},{"node":{"id":"2dc78814-9d77-555b-a1bb-ad202c8ec2d1","frontmatter":{"thumbnail":"https://s3-us-west-2.amazonaws.com/assets.blog.serverless.com/cloudforecast/thumbnail.png","authors":["FrancoisLagier"],"categories":["user-stories"],"date":"2019-08-07T00:00:00.000Z","title":"Serverless：初创企业的理想选择？（CloudForecast 案例分析）","description":"CloudForecast 是 2018 年成立的一家独立初创企业，本文将介绍他们决定选择 Serverless 的原因。","authorslink":["https://serverless.com/author/francoislagier/"],"translators":["Aceyclee"],"translatorslink":["zhihu.com/people/Aceyclee"],"tags":null,"keywords":null,"outdated":null},"wordCount":{"words":211,"sentences":29,"paragraphs":29},"fileAbsolutePath":"/opt/build/repo/content/blog/2019-08-07-serverless-for-startups.md","fields":{"slug":"/blog/2019-08-07-serverless-for-startups/","keywords":["serverless","云函数","serverless","函数","Serverless","utm","Framework","blog","CloudForecast","cloudforecast"]}}},{"node":{"id":"97450b07-658b-5207-8216-1c7b9b51b115","frontmatter":{"thumbnail":"https://img.serverlesscloud.cn/2020114/1578988490344-v2-8b2cd2c5275aa2c5a3c5083a148a7a9f_1200x500.jpg","authors":["Anycodes"],"categories":["user-stories"],"date":"2019-09-01T00:00:00.000Z","title":"如何通过 Serverless 与自然语言处理，让搜索引擎「看」到你的博客","description":"Serverless 与自然语言处理结合的一个小应用","authorslink":["https://www.zhihu.com/people/liuyu-43-97"],"translators":null,"translatorslink":null,"tags":["个人博客","serverless"],"keywords":"Serverless 自然语言处理","outdated":null},"wordCount":{"words":106,"sentences":34,"paragraphs":34},"fileAbsolutePath":"/opt/build/repo/content/blog/2019-09-01-search-engine-blog.md","fields":{"slug":"/blog/2019-09-01-search-engine-blog/","keywords":["serverless","云函数","keywords","serverlesscloud","summary"]}}},{"node":{"id":"ae4fd2f8-515c-5aec-b584-38427ef33f7e","frontmatter":{"thumbnail":"https://img.serverlesscloud.cn/2020114/1578989800047-part-00492-780.jpg","authors":["Anycodes"],"categories":["guides-and-tutorials","user-stories"],"date":"2019-09-16T00:00:00.000Z","title":"突破传统 OJ 瓶颈，「判题姬」接入云函数","description":"通过 Serverless 实现在线编程","authorslink":["https://www.zhihu.com/people/liuyu-43-97"],"translators":null,"translatorslink":null,"tags":["在线编程","云函数"],"keywords":"Serverless 在线编程,Serverless OJ","outdated":null},"wordCount":{"words":169,"sentences":30,"paragraphs":30},"fileAbsolutePath":"/opt/build/repo/content/blog/2019-09-16-online-Judge.md","fields":{"slug":"/blog/2019-09-16-online-Judge/","keywords":["python","serverless","云函数","代码","函数","serverless"]}}}],"totalCount":64}},"pageContext":{"isCreatedByStatefulCreatePages":false,"blogId":"43516b09-42fe-5a0d-9271-65ddd9a6e5c7","previousBlogId":"20c49255-cc0f-536e-9ea3-ce6e704ec0f6","nextBlogId":"04432dc5-1456-5b39-8a05-7b5ae3492394","categories":["user-stories"]}}}