{"componentChunkName":"component---src-templates-blog-detail-tsx","path":"/blog/2019-08-25-serverless-developer-tools","result":{"data":{"currentBlog":{"id":"6f1378c3-6785-5137-bbc7-45059282f5ce","frontmatter":{"thumbnail":"https://img.serverlesscloud.cn/20191227/1577410169726-v2-39310147fa3da94245233a204c6144c1_1200x500.jpg","authors":["Tinafang"],"categories":["guides-and-tutorials"],"date":"2019-08-25T00:00:00.000Z","title":"Serverless 的开发者工具建设","description":"本文将介绍 Serverless 生态下的开发者工具，并简述这些工具是如何贯穿开发、调试、测试和部署的生命周期，提升开发者效率的。","authorslink":["https://github.com/tinafangkunding"],"translators":null,"translatorslink":null,"tags":["工具建设","serverless"],"keywords":"Serverless 调试,Serverless 测试,Serverless 开发者工具","outdated":null},"wordCount":{"words":370,"sentences":50,"paragraphs":50},"fileAbsolutePath":"/opt/build/repo/content/blog/2019-08-25-serverless-developer-tools.md","fields":{"slug":"/blog/2019-08-25-serverless-developer-tools/","keywords":["serverless","云函数","Serverless","函数","开发者","开发","调试","serverlesscloud","工具"]},"html":"<p>由于 Serverless 平台具备弹性扩缩、免运维、按需付费等特点，越来越多的公司和个人开始使用 Serverless 承载项目。但对于开发者而言，Serverless 一定程度上减少了开发难度，可以让我们聚焦业务逻辑进行开发；但同时，由于 Serverless 颠覆了传统的开发模式，从而在相关的开发工具，函数编排组织上也面临着重大挑战。</p>\n<h2 id=\"面向-serverless-开发的挑战\"><a href=\"#%E9%9D%A2%E5%90%91-serverless-%E5%BC%80%E5%8F%91%E7%9A%84%E6%8C%91%E6%88%98\" aria-label=\"面向 serverless 开发的挑战 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 开发的挑战</h2>\n<p>从一个开发者的角度而言，Serverless 开发和传统的开发方式相比发生了很大的改变。开发者习惯了在本地进行开发，调试，测试和持续集成，持续部署等流程，在面向 Serverless 进行开发时，免不了会有很多疑问：</p>\n<ul>\n<li>怎样本地开发一个 Serverless 项目？</li>\n<li>怎样对 Serverless 函数进行本地调试？</li>\n<li>开发过程中打印的日志是否可以方便的检索并用于 debug？</li>\n<li>如何保证本地环境和云端环境的一致？</li>\n<li>发布时怎样将多个函数一次性发布到云环境中？</li>\n</ul>\n<h2 id=\"面向-serverless-的工具建设逻辑\"><a href=\"#%E9%9D%A2%E5%90%91-serverless-%E7%9A%84%E5%B7%A5%E5%85%B7%E5%BB%BA%E8%AE%BE%E9%80%BB%E8%BE%91\" aria-label=\"面向 serverless 的工具建设逻辑 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 的工具建设逻辑</h2>\n<p>面临开发过程中的种种挑战，开发者工具将从开发者的视角出发，使 Serverless 的项目开发更贴近用户习惯。</p>\n<p>下面是一张项目开发的生命周期流程图，可以看到，在项目的开发过程中，至少要经历需求、编码、构建、测试、发布、部署和运维等几个阶段。</p>\n<p>在代码的编码和构建阶段通过持续集成完成代码的自动构建，成为持续集成 CI（Continuous Integration）；在代码的发布和部署阶段，通过配置灰度策略，告警和回滚计划等，从而可以完成代码的持续交付 CD（Continuous Delivery）。</p>\n<p>此外，在开发者的开发过程中，也会遇到编码、调试和单元测试，集成测试等场景，这些功能的支持也是面向 Serverless 架构进行开发中必不可少的一环。对开发者工具的建设，则会重点解决在整个生命周期中的痛点。</p>\n<p><img src=\"https://img.serverlesscloud.cn/20191227/1577410168549-v2-39310147fa3da94245233a204c6144c1_1200x500.jpg\" alt=\"项目开发生命周期\"></p>\n<h2 id=\"面向-serverless-的开发者工具\"><a href=\"#%E9%9D%A2%E5%90%91-serverless-%E7%9A%84%E5%BC%80%E5%8F%91%E8%80%85%E5%B7%A5%E5%85%B7\" aria-label=\"面向 serverless 的开发者工具 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 的开发者工具</h2>\n<p>在 Serverless 技术趋势大热的今天，已经涌现出很多面向开发者的解决方案和工具，例如开源的 Serverless Framework，Zappa 和 ClaudiaJS 等工具。</p>\n<p>开发者工具大部分都通过调用云厂商中 Serverless 产品的 API/SDK，封装底层能力，并提供给客户更加直观便捷的使用方式。目前比较常见的开发工具中，主要分为 CLI 命令行工具以及 IDE 插件这两种形态。虽然展现方式不同，但本质上都是降低了本地开发 Serverless 项目的门槛，并在云平台提供的基础能力上，封装了更多组织和编排的方式。</p>\n<p><strong>本文将以腾讯云的云函数为例，介绍较为典型的开发工具 —— 腾讯云 Serverless 本地开发工具及 VS Code 插件。</strong></p>\n<p>腾讯云 Serverless 本地开发工具（SCF CLI）以开源项目的形式维护，目的在于让用户方便的实现函数打包、部署、本地调试，也可以方便的生成云函数的项目并基于 demo 项目进一步的开发。SCF CLI 通过一个函数模板配置文件，完成函数及相关周边资源的描述，并基于配置文件实现本地代码及配置部署到云端的过程。</p>\n<p>下面我们以一个 Serverless 项目为例，展示 Serverless 开发工具的使用流程：</p>\n<h3 id=\"1、函数开发和编码\"><a href=\"#1%E3%80%81%E5%87%BD%E6%95%B0%E5%BC%80%E5%8F%91%E5%92%8C%E7%BC%96%E7%A0%81\" aria-label=\"1、函数开发和编码 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>1、函数开发和编码</h3>\n<p>首先，安装并配置了 SCF CLI 后，可以通过 --help 命令查看所支持的命令，之后通过 scf init 命令快速生成一个函数 demo。在创建完毕后，可以看到生成了 index.js 文件和template.yaml 文件。</p>\n<p>其中，index.js 是函数的入口文件，tempate.yaml 则是通过特定的格式记录了函数的配置信息，如内存大小，超时时间等信息。tempate.yaml 也是后续对函数进行编排和组织的关键。除了简单的 init 命令之外，SCF CLI 也支持从 git 拉取代码和一些已有的函数模板，便于客户基于特定的场景快速开发。</p>\n<h3 id=\"2、代码调试\"><a href=\"#2%E3%80%81%E4%BB%A3%E7%A0%81%E8%B0%83%E8%AF%95\" aria-label=\"2、代码调试 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>2、代码调试</h3>\n<p>在开发过程中，开发者会选取自己熟悉的 IDE 代码编辑器进行代码编写。为了便于更快速直观的进行本地开发和调试，通过腾讯云 VS Code 插件支持了一键调试的能力。</p>\n<p>首先，可以打开刚创建函数的文件目录，在插件中会自动识别这个函数。之后可以通过 F9 进行断点，F5 启动调试能力。函数调试过程中的输出会打印在 terminal 中，并且支持单步调试，查看变量和堆栈等信息。</p>\n<p><img src=\"https://img.serverlesscloud.cn/20191227/1577410168691-v2-39310147fa3da94245233a204c6144c1_1200x500.jpg\" alt=\"VSCode\"></p>\n<h3 id=\"3、代码发布\"><a href=\"#3%E3%80%81%E4%BB%A3%E7%A0%81%E5%8F%91%E5%B8%83\" aria-label=\"3、代码发布 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>3、代码发布</h3>\n<p>完成了开发和测试后，也可以分别通过 VS Code 插件或 CLI 进行代码的发布。目前分别支持了zip 打包发布，通过 COS（对象存储）上传并发布，以及通过 git 仓库发布，每次只提交增量修改的文件。在发布完毕后，还可以通过插件中的云端调试，来查看在云端的运行状况和返回日志。</p>\n<p><img src=\"https://img.serverlesscloud.cn/20191227/1577410168528-v2-39310147fa3da94245233a204c6144c1_1200x500.jpg\" alt=\"VSCode 2\"></p>\n<h3 id=\"4、多函数部署\"><a href=\"#4%E3%80%81%E5%A4%9A%E5%87%BD%E6%95%B0%E9%83%A8%E7%BD%B2\" aria-label=\"4、多函数部署 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>4、多函数部署</h3>\n<p>在 VS Code 插件及 CLI 中，可以很方便的将单函数部署在云端，那么如果希望快速发布多个函数时，应该怎样操作呢？</p>\n<p>目前也可以直接通过 SCF CLI 的 deploy 命令来实现。只需要通过一个 template.yaml 来维护多个函数的信息即可。</p>\n<p>除了发布之外，还可以通过 template.yaml 文件中的 Global 字段来定义一些函数的通用配置，从而解决开发过程中，希望多个函数共用相同配置的痛点（例如共用相同的环境变量，超时时间和内存等，不需要重复配置）</p>\n<p>例如，在我的工作空间下，有两个函数「hellotinatest234」以及「testscflinux」需批量部署上传，并且两个函数使用公共配置。则可以在 template.yaml 中分别定义两个函数的属性，并且定义 Global 字段指定公共配置。部署过程和 yaml 的样式如下：</p>\n<p><img src=\"https://img.serverlesscloud.cn/20191227/1577410168641-v2-39310147fa3da94245233a204c6144c1_1200x500.jpg\" alt=\"多函数部署\"></p>\n<h3 id=\"5、异常排查---日志能力\"><a href=\"#5%E3%80%81%E5%BC%82%E5%B8%B8%E6%8E%92%E6%9F%A5---%E6%97%A5%E5%BF%97%E8%83%BD%E5%8A%9B\" aria-label=\"5、异常排查   日志能力 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>5、异常排查 - 日志能力</h3>\n<p>除了开发流程之外，在生产环境异常时，也可以通过 CLI 的 logs --tail 等命令，快速灵活地进行日志查询等，并且可以配合 grep awk 等工具使用。当发布新版本时，采用 tail 模式可以实时打印云端日志，方便开发者快速查看问题。</p>\n<p><img src=\"https://img.serverlesscloud.cn/20191227/1577410168524-v2-39310147fa3da94245233a204c6144c1_1200x500.jpg\" alt=\"异常排查\"></p>\n<h3 id=\"6、devops-能力\"><a href=\"#6%E3%80%81devops-%E8%83%BD%E5%8A%9B\" aria-label=\"6、devops 能力 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>6、DevOps 能力</h3>\n<p>最后是云函数的 DevOps 能力。目前已经支持了和 Jekins，Coding 和蓝鲸平台等对接。并且还在持续对 Coding 平台做更深度的整合，提供开箱即可用的 DevOps 能力。</p>\n<p><img src=\"https://img.serverlesscloud.cn/20191227/1577410168565-v2-39310147fa3da94245233a204c6144c1_1200x500.jpg\" alt=\"DevOps\"></p>\n<h2 id=\"开发者工具总结和展望\"><a href=\"#%E5%BC%80%E5%8F%91%E8%80%85%E5%B7%A5%E5%85%B7%E6%80%BB%E7%BB%93%E5%92%8C%E5%B1%95%E6%9C%9B\" 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>随着 Serverless 生态的逐步完善，工具可以覆盖的场景会越来越多。例如，可以在本地模拟 API 网关的请求，或是通过集成常用的测试框架，对函数进行单元测试和整体性测试等。开发者也有更广阔的空间可以去参与其中，构建一个面向 Serverless 的开发架构。</p>\n<p>后续开发者工具会更加着重于对函数及函数周边资源的组织方式（网关，DB 等），从项目/应用的维度出发，让开发者可以快速通过工具搭建一个常用的使用场景（如 WEB 网站，文件上传工具等），从而更好地了解 Serverless 项目的组织方式。</p>\n<p>此外，在持续集成和持续交付的对接中，开发者工具也将支持更便捷，通用的配置，便于规范开发流程，承载大型项目和核心业务。</p>\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/2019-08-25-serverless-developer-tools/#%E9%9D%A2%E5%90%91-serverless-%E5%BC%80%E5%8F%91%E7%9A%84%E6%8C%91%E6%88%98\">面向 Serverless 开发的挑战</a></li>\n<li><a href=\"/blog/2019-08-25-serverless-developer-tools/#%E9%9D%A2%E5%90%91-serverless-%E7%9A%84%E5%B7%A5%E5%85%B7%E5%BB%BA%E8%AE%BE%E9%80%BB%E8%BE%91\">面向 Serverless 的工具建设逻辑</a></li>\n<li>\n<p><a href=\"/blog/2019-08-25-serverless-developer-tools/#%E9%9D%A2%E5%90%91-serverless-%E7%9A%84%E5%BC%80%E5%8F%91%E8%80%85%E5%B7%A5%E5%85%B7\">面向 Serverless 的开发者工具</a></p>\n<ul>\n<li><a href=\"/blog/2019-08-25-serverless-developer-tools/#1%E3%80%81%E5%87%BD%E6%95%B0%E5%BC%80%E5%8F%91%E5%92%8C%E7%BC%96%E7%A0%81\">1、函数开发和编码</a></li>\n<li><a href=\"/blog/2019-08-25-serverless-developer-tools/#2%E3%80%81%E4%BB%A3%E7%A0%81%E8%B0%83%E8%AF%95\">2、代码调试</a></li>\n<li><a href=\"/blog/2019-08-25-serverless-developer-tools/#3%E3%80%81%E4%BB%A3%E7%A0%81%E5%8F%91%E5%B8%83\">3、代码发布</a></li>\n<li><a href=\"/blog/2019-08-25-serverless-developer-tools/#4%E3%80%81%E5%A4%9A%E5%87%BD%E6%95%B0%E9%83%A8%E7%BD%B2\">4、多函数部署</a></li>\n<li><a href=\"/blog/2019-08-25-serverless-developer-tools/#5%E3%80%81%E5%BC%82%E5%B8%B8%E6%8E%92%E6%9F%A5---%E6%97%A5%E5%BF%97%E8%83%BD%E5%8A%9B\">5、异常排查 - 日志能力</a></li>\n<li><a href=\"/blog/2019-08-25-serverless-developer-tools/#6%E3%80%81devops-%E8%83%BD%E5%8A%9B\">6、DevOps 能力</a></li>\n</ul>\n</li>\n<li><a href=\"/blog/2019-08-25-serverless-developer-tools/#%E5%BC%80%E5%8F%91%E8%80%85%E5%B7%A5%E5%85%B7%E6%80%BB%E7%BB%93%E5%92%8C%E5%B1%95%E6%9C%9B\">开发者工具总结和展望</a></li>\n</ul>"},"previousBlog":{"id":"a4c5d988-73c4-5ee7-84d9-02d548d13970","frontmatter":{"thumbnail":"https://img.serverlesscloud.cn/2020413/1586784466875-1585645264854-08f2789b7010bbfb.jpg","authors":["serverless 社区"],"categories":["meetup"],"date":"2019-08-28T00:00:00.000Z","title":"云函数开发者工具实操 - 直播课","description":"本次直播，腾讯云高级产品经理张远哲将分享 Serverless 的开发者工具建设","authorslink":["https://serverlesscloud.cn"],"translators":null,"translatorslink":null,"tags":["课程","serverless"],"keywords":"Serverless 全局变量组件,Serverless 单独部署组件,Serverless Component","outdated":null},"wordCount":{"words":121,"sentences":31,"paragraphs":31},"fileAbsolutePath":"/opt/build/repo/content/blog/2019-08-28-scf-aarona-meetup.md","fields":{"slug":"/blog/2019-08-28-scf-aarona-meetup/","keywords":["nodejs","serverless","无服务器","无服务器架构","云函数","Serverless","Framework","函数","部署","serverless","npm","架构","install"]}},"nextBlog":{"id":"3c77f4d7-206b-59cb-a5d0-c915efc0a8fd","frontmatter":{"thumbnail":"https://img.serverlesscloud.cn/2020414/1586849656143-%E5%B0%81%E9%9D%A2%E5%9B%BE.png","authors":["孔令飞"],"categories":["news"],"date":"2019-08-23T00:00:00.000Z","title":"腾讯云 Serverless 技术演进","description":"本文将从产品层面来介绍腾讯云是如何落地 Serverless 技术以及 Serverless 的技术演进","authorslink":["https://zhuanlan.zhihu.com/ServerlessGo"],"translators":null,"translatorslink":null,"tags":["技术演进","serverless"],"keywords":"Serverless","outdated":null},"wordCount":{"words":1090,"sentences":79,"paragraphs":79},"fileAbsolutePath":"/opt/build/repo/content/blog/2019-08-23-tencent-serverless.md","fields":{"slug":"/blog/2019-08-23-tencent-serverless/","keywords":["go","serverless","无服务器","云函数","Serverless","用户","函数","调用","计算资源","业务","请求","serverless"]}},"recommendBlogs":{"edges":[{"node":{"id":"665f9ce2-4451-59fd-bf98-1861789d3b3b","frontmatter":{"thumbnail":"https://s3-us-west-2.amazonaws.com/assets.blog.serverless.com/Serverless_logo.png","authors":["AndreaPasswater"],"categories":["guides-and-tutorials","engineering-culture"],"date":"2018-03-19T00:00:00.000Z","title":"如何为无服务器开放源代码项目做贡献","description":"想要为无服务器开放源代码项目做贡献？您可以遵循下面的指南。","authorslink":null,"translators":null,"translatorslink":null,"tags":null,"keywords":null,"outdated":null},"wordCount":{"words":96,"sentences":36,"paragraphs":36},"fileAbsolutePath":"/opt/build/repo/content/blog/2018-03-19-how-contribute-to-serverless-open-source.md","fields":{"slug":"/blog/2018-03-19-how-contribute-to-serverless-open-source/","keywords":["serverless","无服务器","serverless","github","插件","服务器","贡献","示例","blog","contribute"]}}},{"node":{"id":"a3e92579-65c3-5159-937c-32d18c5df7d7","frontmatter":{"thumbnail":"https://s3-us-west-2.amazonaws.com/assets.blog.serverless.com/why-not/why-not-header.png","authors":["AndreaPasswater"],"categories":["guides-and-tutorials","operations-and-observability","engineering-culture"],"date":"2018-03-21T00:00:00.000Z","title":"不适合选择无服务器的情境及原因","description":"无服务器既有优点也有缺点。那么，哪些情境下不适合选择无服务器？原因又是什么呢？","authorslink":null,"translators":null,"translatorslink":null,"tags":null,"keywords":null,"outdated":null},"wordCount":{"words":163,"sentences":43,"paragraphs":43},"fileAbsolutePath":"/opt/build/repo/content/blog/2018-03-21-when-why-not-use-serverless.md","fields":{"slug":"/blog/2018-03-21-when-why-not-use-serverless/","keywords":["faas","react","serverless","spa","无服务器","无服务器函数","无服务器架构","无服务器开发","服务器","twitter","serverless","blockquote","lang","script","en"]}}},{"node":{"id":"6a16520b-7886-582e-9182-64e50712d486","frontmatter":{"thumbnail":"https://s3-us-west-2.amazonaws.com/assets.blog.serverless.com/vendor+choice/serverless-data-portability.jpg","authors":["NickGottlieb"],"categories":["engineering-culture","guides-and-tutorials"],"date":"2018-06-20T00:00:00.000Z","title":"浅谈无服务器、数据锁定和供应商选择","description":"供应商选择是如今 IT 领导者需要考虑的最重要事项，而这一点可利用数据可移植性来实现。","authorslink":null,"translators":null,"translatorslink":null,"tags":null,"keywords":null,"outdated":null},"wordCount":{"words":205,"sentences":33,"paragraphs":33},"fileAbsolutePath":"/opt/build/repo/content/blog/2018-06-20-data-lockin-vendor-choice-portability.md","fields":{"slug":"/blog/2018-06-20-data-lockin-vendor-choice-portability/","keywords":["go","serverless","无服务器","无服务器架构","供应商","serverless","开发人员","数据","锁定","选择","服务"]}}},{"node":{"id":"94741abb-10ba-5db1-9756-cd1d573473fa","frontmatter":{"thumbnail":"https://s3-us-west-2.amazonaws.com/assets.blog.serverless.com/webstorm-ide/streamline-webstorm-serverless2.jpg","authors":["EslamHefnawy"],"categories":["guides-and-tutorials","engineering-culture"],"date":"2018-08-15T00:00:00.000Z","title":"如何使用 WebStorm 简化无服务器工作流程","description":"在本文中，我将和您分享如何使用 WebStorm 进行无服务器特定的 IDE 设置以及如何利用它来极大地加快无服务器工作流程。","authorslink":null,"translators":null,"translatorslink":null,"tags":null,"keywords":null,"outdated":null},"wordCount":{"words":234,"sentences":54,"paragraphs":54},"fileAbsolutePath":"/opt/build/repo/content/blog/2018-08-15-streamline-serverless-workflow-webstorm.md","fields":{"slug":"/blog/2018-08-15-streamline-serverless-workflow-webstorm/","keywords":["nodejs","serverless","无服务器","无服务器开发","serverless","WebStorm","webstorm","服务器","blog","assets"]}}},{"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":"17c972d9-0583-51f6-9d5d-c2ba5f21b6a3","frontmatter":{"thumbnail":"https://img.serverlesscloud.cn/20191227/1577409288454-v2-577c2b21d600e3ea07f156f3e9d2d6b8_1200x500.jpg","authors":["Alfred Huang"],"categories":["guides-and-tutorials"],"date":"2019-08-21T00:00:00.000Z","title":"Serverless 的运行原理与组件架构","description":"本文重点探讨下开发者使用 Serverless 时经常遇到的一些问题，以及如何解决","authorslink":["https://zhuanlan.zhihu.com/ServerlessGo"],"translators":null,"translatorslink":null,"tags":["运行原理","serverless"],"keywords":"Serverless 运行原理,Serverless 组件架构","outdated":null},"wordCount":{"words":236,"sentences":33,"paragraphs":33},"fileAbsolutePath":"/opt/build/repo/content/blog/2019-08-21-serverless-operation-architecture.md","fields":{"slug":"/blog/2019-08-21-serverless-operation-architecture/","keywords":["koa","serverless","云函数","Serverless","用户","函数","请求","实例","形态","业务","serverlesscloud"]}}},{"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"]}}},{"node":{"id":"545ab3d2-e14e-5cc2-8548-0e863eac942b","frontmatter":{"thumbnail":"https://s3-us-west-2.amazonaws.com/assets.blog.serverless.com/2019-10-deployment-best-practices/safeguard-header.png","authors":["FernandoMedinaCorey"],"categories":["guides-and-tutorials"],"date":"2019-10-14T00:00:00.000Z","title":"无服务器部署最佳实践","description":"了解部署无服务器应用时的一些最佳实践。","authorslink":null,"translators":null,"translatorslink":null,"tags":null,"keywords":null,"outdated":null},"wordCount":{"words":221,"sentences":46,"paragraphs":46},"fileAbsolutePath":"/opt/build/repo/content/blog/2019-10-14-serverless-deployment-best-practices.md","fields":{"slug":"/blog/2019-10-14-serverless-deployment-best-practices/","keywords":["serverless","无服务器","serverless","部署","服务器","开发人员","应用","安全措施","使用","函数"]}}}],"totalCount":31}},"pageContext":{"isCreatedByStatefulCreatePages":false,"blogId":"6f1378c3-6785-5137-bbc7-45059282f5ce","previousBlogId":"a4c5d988-73c4-5ee7-84d9-02d548d13970","nextBlogId":"3c77f4d7-206b-59cb-a5d0-c915efc0a8fd","categories":["guides-and-tutorials"]}}}