[{"data":1,"prerenderedAt":1319},["ShallowReactive",2],{"article:\u002Farticles\u002F2023\u002F9\u002F5-0.overview":3,"article-nav:\u002Farticles\u002F2023\u002F9\u002F5-0.overview":1312},{"id":4,"title":5,"authors":6,"body":8,"date":1299,"description":1300,"draft":1301,"extension":1302,"meta":1303,"navigation":434,"path":1304,"readingMinutes":1305,"readingWords":1305,"seo":1306,"stem":1307,"tags":1308,"__hash__":1311},"articles\u002Farticles\u002F2023\u002F9\u002F5-0.overview.md","0.概览与快速开始",[7],"icebreaker",{"type":9,"value":10,"toc":1282},"minimark",[11,19,24,141,144,150,187,190,192,209,213,222,227,237,246,249,260,272,278,307,310,313,319,326,329,352,362,378,398,408,411,420,441,447,455,465,479,482,488,545,548,558,705,708,718,741,747,753,756,767,773,778,791,798,804,806,809,815,884,890,897,903,913,916,926,1066,1069,1119,1122,1124,1127,1141,1159,1197,1200,1243,1249,1252,1255,1262,1264,1270,1277],[12,13,14],"p",{},[15,16],"img",{"alt":17,"src":18},"Image","https:\u002F\u002Fpic4.zhimg.com\u002F80\u002Fv2-9f844a00a395b117215ac24d20651580.png",[20,21,23],"h1",{"id":22},"serverless-framework-亚马逊云-aws-中国地区部署指南","Serverless Framework 亚马逊云 (AWS) 中国地区部署指南",[25,26,27],"ul",{},[28,29,30,34],"li",{},[31,32,23],"a",{"href":33},"#serverless-framework-%E4%BA%9A%E9%A9%AC%E9%80%8A%E4%BA%91aws%E4%B8%AD%E5%9B%BD%E5%9C%B0%E5%8C%BA%E9%83%A8%E7%BD%B2%E6%8C%87%E5%8D%97",[25,35,36,42,78,129,135],{},[28,37,38],{},[31,39,41],{"href":40},"#%E5%89%8D%E8%A8%80","前言",[28,43,44,48],{},[31,45,47],{"href":46},"#%E5%89%8D%E7%BD%AE%E5%87%86%E5%A4%87","前置准备",[25,49,50,56,66,72],{},[28,51,52],{},[31,53,55],{"href":54},"#1-%E8%B4%A6%E5%8F%B7%E7%9A%84%E6%B3%A8%E5%86%8C","1. 账号的注册",[28,57,58],{},[31,59,61,62],{"href":60},"#2-%E5%85%A8%E5%B1%80%E5%AE%89%E8%A3%85-serverless","2. 全局安装 ",[63,64,65],"code",{},"serverless",[28,67,68],{},[31,69,71],{"href":70},"#3-%E8%AE%BE%E7%BD%AE%E4%BD%A0%E7%9A%84%E7%B3%BB%E7%BB%9F%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F","3. 设置你的系统环境变量",[28,73,74],{},[31,75,77],{"href":76},"#4-%E8%AE%BE%E7%BD%AE%E9%83%A8%E7%BD%B2%E5%87%AD%E8%AF%81","4. 设置部署凭证",[28,79,80,84],{},[31,81,83],{"href":82},"#%E5%BF%AB%E9%80%9F%E9%83%A8%E7%BD%B2%E4%B8%80%E4%B8%AA-hello-world","快速部署一个 hello world",[25,85,86,117,123],{},[28,87,88,92],{},[31,89,91],{"href":90},"#%E5%88%9B%E5%BB%BA%E5%85%A5%E5%8F%A3%E5%87%BD%E6%95%B0-indexjs","创建入口函数 index.js",[25,93,94,103,111],{},[28,95,96],{},[31,97,99,102],{"href":98},"#event-%E5%8F%82%E6%95%B0",[63,100,101],{},"event"," 参数",[28,104,105],{},[31,106,108,102],{"href":107},"#context-%E5%8F%82%E6%95%B0",[63,109,110],{},"context",[28,112,113],{},[31,114,116],{"href":115},"#%E5%87%BD%E6%95%B0%E4%BD%93","函数体",[28,118,119],{},[31,120,122],{"href":121},"#%E5%88%9B%E5%BB%BA%E9%83%A8%E7%BD%B2%E6%96%87%E4%BB%B6-serverlessyml","创建部署文件 serverless.yml",[28,124,125],{},[31,126,128],{"href":127},"#%E9%83%A8%E7%BD%B2","部署",[28,130,131],{},[31,132,134],{"href":133},"#next-chapter","Next Chapter",[28,136,137],{},[31,138,140],{"href":139},"#%E5%AE%8C%E6%95%B4%E7%A4%BA%E4%BE%8B%E5%8F%8A%E6%96%87%E7%AB%A0%E4%BB%93%E5%BA%93%E5%9C%B0%E5%9D%80","完整示例及文章仓库地址",[142,143,41],"h2",{"id":41},[12,145,146,149],{},[63,147,148],{},"Serverless Framework"," 是业界非常受欢迎的无服务器应用框架，开发者无需关心底层资源即可部署完整可用的 serverless 应用架构。Serverless Framework 具有资源编排、自动伸缩、事件驱动等能力，覆盖编码 - 调试 - 测试 - 部署等全生命周期，帮助开发者通过联动云资源，迅速构建 serverless 应用。",[12,151,152,153,155,156,159,160,163,164,167,168,163,171,174,175,178,179,182,183,186],{},"目前 ",[63,154,148],{}," 默认支持，同时也是支持最好的云服务商是 ",[63,157,158],{},"亚马逊云(AWS)","，亚马逊云在中国地区，目前主要服务企业用户，而且只开放了 ",[63,161,162],{},"宁夏"," 和 ",[63,165,166],{},"北京"," 2 个地域，基础设施方面分别属于 ",[63,169,170],{},"西云数据",[63,172,173],{},"光环新网","。幸运的是亚马逊也给中国这 ",[63,176,177],{},"2"," 个地域添加了支持，地域分别为 ",[63,180,181],{},"cn-northwest-1","(宁夏) 和 ",[63,184,185],{},"cn-north-1","(北京)，所以我们部署的时候需要显式声明它们，不然就会因为中国和国外的账号不互通，导致部署失败。",[12,188,189],{},"接下来就让我们看看，如何快速部署函数在中国区的亚马逊上吧！",[142,191,47],{"id":47},[193,194,195,198,203,206],"ol",{},[28,196,197],{},"一个中国区亚马逊的账号",[28,199,200,201],{},"全局安装 ",[63,202,65],{},[28,204,205],{},"设置你的系统环境变量",[28,207,208],{},"设置部署凭证",[210,211,55],"h3",{"id":212},"_1-账号的注册",[12,214,215,216,221],{},"你可以登录 ",[31,217,218],{"href":218,"rel":219},"https:\u002F\u002Fwww.amazonaws.cn\u002F",[220],"nofollow"," 进行注册，记得提前准备好你的企业相关信息。",[210,223,61,225],{"id":224},"_2-全局安装-serverless",[63,226,65],{},[228,229,230],"blockquote",{},[12,231,232,233],{},"没有安装 nodejs 环境的，记得提前安装，官方链接：",[31,234,235],{"href":235,"rel":236},"https:\u002F\u002Fnodejs.org\u002Fen",[220],[12,238,239,240,243,244],{},"执行 ",[63,241,242],{},"npm install -g serverless"," 来 全局安装 ",[63,245,65],{},[12,247,248],{},"安装完成后，全局会注册 2 个指令:",[25,250,251,255],{},[28,252,253],{},[63,254,65],{},[28,256,257],{},[63,258,259],{},"sls",[228,261,262],{},[12,263,264,266,267,269,270],{},[63,265,259],{}," 是 ",[63,268,65],{}," 命令的简写，以后章节的命令都用 ",[63,271,259],{},[12,273,239,274,277],{},[63,275,276],{},"sls -v"," 出现:",[279,280,285],"pre",{"className":281,"code":282,"language":283,"meta":284,"style":284},"language-txt shiki shiki-themes github-light github-light github-dark","Framework Core: 3.34.0\nPlugin: 6.2.3\nSDK: 4.3.2\n","txt","",[63,286,287,295,301],{"__ignoreMap":284},[288,289,292],"span",{"class":290,"line":291},"line",1,[288,293,294],{},"Framework Core: 3.34.0\n",[288,296,298],{"class":290,"line":297},2,[288,299,300],{},"Plugin: 6.2.3\n",[288,302,304],{"class":290,"line":303},3,[288,305,306],{},"SDK: 4.3.2\n",[12,308,309],{},"这代表你已经安装成功了！",[210,311,71],{"id":312},"_3-设置你的系统环境变量",[12,314,315,316],{},"编辑你的系统环境变量，添加 ",[63,317,318],{},"SLS_GEO_LOCATION=no-cn",[12,320,321,322,325],{},"这是为了避免 ",[63,323,324],{},"serverless cli"," 在中国时区，默认走腾讯云云函数部署的行为。",[210,327,77],{"id":328},"_4-设置部署凭证",[12,330,331,332,335,336,339,340,343,344,347,348,351],{},"在亚马逊管理面板，点击右上角的 ",[63,333,334],{},"安全凭证","，在 ",[63,337,338],{},"我的安全凭证"," 里的 ",[63,341,342],{},"访问密钥"," 中，点击 ",[63,345,346],{},"创建访问秘钥","，创建使用案例为 ",[63,349,350],{},"在 亚马逊云科技 计算服务上运行的应用程序","，同意条款后完成步骤。",[12,353,354,355,163,358,361],{},"这样你就生成了 ",[63,356,357],{},"Access Key",[63,359,360],{},"Access Secret","。",[12,363,364,365,163,367,369,370,373,374,377],{},"然后为了本地使用 ",[63,366,357],{},[63,368,360],{}," 去部署函数，我们需要创建 ",[63,371,372],{},"\"~\u002F.aws\u002Fcredentials\""," 文件 (",[63,375,376],{},"~","为当前用户目录)，内容如下:",[279,379,381],{"className":281,"code":380,"language":283,"meta":284,"style":284},"[default]\naws_access_key_id=xxxx\naws_secret_access_key=xxx\n",[63,382,383,388,393],{"__ignoreMap":284},[288,384,385],{"class":290,"line":291},[288,386,387],{},"[default]\n",[288,389,390],{"class":290,"line":297},[288,391,392],{},"aws_access_key_id=xxxx\n",[288,394,395],{"class":290,"line":303},[288,396,397],{},"aws_secret_access_key=xxx\n",[12,399,400,401,403,404,407],{},"这是为了让 ",[63,402,148],{}," 去读取本地的访问凭证进行部署。不然你就需要去注册 ",[63,405,406],{},"Serverless Framework Account"," 来进行管理了。",[142,409,83],{"id":410},"快速部署一个-hello-world",[12,412,413,414,416,417,419],{},"正常情况下你执行 ",[63,415,259],{}," 就会出现提示让你去新建一个函数项目，然而假如你之前没有添加 ",[63,418,318],{}," 这个环境变量的话，就会出现上述第 3 点问题：",[279,421,423],{"className":281,"code":422,"language":283,"meta":284,"style":284},"Serverless Framework CLI no longer supports Serverless Tencent CLI\n\nTo run Serverless Framework without issues in China region, ensure: SLS_GEO_LOCATION=no-cn environment variable\n",[63,424,425,430,436],{"__ignoreMap":284},[288,426,427],{"class":290,"line":291},[288,428,429],{},"Serverless Framework CLI no longer supports Serverless Tencent CLI\n",[288,431,432],{"class":290,"line":297},[288,433,435],{"emptyLinePlaceholder":434},true,"\n",[288,437,438],{"class":290,"line":303},[288,439,440],{},"To run Serverless Framework without issues in China region, ensure: SLS_GEO_LOCATION=no-cn environment variable\n",[12,442,443,444,446],{},"然而，即使你添加了环境变量，顺利执行了 ",[63,445,259],{}," 来初始化项目，大概率也会因为一些未知的网络原因下载失败。",[12,448,449,450,454],{},"所以这里笔者推荐你直接去 ",[31,451,452],{"href":452,"rel":453},"https:\u002F\u002Fgithub.com\u002Fserverless\u002Fexamples",[220]," 去下载模板。",[12,456,457,458],{},"这里推荐使用基础模板 ",[31,459,462],{"href":460,"rel":461},"https:\u002F\u002Fgithub.com\u002Fserverless\u002Fexamples\u002Ftree\u002Fv3\u002Faws-node-http-api",[220],[63,463,464],{},"aws-node-http-api",[12,466,467,468,471,472,475,476,478],{},"它部署成功后，能够快速为你创建一个 ",[63,469,470],{},"AWS Lambda函数","(云函数) 和一个 ",[63,473,474],{},"AWS API Gateway","(api 网关)，这样你部署成功之后，",[63,477,474],{}," 会直接给你分配一个 http 公网地址，你可以直接访问它来触发你的云函数。",[12,480,481],{},"整体的调用流程如下:",[12,483,484],{},[15,485],{"alt":486,"src":487},"api-gateway","https:\u002F\u002Fpic4.zhimg.com\u002F80\u002Fv2-612e6aacb31e958c90f5d49a76fa35d5.png",[228,489,490,514],{},[12,491,128,492,494,495,498,499,502,503,506,507,510,511,513],{},[63,493,474],{},"之后访问域名永远是 ",[63,496,497],{},"403"," 的问题，这是因为你需要在亚马逊中国完成 ",[63,500,501],{},"ICP","备案，才能正常使用 ",[63,504,505],{},"API"," 网关，不然默认端口 ",[63,508,509],{},"80\u002F8080\u002F443"," 都是关闭的，所以返回都是 ",[63,512,497],{},":",[279,515,519],{"className":516,"code":517,"language":518,"meta":284,"style":284},"language-json shiki shiki-themes github-light github-light github-dark","{\n \"message\": \"Forbidden\"\n}\n","json",[63,520,521,527,540],{"__ignoreMap":284},[288,522,523],{"class":290,"line":291},[288,524,526],{"class":525},"sxrX7","{\n",[288,528,529,533,536],{"class":290,"line":297},[288,530,532],{"class":531},"sBjJW"," \"message\"",[288,534,535],{"class":525},": ",[288,537,539],{"class":538},"sIIMD","\"Forbidden\"\n",[288,541,542],{"class":290,"line":303},[288,543,544],{"class":525},"}\n",[210,546,91],{"id":547},"创建入口函数-indexjs",[12,549,550,551,553,554,557],{},"我们新建一个函数文件夹 ",[63,552,464],{},", 在里面创建 ",[63,555,556],{},"index.js"," 文件",[279,559,563],{"className":560,"code":561,"language":562,"meta":284,"style":284},"language-js shiki shiki-themes github-light github-light github-dark","module.exports.handler = async (event, context) => {\n  return {\n    statusCode: 200,\n    body: JSON.stringify(\n      {\n        message: \"Go Serverless v3.0! Your function executed successfully!\",\n        input: event,\n      },\n      null,\n      2\n    ),\n  };\n};\n","js",[63,564,565,609,616,627,644,650,661,667,673,681,687,693,699],{"__ignoreMap":284},[288,566,567,570,573,576,578,582,586,589,592,595,598,600,603,606],{"class":290,"line":291},[288,568,569],{"class":531},"module",[288,571,572],{"class":525},".",[288,574,575],{"class":531},"exports",[288,577,572],{"class":525},[288,579,581],{"class":580},"snPdu","handler",[288,583,585],{"class":584},"s8jYJ"," =",[288,587,588],{"class":584}," async",[288,590,591],{"class":525}," (",[288,593,101],{"class":594},"sP4rz",[288,596,597],{"class":525},", ",[288,599,110],{"class":594},[288,601,602],{"class":525},") ",[288,604,605],{"class":584},"=>",[288,607,608],{"class":525}," {\n",[288,610,611,614],{"class":290,"line":297},[288,612,613],{"class":584},"  return",[288,615,608],{"class":525},[288,617,618,621,624],{"class":290,"line":303},[288,619,620],{"class":525},"    statusCode: ",[288,622,623],{"class":531},"200",[288,625,626],{"class":525},",\n",[288,628,630,633,636,638,641],{"class":290,"line":629},4,[288,631,632],{"class":525},"    body: ",[288,634,635],{"class":531},"JSON",[288,637,572],{"class":525},[288,639,640],{"class":580},"stringify",[288,642,643],{"class":525},"(\n",[288,645,647],{"class":290,"line":646},5,[288,648,649],{"class":525},"      {\n",[288,651,653,656,659],{"class":290,"line":652},6,[288,654,655],{"class":525},"        message: ",[288,657,658],{"class":538},"\"Go Serverless v3.0! Your function executed successfully!\"",[288,660,626],{"class":525},[288,662,664],{"class":290,"line":663},7,[288,665,666],{"class":525},"        input: event,\n",[288,668,670],{"class":290,"line":669},8,[288,671,672],{"class":525},"      },\n",[288,674,676,679],{"class":290,"line":675},9,[288,677,678],{"class":531},"      null",[288,680,626],{"class":525},[288,682,684],{"class":290,"line":683},10,[288,685,686],{"class":531},"      2\n",[288,688,690],{"class":290,"line":689},11,[288,691,692],{"class":525},"    ),\n",[288,694,696],{"class":290,"line":695},12,[288,697,698],{"class":525},"  };\n",[288,700,702],{"class":290,"line":701},13,[288,703,704],{"class":525},"};\n",[12,706,707],{},"代码解读:",[12,709,710,711,714,715,717],{},"这段代码使用 ",[63,712,713],{},"commonjs"," 格式编写，导出一个 ",[63,716,581],{}," 函数",[12,719,720,721,723,724,163,726,728,729,732,733,736,737,740],{},"这个函数有 ",[63,722,177],{}," 个参数 ",[63,725,101],{},[63,727,110],{}," (实际上还有第三个参数 ",[63,730,731],{},"callback",", 不过都已经 ",[63,734,735],{},"3202","年了，回调写法早就不流行了，故省略，全篇使用 ",[63,738,739],{},"async\u002Fawait",")",[742,743,745,102],"h4",{"id":744},"event-参数",[63,746,101],{},[12,748,749,750,752],{},"其中 ",[63,751,101],{}," 为事件参数，我们云函数绑定的触发器在触发的时候，触发事件都会转化成这个对象来调用我们的代码。",[12,754,755],{},"比如我们一个函数绑定了多个触发器:",[25,757,758,761,764],{},[28,759,760],{},"HTTP 网关触发器",[28,762,763],{},"S3\u002FOSS\u002FCOS 这种对象存储触发器",[28,765,766],{},"Schedule\u002FCron 这种 job 触发器",[12,768,769,770,772],{},"那它们各自触发函数的时候，进入我们函数时的 ",[63,771,101],{}," 类型就是不同的，这样我们就可以根据这个类型，去执行不同的代码分支，返回不同的结果。",[742,774,776,102],{"id":775},"context-参数",[63,777,110],{},[12,779,780,782,783,786,787,790],{},[63,781,110],{}," 参数指的是运行函数时，传入进来的上下文，这点每个云厂商都是不同的。但里面大多都会包含一些调用信息，函数信息，和执行的环境信息，以及暴露一些特定的方法。比如 ",[63,784,785],{},"functionName"," \u002F ",[63,788,789],{},"requestId"," 等等...",[12,792,793,794,797],{},"这里笔者给出一份 ",[63,795,796],{},"AWS"," 在上下文中给你的字段清单链接，供你参考：",[12,799,800],{},[31,801,802],{"href":802,"rel":803},"https:\u002F\u002Fdocs.aws.amazon.com\u002Flambda\u002Flatest\u002Fdg\u002Fnodejs-context.html",[220],[742,805,116],{"id":116},[12,807,808],{},"这里就是调用函数时去执行的代码片段了",[12,810,811,812,814],{},"这里我们就简单返回了一个 ",[63,813,562],{}," 对象:",[279,816,818],{"className":560,"code":817,"language":562,"meta":284,"style":284},"  return {\n    statusCode: 200,\n    body: JSON.stringify(\n      {\n        message: \"Go Serverless v3.0! Your function executed successfully!\",\n        input: event,\n      },\n      null,\n      2\n    ),\n  };\n",[63,819,820,826,834,846,850,858,862,866,872,876,880],{"__ignoreMap":284},[288,821,822,824],{"class":290,"line":291},[288,823,613],{"class":584},[288,825,608],{"class":525},[288,827,828,830,832],{"class":290,"line":297},[288,829,620],{"class":525},[288,831,623],{"class":531},[288,833,626],{"class":525},[288,835,836,838,840,842,844],{"class":290,"line":303},[288,837,632],{"class":525},[288,839,635],{"class":531},[288,841,572],{"class":525},[288,843,640],{"class":580},[288,845,643],{"class":525},[288,847,848],{"class":290,"line":629},[288,849,649],{"class":525},[288,851,852,854,856],{"class":290,"line":646},[288,853,655],{"class":525},[288,855,658],{"class":538},[288,857,626],{"class":525},[288,859,860],{"class":290,"line":652},[288,861,666],{"class":525},[288,863,864],{"class":290,"line":663},[288,865,672],{"class":525},[288,867,868,870],{"class":290,"line":669},[288,869,678],{"class":531},[288,871,626],{"class":525},[288,873,874],{"class":290,"line":675},[288,875,686],{"class":531},[288,877,878],{"class":290,"line":683},[288,879,692],{"class":525},[288,881,882],{"class":290,"line":689},[288,883,698],{"class":525},[12,885,886,887,889],{},"为什么要返回成这个格式？ 实际上这是 ",[63,888,474],{}," 决定的，你要执行函数之后，获得结果再通过它返回给用户，就必须按照它要求的格式返回。",[12,891,892,893,896],{},"所以你可以看到这里返回了一个 ",[63,894,895],{},"{ statusCode: number, body: string }"," 格式。当然具体的格式不同的云厂商也会不同，这里我也为你找到了这个格式的百科大全文档:",[12,898,899],{},[31,900,901],{"href":901,"rel":902},"https:\u002F\u002Fdocs.aws.amazon.com\u002Fapigateway\u002Flatest\u002Fdeveloperguide\u002Fhttp-api-develop-integrations-lambda.html",[220],[12,904,905,906,786,909,912],{},"所以你根据这个文档多返回一些字段以达到你 ",[63,907,908],{},"set cookie",[63,910,911],{},"修改响应头"," 的效果。",[210,914,122],{"id":915},"创建部署文件-serverlessyml",[12,917,918,919,921,922,925],{},"这里我们直接在刚刚创建的 ",[63,920,556],{}," 同目录下，快速创建一个 ",[63,923,924],{},"serverless.yml","，内容如下:",[279,927,931],{"className":928,"code":929,"language":930,"meta":284,"style":284},"language-yml shiki shiki-themes github-light github-light github-dark","service: serverless-http-api\nframeworkVersion: '3'\n\nprovider:\n  name: aws\n  runtime: nodejs18.x\n  region: cn-northwest-1 # 中国宁夏\n\nfunctions:\n  api:\n    handler: index.handler\n    events:\n      - httpApi:\n          path: \u002F\n          method: get\n","yml",[63,932,933,944,954,958,966,976,986,999,1003,1010,1017,1027,1034,1044,1055],{"__ignoreMap":284},[288,934,935,939,941],{"class":290,"line":291},[288,936,938],{"class":937},"sovSZ","service",[288,940,535],{"class":525},[288,942,943],{"class":538},"serverless-http-api\n",[288,945,946,949,951],{"class":290,"line":297},[288,947,948],{"class":937},"frameworkVersion",[288,950,535],{"class":525},[288,952,953],{"class":538},"'3'\n",[288,955,956],{"class":290,"line":303},[288,957,435],{"emptyLinePlaceholder":434},[288,959,960,963],{"class":290,"line":629},[288,961,962],{"class":937},"provider",[288,964,965],{"class":525},":\n",[288,967,968,971,973],{"class":290,"line":646},[288,969,970],{"class":937},"  name",[288,972,535],{"class":525},[288,974,975],{"class":538},"aws\n",[288,977,978,981,983],{"class":290,"line":652},[288,979,980],{"class":937},"  runtime",[288,982,535],{"class":525},[288,984,985],{"class":538},"nodejs18.x\n",[288,987,988,991,993,995],{"class":290,"line":663},[288,989,990],{"class":937},"  region",[288,992,535],{"class":525},[288,994,181],{"class":538},[288,996,998],{"class":997},"sCsY4"," # 中国宁夏\n",[288,1000,1001],{"class":290,"line":669},[288,1002,435],{"emptyLinePlaceholder":434},[288,1004,1005,1008],{"class":290,"line":675},[288,1006,1007],{"class":937},"functions",[288,1009,965],{"class":525},[288,1011,1012,1015],{"class":290,"line":683},[288,1013,1014],{"class":937},"  api",[288,1016,965],{"class":525},[288,1018,1019,1022,1024],{"class":290,"line":689},[288,1020,1021],{"class":937},"    handler",[288,1023,535],{"class":525},[288,1025,1026],{"class":538},"index.handler\n",[288,1028,1029,1032],{"class":290,"line":695},[288,1030,1031],{"class":937},"    events",[288,1033,965],{"class":525},[288,1035,1036,1039,1042],{"class":290,"line":701},[288,1037,1038],{"class":525},"      - ",[288,1040,1041],{"class":937},"httpApi",[288,1043,965],{"class":525},[288,1045,1047,1050,1052],{"class":290,"line":1046},14,[288,1048,1049],{"class":937},"          path",[288,1051,535],{"class":525},[288,1053,1054],{"class":538},"\u002F\n",[288,1056,1058,1061,1063],{"class":290,"line":1057},15,[288,1059,1060],{"class":937},"          method",[288,1062,535],{"class":525},[288,1064,1065],{"class":538},"get\n",[12,1067,1068],{},"这里我们重点介绍一下这些字段:",[25,1070,1071,1081,1086],{},[28,1072,1073,786,1075,1077,1078,1080],{},[63,1074,938],{},[63,1076,948],{}," 都是元数据，来告诉云服务商 \u002F",[63,1079,324],{},"，应用程序名是什么，使用的框架版本是什么",[28,1082,1083,1085],{},[63,1084,962],{}," 则是我们用来描述，使用的什么云服务商的，什么地域的，什么运行时来进行部署云函数",[28,1087,1088,1090,1091,1093,1094,1096,1097,1100,1101,1103,1104,1106,1107,1110,1111,1114,1115,1118],{},[63,1089,1007],{}," 则是描绘函数的一些信息，比如这个 ",[63,1092,930],{}," 中的 ",[63,1095,1007],{}," 区域块，就告诉云服务商，我有一个名为 ",[63,1098,1099],{},"api"," 的函数需要部署，它的函数触发入口点是我 ",[63,1102,556],{}," 导出对象中的 ",[63,1105,581],{}," 函数，它还绑定了一个 ",[63,1108,1109],{},"API网关(v2)"," 触发器，用 ",[63,1112,1113],{},"HTTP GET"," 请求访问这个网关的 ",[63,1116,1117],{},"\u002F"," 路径，就可以触发这个函数啦！",[12,1120,1121],{},"于是当我们声明完成这些信息之后，就可以愉快的部署了！",[210,1123,128],{"id":128},[12,1125,1126],{},"我们直接在当前项目目录下执行:",[279,1128,1132],{"className":1129,"code":1130,"language":1131,"meta":284,"style":284},"language-bash shiki shiki-themes github-light github-light github-dark","sls deploy\n","bash",[63,1133,1134],{"__ignoreMap":284},[288,1135,1136,1138],{"class":290,"line":291},[288,1137,259],{"class":580},[288,1139,1140],{"class":538}," deploy\n",[12,1142,1143,1144,1147,1148,1151,1152,1155,1156,1158],{},"于是我们的项目代码先是被本地打包到当前目录下的 ",[63,1145,1146],{},".serverless"," 文件夹下方，然后 ",[63,1149,1150],{},"serverless framework"," 把我们函数压缩文件包 (",[63,1153,1154],{},".zip",") 上传到 ",[63,1157,796],{}," 上，告诉它进行部署，成功之后就会返回如下信息:",[279,1160,1162],{"className":281,"code":1161,"language":283,"meta":284,"style":284},"Deploying serverless-http-api to stage dev (cn-northwest-1)\n\n✔ Service deployed to stack serverless-http-api-dev (152s)\n\nendpoint: GET - https:\u002F\u002Fxxxxxxxxxx.execute-api.cn-northwest-1.amazonaws.com\u002F\nfunctions:\n  api: serverless-http-api-dev-api (1.9 kB)\n",[63,1163,1164,1169,1173,1178,1182,1187,1192],{"__ignoreMap":284},[288,1165,1166],{"class":290,"line":291},[288,1167,1168],{},"Deploying serverless-http-api to stage dev (cn-northwest-1)\n",[288,1170,1171],{"class":290,"line":297},[288,1172,435],{"emptyLinePlaceholder":434},[288,1174,1175],{"class":290,"line":303},[288,1176,1177],{},"✔ Service deployed to stack serverless-http-api-dev (152s)\n",[288,1179,1180],{"class":290,"line":629},[288,1181,435],{"emptyLinePlaceholder":434},[288,1183,1184],{"class":290,"line":646},[288,1185,1186],{},"endpoint: GET - https:\u002F\u002Fxxxxxxxxxx.execute-api.cn-northwest-1.amazonaws.com\u002F\n",[288,1188,1189],{"class":290,"line":652},[288,1190,1191],{},"functions:\n",[288,1193,1194],{"class":290,"line":663},[288,1195,1196],{},"  api: serverless-http-api-dev-api (1.9 kB)\n",[12,1198,1199],{},"这样我们第一个函数就部署成功了，你可以直接打开浏览器，敲这个地址就会返回数据:",[279,1201,1203],{"className":516,"code":1202,"language":518,"meta":284,"style":284},"{\n  \"message\": \"Go Serverless v3.0! Your function executed successfully!\",\n  \"input\": {\n    ...\n  }\n}\n",[63,1204,1205,1209,1220,1228,1234,1239],{"__ignoreMap":284},[288,1206,1207],{"class":290,"line":291},[288,1208,526],{"class":525},[288,1210,1211,1214,1216,1218],{"class":290,"line":297},[288,1212,1213],{"class":531},"  \"message\"",[288,1215,535],{"class":525},[288,1217,658],{"class":538},[288,1219,626],{"class":525},[288,1221,1222,1225],{"class":290,"line":303},[288,1223,1224],{"class":531},"  \"input\"",[288,1226,1227],{"class":525},": {\n",[288,1229,1230],{"class":290,"line":629},[288,1231,1233],{"class":1232},"sPrNH","    ...\n",[288,1235,1236],{"class":290,"line":646},[288,1237,1238],{"class":525},"  }\n",[288,1240,1241],{"class":290,"line":652},[288,1242,544],{"class":525},[12,1244,1245,1246,1248],{},"恭喜你！你正式踏入了 ",[63,1247,65],{}," 的世界！接下来更广阔的世界会为你打开.",[142,1250,134],{"id":1251},"next-chapter",[12,1253,1254],{},"当然做到这些仅仅是入门，接下来我将会向你介绍更复杂的项目，带你走一遍笔者曾经走过的路。",[12,1256,1257,1258,1261],{},"下一篇，《typescript 支持与本地调试》中，将会介绍如何添加 ",[63,1259,1260],{},"typescript"," 支持和本地调试 (这句是废话了～)，欢迎阅读。",[142,1263,140],{"id":140},[12,1265,1266],{},[31,1267,1268],{"href":1268,"rel":1269},"https:\u002F\u002Fgithub.com\u002Fsonofmagic\u002Fserverless-aws-cn-guide",[220],[12,1271,1272,1273,1276],{},"如果你遇到什么问题，或者发现什么勘误，欢迎提 ",[63,1274,1275],{},"issue"," 给我",[1278,1279,1281],"style",{"data-allow-mismatch":1280},"children","html .light .shiki span{color:var(--shiki-light);background:var(--shiki-light-bg);font-style:var(--shiki-light-font-style);font-weight:var(--shiki-light-font-weight);text-decoration:var(--shiki-light-text-decoration)}html.light .shiki span{color:var(--shiki-light);background:var(--shiki-light-bg);font-style:var(--shiki-light-font-style);font-weight:var(--shiki-light-font-weight);text-decoration:var(--shiki-light-text-decoration)}html .default .shiki span{color:var(--shiki-default);background:var(--shiki-default-bg);font-style:var(--shiki-default-font-style);font-weight:var(--shiki-default-font-weight);text-decoration:var(--shiki-default-text-decoration)}html .shiki span{color:var(--shiki-default);background:var(--shiki-default-bg);font-style:var(--shiki-default-font-style);font-weight:var(--shiki-default-font-weight);text-decoration:var(--shiki-default-text-decoration)}html .dark .shiki span{color:var(--shiki-dark);background:var(--shiki-dark-bg);font-style:var(--shiki-dark-font-style);font-weight:var(--shiki-dark-font-weight);text-decoration:var(--shiki-dark-text-decoration)}html.dark .shiki span{color:var(--shiki-dark);background:var(--shiki-dark-bg);font-style:var(--shiki-dark-font-style);font-weight:var(--shiki-dark-font-weight);text-decoration:var(--shiki-dark-text-decoration)}html pre.shiki code .sxrX7,html code.shiki .sxrX7{--shiki-light:#24292E;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sBjJW,html code.shiki .sBjJW{--shiki-light:#005CC5;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sIIMD,html code.shiki .sIIMD{--shiki-light:#032F62;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .snPdu,html code.shiki .snPdu{--shiki-light:#6F42C1;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .s8jYJ,html code.shiki .s8jYJ{--shiki-light:#D73A49;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sP4rz,html code.shiki .sP4rz{--shiki-light:#E36209;--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sovSZ,html code.shiki .sovSZ{--shiki-light:#22863A;--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sCsY4,html code.shiki .sCsY4{--shiki-light:#6A737D;--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sPrNH,html code.shiki .sPrNH{--shiki-light:#B31D28;--shiki-light-font-style:italic;--shiki-default:#B31D28;--shiki-default-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic}",{"title":284,"searchDepth":297,"depth":297,"links":1283},[1284,1285,1292,1297,1298],{"id":41,"depth":297,"text":41},{"id":47,"depth":297,"text":47,"children":1286},[1287,1288,1290,1291],{"id":212,"depth":303,"text":55},{"id":224,"depth":303,"text":1289},"2. 全局安装 serverless",{"id":312,"depth":303,"text":71},{"id":328,"depth":303,"text":77},{"id":410,"depth":297,"text":83,"children":1293},[1294,1295,1296],{"id":547,"depth":303,"text":91},{"id":915,"depth":303,"text":122},{"id":128,"depth":303,"text":128},{"id":1251,"depth":297,"text":134},{"id":140,"depth":297,"text":140},"2023-09-05","Serverless Framework 亚马逊云(AWS)中国地区部署指南",false,"md",{},"\u002Farticles\u002F2023\u002F9\u002F5-0.overview",null,{"title":5,"description":1300},"articles\u002F2023\u002F9\u002F5-0.overview",[148,796,1309,1310],"亚马逊云","中国地区","F0iG9HPZU7C6X-VfRJgKjADDP4ZR1bbHQ_vq_wdLh7c",{"prev":1313,"next":1316},{"path":1314,"title":1315},"\u002Farticles\u002F2023\u002F9\u002F5-1.nodejs-project","1.typescript 支持与本地调试",{"path":1317,"title":1318},"\u002Farticles\u002F2023\u002F9\u002F6-2.layer-and-deps","2.依赖项的处理与层的创建与注册",1790911663150]