{"id":31989,"date":"2023-02-22T01:43:27","date_gmt":"2023-07-01T20:03:09","guid":{"rendered":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%9d%e8%af%95%e4%bd%bf%e7%94%a8aws-nodejs-typescript%e6%a8%a1%e6%9d%bfserverless-v3%e3%80%82\/"},"modified":"2024-04-29T15:42:17","modified_gmt":"2024-04-29T07:42:17","slug":"%e5%b0%9d%e8%af%95%e4%bd%bf%e7%94%a8aws-nodejs-typescript%e6%a8%a1%e6%9d%bfserverless-v3%e3%80%82","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%9d%e8%af%95%e4%bd%bf%e7%94%a8aws-nodejs-typescript%e6%a8%a1%e6%9d%bfserverless-v3%e3%80%82\/","title":{"rendered":"\u5c1d\u8bd5\u4f7f\u7528aws-nodejs-typescript\u6a21\u677f(serverless v3)"},"content":{"rendered":"<p>\u8fd9\u7bc7\u6587\u7ae0\u662fAteam Finergy Inc.\u00d7 Ateam CommerceTech Inc.\u00d7 Ateam Wellness Inc.\u7684\u300a2022\u5e74\u5723\u8bde\u65e5\u5386\u300b\u7b2c15\u5929\u7684\u6587\u7ae0\u3002<\/p>\n<p>\u4eca\u5929\uff0c\u7531@tommy1038\u8d1f\u8d23\u3002<\/p>\n<h2>\u9996\u5148<\/h2>\n<p>\u4eca\u5e74\u521d\u7684\u65f6\u5019\u6211\u5199\u4e86\u4ee5\u4e0b\u8fd9\u7bc7\u6587\u7ae0\uff0c\u4f46\u968f\u540e\u4e0d\u4e45\uff0cserverless v3\u5c31\u53d1\u5e03\u4e86\u3002<\/p>\n<p>&nbsp;<\/p>\n<p>\u4ee5\u4e0b\u662fServerless V3\u7684\u5347\u7ea7\u6307\u5357\u94fe\u63a5(https:\/\/www.serverless.com\/framework\/docs\/guides\/upgrading-v3)\u3002<\/p>\n<p>\u6211\u5011\u7684\u696d\u52d9\u6240\u4f7f\u7528\u7684\u670d\u52d9\u4e5f\u5df2\u7d93\u5347\u7d1a\u5230\u652f\u63f4 serverless v3\uff0c\u4f46\u6211\u5f88\u60f3\u77e5\u9053\u5b98\u65b9\u7bc4\u672c\u6709\u4ec0\u9ebc\u6539\u8b8a\uff0c\u6240\u4ee5\u6211\u6253\u7b97\u66f4\u65b0\u4e4b\u524d\u7684\u6587\u7ae0\u3002<\/p>\n<h2>\u51c6\u5907\u4e8b\u9879<\/h2>\n<p>\u5982\u679c\u60a8\u60f3\u5c1d\u8bd5serverless\uff0c\u60a8\u53ef\u4ee5\u7acb\u5373\u4ece\u8fd9\u91cc\u5f00\u59cb\u3002(https:\/\/github.com\/serverless\/serverless#quick-start) \u6211\u4eec\u5728\u4ee5\u4e0b\u7248\u672c\u4e0a\u6267\u884c\u4e86\u5b9e\u9a8c\u3002<\/p>\n<pre class=\"post-pre\"><code>\u276f node -v\r\nv18.12.1\r\n\r\n\u276f npm --version\r\n8.19.3\r\n\r\n\u276f serverless --version\r\nFramework Core: 3.25.1\r\nPlugin: 6.2.2\r\nSDK: 4.3.2\r\n\r\n\u276f aws --version\r\naws-cli\/2.9.6 Python\/3.11.0 Darwin\/21.6.0 source\/x86_64 prompt\/off\r\n<\/code><\/pre>\n<p>\u60a8\u53ef\u4ee5\u901a\u8fc7\u6267\u884c\u201caws configure\u201d\u547d\u4ee4\u6765\u8bbe\u7f6eAWS\u7684\u8eab\u4efd\u9a8c\u8bc1\u4fe1\u606f\uff0c\u6309\u7167\u63d0\u793a\u8fdb\u884c\u64cd\u4f5c\u5373\u53ef\u3002<\/p>\n<pre class=\"post-pre\"><code>\u276f aws configure\r\nAWS Access Key ID [None]: your_access_key_id\r\nAWS Secret Access Key [None]: your_secret_access_key\r\nDefault region name [None]:\r\nDefault output format [None]:\r\n<\/code><\/pre>\n<p>\u5982\u679c\u6ca1\u6709Access Key ID\u548cSecret Access Key\uff0c\u8bf7\u5728\u8bbe\u7f6e &#8211; AWS\u547d\u4ee4\u884c\u754c\u9762\u7684Access Key ID\u548cSecret Access Key\u90e8\u5206\u4e2d\u53c2\u8003\u521b\u5efa\u6b65\u9aa4\uff0c\u5e76\u5728\u90a3\u91cc\u521b\u5efa\u540e\u518d\u8fdb\u884c\u6ce8\u518c\u3002<\/p>\n<h2>\u521b\u5efa\u670d\u52a1<\/h2>\n<p>&nbsp;<\/p>\n<p>\u6211\u5011\u5c07\u53c3\u8003\u4ee5\u4e0a\u5167\u5bb9\uff0c\u4e26\u5275\u5efa\u76f8\u61c9\u7684\u670d\u52d9\u3002<\/p>\n<h3>\u4f7f\u7528&#8211;template\u9009\u9879\u8fdb\u884c\u521b\u5efa<\/h3>\n<p>\u76ee\u524d\u53ef\u7528\u7684\u6a21\u677f\u5217\u8868\u5982\u4e0b\u6240\u793a\u3002<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">aws-clojurescript-gradle<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">aws-clojure-gradle<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">aws-nodejs<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">aws-nodejs-typescript<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">aws-alexa-typescript<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">aws-nodejs-ecma-script<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">aws-python<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">aws-python3<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">aws-ruby<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">aws-provided<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">aws-kotlin-jvm-maven<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">aws-kotlin-jvm-gradle<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">aws-kotlin-nodejs-gradle<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">aws-groovy-gradle<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">aws-java-maven<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">aws-java-gradle<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">aws-scala-sbt<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">aws-csharp<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">aws-fsharp<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">aws-go<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">aws-go-dep<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">aws-go-mod<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">plugin<\/ul>\n<p>\u90a3\u4e48\uff0c\u8ba9\u6211\u4eec\u5c1d\u8bd5\u4f7f\u7528\u4e0a\u8ff0\u7684aws-nodejs-typescript\u3002<\/p>\n<pre class=\"post-pre\"><code>\u276f serverless create <span class=\"nt\">--template<\/span> aws-nodejs-typescript <span class=\"nt\">--path<\/span> aws-nodejs-typescript-1\r\n\r\n\u2714 Project successfully created <span class=\"k\">in<\/span> <span class=\"s2\">\"aws-nodejs-typescript-1\"<\/span> from <span class=\"s2\">\"aws-nodejs-typescript\"<\/span> template <span class=\"o\">(<\/span>7s<span class=\"o\">)<\/span>\r\n\r\n\u276f tree <span class=\"nb\">.<\/span>\r\n<span class=\"nb\">.<\/span>\r\n\u251c\u2500\u2500 README.md\r\n\u251c\u2500\u2500 package.json\r\n\u251c\u2500\u2500 serverless.ts\r\n\u251c\u2500\u2500 src\r\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 functions\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 hello\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 handler.ts\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 index.ts\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 mock.json\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 schema.ts\r\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 index.ts\r\n\u2502\u00a0\u00a0 \u2514\u2500\u2500 libs\r\n\u2502\u00a0\u00a0     \u251c\u2500\u2500 api-gateway.ts\r\n\u2502\u00a0\u00a0     \u251c\u2500\u2500 handler-resolver.ts\r\n\u2502\u00a0\u00a0     \u2514\u2500\u2500 lambda.ts\r\n\u251c\u2500\u2500 tsconfig.json\r\n\u2514\u2500\u2500 tsconfig.paths.json\r\n\r\n4 directories, 13 files\r\n<\/code><\/pre>\n<p>\u56e0\u4e3a\u4f7f\u7528\u4e86 serverless v3 \u8fdb\u884c\u6267\u884c\uff0c\u6240\u4ee5\u6211\u8ba4\u4e3a examples\/aws-node-typescript at v3 \u00b7 serverless\/examples \u4f1a\u88ab\u5e94\u7528\uff0c\u4f46\u5b9e\u9645\u4e0a\u5e94\u7528\u7684\u662f examples\/legacy\/aws-nodejs-typescript at v3 \u00b7 serverless\/examples\u3002<\/p>\n<p>\u7528\u8fd9\u4e2a\u6a21\u677f\uff0c\u5c1d\u8bd5\u4f7f\u7528\u5e74\u521d\u7f16\u5199\u7684aws-nodejs-typescript\u6a21\u677f\u6765\u786e\u8ba4\u9879\u76ee\u521b\u5efa\u7684\u4e8b\u60c5\uff0c\u4f3c\u4e4e\u8db3\u591f\u4e86\u3002<\/p>\n<p>\u6211\u60f3\u5e94\u7528v3\u7684\u6a21\u677f\uff0c\u6240\u4ee5\u6211\u60f3\u5728URL\u4e2d\u6307\u5b9a\u5b98\u65b9\u7684\u6a21\u677f\u3002<\/p>\n<h3>\u7528&#8211;template-url\u9009\u9879\u521b\u5efa<\/h3>\n<pre class=\"post-pre\"><code>\u276f serverless create <span class=\"nt\">--template-url<\/span> https:\/\/github.com\/serverless\/examples\/tree\/v3\/aws-node-typescript <span class=\"nt\">--path<\/span> aws-nodejs-typescript-2\r\n\r\n\u2714 Project successfully created <span class=\"k\">in<\/span> <span class=\"s2\">\"aws-nodejs-typescript-2\"<\/span> <span class=\"o\">(<\/span>5s<span class=\"o\">)<\/span>\r\n\r\n\u276f tree <span class=\"nb\">.<\/span>\r\n<span class=\"nb\">.<\/span>\r\n\u251c\u2500\u2500 README.md\r\n\u251c\u2500\u2500 handler.ts\r\n\u251c\u2500\u2500 package.json\r\n\u2514\u2500\u2500 serverless.yml\r\n\r\n0 directories, 4 files\r\n<\/code><\/pre>\n<p>\u770b\u8d77\u6765\uff0c\u5df2\u7ecf\u6210\u529f\u5e94\u7528\u4e86 v3 \u66f4\u65b0\u7684\u6a21\u677f\uff0c\u4e00\u5207\u987a\u5229\u3002<\/p>\n<p>\u4ee5\u4e0b\u662f\u5b9e\u9645\u7684\u6a21\u677f\u4ee3\u7801\u3002<\/p>\n<p>&nbsp;<\/p>\n<p>\u867d\u7136\u4e0d\u8be6\u7ec6\u5ba1\u67e5\u4ee3\u7801\uff0c\u4f46\u76f8\u8f83\u4e4b\u524d\u7684\u6a21\u677f\u800c\u8a00\uff0c\u529f\u80fd\u90e8\u5206\u5df2\u7ecf\u53d8\u5f97\u7b80\u660e\u627c\u8981\uff0c\u65e0\u9700\u8d39\u529b\u53bb\u7406\u89e3\u3002\u4f8b\u5982\uff0c\u4ee5\u524d\u4f1a\u81ea\u52a8\u521b\u5efa\u7aef\u70b9\uff0c\u4f46\u73b0\u5728\u5df2\u7ecf\u6d88\u5931\u4e86\u3002\u53e6\u5916\uff0c\u867d\u7136\u7ec6\u8282\u65b9\u9762\u6709\u6240\u4e0d\u540c\uff0c\u4f46\u4eceserverless.ts\u53d8\u6210\u4e86serverless.yml\u3002<\/p>\n<p>\u4f7f\u7528aws-node-http-api-typescript\u4f5c\u4e3a\u6a21\u677f\u53ef\u4ee5\u5f88\u597d\u5730\u6309\u7167\u89c4\u8303\u521b\u5efa\u7aef\u70b9\u53ca\u5176\u5468\u8fb9\u7684\u521b\u5efa\u5de5\u4f5c\u3002<\/p>\n<h3>\u672c\u5730\u6267\u884c<\/h3>\n<p>\u597d\u5427\uff0c\u90a3\u4e48\u8ba9\u6211\u4eec\u5728\u672c\u5730\u5b9e\u9645\u8fd0\u884c\u4e00\u4e0b\u5427\u3002<\/p>\n<pre class=\"post-pre\"><code>\u276f yarn install\r\nyarn install v1.22.19\r\nwarning package.json: No license field\r\ninfo No lockfile found.\r\nwarning aws-nodejs-typescript-2: No license field\r\n[1\/4] ?  Resolving packages...\r\n[2\/4] ?  Fetching packages...\r\n[3\/4] ?  Linking dependencies...\r\n[4\/4] ?  Building fresh packages...\r\nsuccess Saved lockfile.\r\n\u2728  Done in 7.65s.\r\n\r\n\u276f serverless invoke local --function hello\r\n{\r\n    \"message\": \"Go Serverless v3! Your function executed successfully!\",\r\n    \"input\": \"\"\r\n}\r\n<\/code><\/pre>\n<p>\u53ef\u4ee5\u770b\u51fa handler.ts \u4e2d\u7684 hello \u51fd\u6570\u88ab\u6b63\u786e\u8c03\u7528\u4e86\u3002<\/p>\n<h3>\u90e8\u7f72<\/h3>\n<p>\u73b0\u5728\uff0c\u6211\u60f3\u8981\u5b9e\u9645\u90e8\u7f72\u5230AWS\u4e0a\uff0c\u6240\u4ee5\u5c06\u533a\u57df\u8bbe\u7f6e\u4e3aap-northeast-1\uff0c\u5e76\u6dfb\u52a0\u76f8\u5173\u914d\u7f6e\u4ee5\u5b9e\u73b0\u90e8\u7f72\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"na\">service<\/span><span class=\"pi\">:<\/span> <span class=\"s\">aws-nodejs-typescript-2<\/span>\r\n<span class=\"na\">frameworkVersion<\/span><span class=\"pi\">:<\/span> <span class=\"s1\">'<\/span><span class=\"s\">3'<\/span>\r\n\r\n<span class=\"na\">provider<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">aws<\/span>\r\n  <span class=\"na\">runtime<\/span><span class=\"pi\">:<\/span> <span class=\"s\">nodejs14.x<\/span>\r\n  <span class=\"na\">region<\/span><span class=\"pi\">:<\/span> <span class=\"s\">ap-northeast-1<\/span> <span class=\"c1\"># \u8ffd\u8a18<\/span>\r\n\r\n<span class=\"na\">functions<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"na\">hello<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"na\">handler<\/span><span class=\"pi\">:<\/span> <span class=\"s\">handler.hello<\/span>\r\n\r\n<span class=\"na\">plugins<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"pi\">-<\/span> <span class=\"s\">serverless-esbuild<\/span>\r\n<\/code><\/pre>\n<p>\u73b0\u5728\uff0c\u6211\u4eec\u5f00\u59cb\u90e8\u7f72\u3002\uff08\u4e3a\u4e86\u6253\u5370\u65e5\u5fd7\uff0c\u6211\u52a0\u4e0a\u4e86&#8211;verbose\u53c2\u6570\u3002\uff09<\/p>\n<pre class=\"post-pre\"><code>\u276f serverless deploy --verbose\r\n\r\nDeploying aws-nodejs-typescript-2 to stage dev (ap-northeast-1)\r\n\r\nPackaging\r\nCompiling to node14 bundle with esbuild...\r\nCompiling with concurrency: Infinity\r\nCompiling completed.\r\nZip service aws-nodejs-typescript-2 - 688.00 B [50 ms]\r\nRetrieving CloudFormation stack\r\nCreating CloudFormation stack\r\nCreating new change set\r\nWaiting for new change set to be created\r\nChange Set did not reach desired state, retrying\r\nExecuting created change set\r\n  CREATE_IN_PROGRESS - AWS::CloudFormation::Stack - aws-nodejs-typescript-2-dev\r\n  CREATE_IN_PROGRESS - AWS::S3::Bucket - ServerlessDeploymentBucket\r\n  CREATE_IN_PROGRESS - AWS::S3::Bucket - ServerlessDeploymentBucket\r\n  CREATE_COMPLETE - AWS::S3::Bucket - ServerlessDeploymentBucket\r\n  CREATE_IN_PROGRESS - AWS::S3::BucketPolicy - ServerlessDeploymentBucketPolicy\r\n  CREATE_IN_PROGRESS - AWS::S3::BucketPolicy - ServerlessDeploymentBucketPolicy\r\n  CREATE_COMPLETE - AWS::S3::BucketPolicy - ServerlessDeploymentBucketPolicy\r\n  CREATE_COMPLETE - AWS::CloudFormation::Stack - aws-nodejs-typescript-2-dev\r\nUploading\r\nUploading CloudFormation file to S3\r\nUploading State file to S3\r\nUploading service aws-nodejs-typescript-2.zip file to S3 (688 B)\r\nUpdating CloudFormation stack\r\nCreating new change set\r\nWaiting for new change set to be created\r\nChange Set did not reach desired state, retrying\r\nExecuting created change set\r\n  UPDATE_IN_PROGRESS - AWS::CloudFormation::Stack - aws-nodejs-typescript-2-dev\r\n  CREATE_IN_PROGRESS - AWS::IAM::Role - IamRoleLambdaExecution\r\n  CREATE_IN_PROGRESS - AWS::Logs::LogGroup - HelloLogGroup\r\n  CREATE_IN_PROGRESS - AWS::IAM::Role - IamRoleLambdaExecution\r\n  CREATE_IN_PROGRESS - AWS::Logs::LogGroup - HelloLogGroup\r\n  CREATE_COMPLETE - AWS::Logs::LogGroup - HelloLogGroup\r\n  CREATE_COMPLETE - AWS::IAM::Role - IamRoleLambdaExecution\r\n  CREATE_IN_PROGRESS - AWS::Lambda::Function - HelloLambdaFunction\r\n  CREATE_IN_PROGRESS - AWS::Lambda::Function - HelloLambdaFunction\r\n  CREATE_COMPLETE - AWS::Lambda::Function - HelloLambdaFunction\r\n  CREATE_IN_PROGRESS - AWS::Lambda::Version - HelloLambdaVersion****************************************\r\n  CREATE_IN_PROGRESS - AWS::Lambda::Version - HelloLambdaVersion****************************************\r\n  CREATE_COMPLETE - AWS::Lambda::Version - HelloLambdaVersion****************************************\r\n  UPDATE_COMPLETE_CLEANUP_IN_PROGRESS - AWS::CloudFormation::Stack - aws-nodejs-typescript-2-dev\r\n  UPDATE_COMPLETE - AWS::CloudFormation::Stack - aws-nodejs-typescript-2-dev\r\nRetrieving CloudFormation stack\r\nRemoving old service artifacts from S3\r\n\r\n\u2714 Service deployed to stack aws-nodejs-typescript-2-dev (110s)\r\n\r\nfunctions:\r\n  hello: aws-nodejs-typescript-2-dev-hello (688 B)\r\n\r\nStack Outputs:\r\n  HelloLambdaFunctionQualifiedArn: arn:aws:lambda:ap-northeast-1:************:function:aws-nodejs-typescript-2-dev-hello:3\r\n  ServerlessDeploymentBucketName: aws-nodejs-typescript-2-serverlessdeploymentbuck-************\r\n<\/code><\/pre>\n<p>\u8ba9\u6211\u4eec\u6765\u6267\u884c\u529f\u80fd\u5e76\u67e5\u770b\u90e8\u7f72\u7684\u4fe1\u606f\u5427\u3002<\/p>\n<pre class=\"post-pre\"><code>\u276f serverless invoke --function hello\r\n{\r\n    \"message\": \"Go Serverless v3! Your function executed successfully!\",\r\n    \"input\": {}\r\n}\r\n\r\n\u276f serverless info\r\nservice: aws-nodejs-typescript-2\r\nstage: dev\r\nregion: ap-northeast-1\r\nstack: aws-nodejs-typescript-2-dev\r\nfunctions:\r\n  hello: aws-nodejs-typescript-2-dev-hello\r\n<\/code><\/pre>\n<p>\u8bf7\u786e\u4fdd\u5728\u8fd9\u91cc\u8fdb\u884c\u786e\u8ba4\uff0c\u53ef\u4ee5\u901a\u8fc7serverless info\u8fdb\u884c\u67e5\u9a8c\uff0c\u6216\u8005\u53c2\u8003\u5148\u524d\u7684\u65e5\u5fd7\u3002<\/p>\n<blockquote><p>\u5c06 aws-nodejs-typescript-2 \u90e8\u7f72\u5230 dev \u9636\u6bb5 (ap-northeast-1)<\/p><\/blockquote>\n<p>\u56e0\u4e3a\u5199\u7740&#8217;\u3068\u66f8\u3044\u3066\u3042\u308b\u306e\u3067&#8217;\uff0c\u6240\u4ee5\u5df2\u5c06stage\u540d\u6ce8\u518c\u4e3adev\u3002\uff08\u6211\u8ba4\u4e3a\u5728serverless.yml\u4e2d\u660e\u786e\u8bf4\u660e\u53ef\u4ee5\u9632\u6b62\u56f0\u60d1\u3002\uff09<\/p>\n<p>\u901a\u8fc7\u4f7f\u7528\u6b64\u529f\u80fd\u4ee5\u53caServerless v3\u5f15\u5165\u7684stage parameters\uff0c\u53ef\u4ee5\u66f4\u8f7b\u677e\u5730\u5b9a\u4e49\u548c\u533a\u5206\u4e0d\u540c\u73af\u5883\uff08\u4f8b\u5982dev\u3001staging\u3001production\uff09\u7684\u53d8\u91cf\u3002\uff08\u53c2\u8003\uff1aServerless Framework v3\u65b0\u529f\u80fd\u7684Stage Parameters\u4ecb\u7ecd | \u8c46\u8535\u5f00\u53d1\u8005\u7f51\u7ad9\uff09<\/p>\n<p>&nbsp;<\/p>\n<h3>\u5c06\u8282\u70b9v18\u5347\u7ea7<\/h3>\n<p>\u5728\u9605\u8bfb\u672c\u6587\u7684\u8bfb\u8005\u4e2d\uff0c\u53ef\u80fd\u4f1a\u6709\u4eba\u611f\u5230\u7591\u60d1\u3002\u6211\u7684\u672c\u5730\u73af\u5883\u662f\u4f7f\u7528\u4e86Node v18\uff0c\u4f46serverless.yml\u4ecd\u4fdd\u6301\u5728nodejs14.x\u7684\u72b6\u6001\uff0c\u6240\u4ee5\u5bfc\u81f4\u4e86\u4e0d\u534f\u8c03\u7684\u60c5\u51b5\u3002<\/p>\n<p>\u7531\u4e8eAWS Lambda\u5df2\u7ecf\u652f\u6301v18\uff0c\u6240\u4ee5\u6211\u4eec\u5e94\u8be5\u5347\u7ea7\u5230nodejs v18\u3002<\/p>\n<p>&nbsp;<\/p>\n<pre class=\"post-pre\"><code><span class=\"na\">service<\/span><span class=\"pi\">:<\/span> <span class=\"s\">aws-nodejs-typescript-2<\/span>\r\n<span class=\"na\">frameworkVersion<\/span><span class=\"pi\">:<\/span> <span class=\"s1\">'<\/span><span class=\"s\">3'<\/span>\r\n\r\n<span class=\"na\">provider<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">aws<\/span>\r\n  <span class=\"na\">runtime<\/span><span class=\"pi\">:<\/span> <span class=\"s\">nodejs18.x<\/span> <span class=\"c1\"># v14-&gt;v18\u306b\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8<\/span>\r\n  <span class=\"na\">stage<\/span><span class=\"pi\">:<\/span> <span class=\"s\">${opt:stage, 'dev'}<\/span> <span class=\"c1\"># \u30c7\u30d7\u30ed\u30a4\u6642\u306b\u8a2d\u5b9a\u3067\u304d\u308b\u3088\u3046\u306b\u8a2d\u5b9a\u3002\u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u306f'dev'\u3068\u3059\u308b<\/span>\r\n  <span class=\"na\">region<\/span><span class=\"pi\">:<\/span> <span class=\"s\">ap-northeast-1<\/span>\r\n\r\n<span class=\"na\">functions<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"na\">hello<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"na\">handler<\/span><span class=\"pi\">:<\/span> <span class=\"s\">handler.hello<\/span>\r\n\r\n<span class=\"na\">plugins<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"pi\">-<\/span> <span class=\"s\">serverless-esbuild<\/span>\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>\u276f serverless deploy --stage dev --verbose\r\n\r\nDeploying aws-nodejs-typescript-2 to stage dev (ap-northeast-1)\r\n\r\nPackaging\r\nCompiling to node18 bundle with esbuild...\r\nCompiling with concurrency: Infinity\r\nCompiling completed.\r\nZip service aws-nodejs-typescript-2 - 688.00 B [35 ms]\r\nRetrieving CloudFormation stack\r\nUploading\r\nUploading CloudFormation file to S3\r\nUploading State file to S3\r\nUploading service aws-nodejs-typescript-2.zip file to S3 (688 B)\r\nUpdating CloudFormation stack\r\nCreating new change set\r\nWaiting for new change set to be created\r\nChange Set did not reach desired state, retrying\r\nExecuting created change set\r\n(\u4e2d\u7565)\r\nRetrieving CloudFormation stack\r\nRemoving old service artifacts from S3\r\n\r\n\u2714 Service deployed to stack aws-nodejs-typescript-2-dev (64s)\r\n\r\nfunctions:\r\n  hello: aws-nodejs-typescript-2-dev-hello (688 B)\r\n\r\nStack Outputs:\r\n  HelloLambdaFunctionQualifiedArn: arn:aws:lambda:ap-northeast-1:************:function:aws-nodejs-typescript-2-dev-hello:4\r\n  ServerlessDeploymentBucketName: aws-nodejs-typescript-2-serverlessdeploymentbuck-************\r\n\r\n\u276f serverless invoke --function hello\r\n{\r\n    \"message\": \"Go Serverless v3! Your function executed successfully!\",\r\n    \"input\": {}\r\n}\r\n<\/code><\/pre>\n<p>\u8ba9\u6211\u4eec\u5728\u7ba1\u7406\u754c\u9762\u4e2d\u4e5f\u6765\u770b\u770b\uff08\u4eceNode.js v14 \u5347\u7ea7\u5230 V18\uff09\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d0f4a37434c4406bee768\/55-1.png\" alt=\"\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8 2022-12-11 16.44.14.png\" \/><\/div>\n<p>\u4f3c\u4e4e\u4e00\u5207\u6b63\u5e38\uff0c\u5df2\u7d93\u80fd\u5920\u9032\u884cv18\u7684\u66f4\u65b0\u4e86\u3002<\/p>\n<h3>\u5347\u7ea7\u81f3 Yarn v3<\/h3>\n<p>\u6700\u5f8c\u9084\u6709\u4e00\u500b\u984d\u5916\u7684\u79ae\u7269\uff0c\u6211\u5011\u4f86\u8a66\u8a66\u5c07yarn\u5347\u7d1a\u5230v3\u7248\u672c\u3002\u5728\u6211\u7684\u74b0\u5883\u4e2d\uff0c\u539f\u672c<\/p>\n<pre class=\"post-pre\"><code>\u276f yarn -v\r\n1.22.19\r\n<\/code><\/pre>\n<p>\u6240\u4ee5\uff0c\u6211\u9009\u62e9\u4e86\u66f4\u65b01\u7cfb\u5217\u7684\u7248\u672c\u8bd5\u8bd5\u770b\u3002<\/p>\n<pre class=\"post-pre\"><code>\u276f rm -rf yarn.lock node_modules\r\n\u276f yarn set version berry\r\n<\/code><\/pre>\n<p>\u5728.yarnrc.yml\u4e2d\u6dfb\u52a0\u5185\u5bb9\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"na\">yarnPath<\/span><span class=\"pi\">:<\/span> <span class=\"s\">.yarn\/releases\/yarn-3.3.0.cjs<\/span>\r\n<span class=\"na\">nodeLinker<\/span><span class=\"pi\">:<\/span> <span class=\"s\">node-modules<\/span> <span class=\"c1\">#\u8ffd\u52a0<\/span>\r\n<\/code><\/pre>\n<p>\u7f16\u5199.gitignore\u6587\u4ef6<\/p>\n<pre class=\"post-pre\"><code># package directories\r\nnode_modules\r\n.esbuild\r\n\r\n# Serverless directories\r\n.serverless\r\n\r\n# yarn v3\r\n.yarn\/\r\n!.yarn\/releases\/*\r\n<\/code><\/pre>\n<p>\u6211\u4f1a\u5c1d\u8bd5\u786e\u8ba4\u4e00\u4e0b\uff0c\u770b\u770b\u8fd9\u4e2a\u662f\u5426\u80fd\u6b63\u5e38\u8fd0\u4f5c\u3002<\/p>\n<pre class=\"post-pre\"><code>\u276f yarn install\r\n\u276f serverless invoke local --function hello\r\n{\r\n    \"message\": \"Go Serverless v3! Your function executed successfully!\",\r\n    \"input\": \"\"\r\n}\r\n<\/code><\/pre>\n<p>\u770b\u8d77\u6765\u6ca1\u6709\u95ee\u9898\u3002\u5982\u679c\u6709\u7ec6\u8282\u65b9\u9762\u7684\u7591\u95ee\uff0c\u53ef\u4ee5\u53c2\u8003\u5176\u4ed6\u4eba\u7684\u6587\u7ae0\u3002\u603b\u7684\u6765\u8bf4\uff0c\u8fd9\u6b21\u7684\u66f4\u65b0\u4f3c\u4e4e\u5f88\u987a\u5229\u3002<\/p>\n<h2>\u5220\u9664\u670d\u52a1<\/h2>\n<p>\u4ee5\u4e0b\u662f\u53ef\u4ee5\u5220\u9664\u670d\u52a1\u7684\u65b9\u5f0f\u3002\u9636\u6bb5\u540d\u79f0\u9ed8\u8ba4\u4e3adev\uff0c\u4f46\u4e0d\u4e00\u5b9a\u5fc5\u987b\u3002<\/p>\n<pre class=\"post-pre\"><code>\u276f serverless remove --stage dev\r\n<\/code><\/pre>\n<h2>\u603b\u7ed3<\/h2>\n<p>\u9019\u6b21\u6211\u5617\u8a66\u5728serverless v3\u7684\u74b0\u5883\u4e2d\u57f7\u884c\u6a21\u677f\u7684\u66f4\u65b0\u3002\u4ee5\u524d\u7684\u6a21\u677f\u529f\u80fd\u975e\u5e38\u8c50\u5bcc\uff0c\u4f46\u9019\u6b21\u6211\u5011\u5c07\u53ea\u7c21\u77ed\u4e26\u7e7c\u7e8c\u9032\u884c\u5fc5\u8981\u7684\u90e8\u5206\u3002<\/p>\n<h2>\u8bf7\u63d0\u4f9b\u76f8\u5173\u94fe\u63a5\u96c6\u3002<\/h2>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">Serverless: Develop &amp; Monitor Apps On AWS Lambda<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">serverless\/serverless: \u26a1 Serverless Framework \u2013 Build web, mobile and IoT applications with serverless architectures using AWS Lambda, Azure Functions, Google CloudFunctions &amp; more! \u2013<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u5c0e\u5165\u307e\u308f\u308a<\/ul>\n<\/li>\n<\/ul>\n<p>Serverless Framework\u306e\u4f7f\u3044\u65b9\u307e\u3068\u3081 | Serverless Operations<br \/>\n\u2191\u524d\u56de\u3082\u53c2\u8003\u306b\u3055\u305b\u3066\u3044\u305f\u3060\u304d\u307e\u3057\u305f\u304c\u3001serverless v3\u306e\u5185\u5bb9\u3082\u52a0\u7b46\u3055\u308c\u3066\u3044\u308b\u3001\u3059\u3054\u3044<\/p>\n<p>serverless v2 -&gt; v3<\/p>\n<p>Serverless Framework v2 \u304b\u3089 v3 \u306e\u5909\u66f4\u70b9\u307e\u3068\u3081 &#8211; \u30b5\u30fc\u30d0\u30fc\u30ef\u30fc\u30af\u30b9\u30a8\u30f3\u30b8\u30cb\u30a2\u30d6\u30ed\u30b0<br \/>\nServerlessFramework V3 \u306e\u30e1\u30ea\u30c3\u30c8\uff06\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u65b9\u6cd5\u3001\u65b0\u6a5f\u80fd\u306e\u30e1\u30ea\u30c3\u30c8\u3092\u30b5\u30fc\u30d0\u30fc\u30ec\u30b9\u30a8\u30ad\u30b9\u30d1\u30fc\u30c8\u304c\u7d39\u4ecb\u3057\u307e\u3059? | Ragate \u30d6\u30ed\u30b0<br \/>\nServerless Framework v3\u65b0\u6a5f\u80fd\u306eStage Parameters\u7d39\u4ecb | \u8c46\u8535\u30c7\u30d9\u30ed\u30c3\u30d1\u30fc\u30b5\u30a4\u30c8<\/p>\n<p>node v18<\/p>\n<p>AWS Lambda \u304c Node.js 18 \u306e\u30b5\u30dd\u30fc\u30c8\u3092\u8ffd\u52a0<\/p>\n<p>yarn v3<\/p>\n<p>yarn v3 \u306e\u72ec\u81ea\u6a5f\u80fd\u3092\u907f\u3051\u3064\u3064 yarn v1 \u304b\u3089 v3 \u3078\u306e\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u3092\u3059\u308b<br \/>\nyarn3 \u304c\u51fa\u305f\u3053\u3068\u3060\u3057 pnp \u4f7f\u3063\u3066\u307f\u308b<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u8fd9\u7bc7\u6587\u7ae0\u662fAteam Finergy Inc.\u00d7 Ateam CommerceTech Inc.\u00d7 Ateam [&hellip;]<\/p>\n","protected":false},"author":12,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-31989","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v21.5 (Yoast SEO v21.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>\u5c1d\u8bd5\u4f7f\u7528aws-nodejs-typescript\u6a21\u677f(serverless v3) - Blog - Silicon Cloud<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.silicloud.com\/zh\/blog\/\u5c1d\u8bd5\u4f7f\u7528aws-nodejs-typescript\u6a21\u677fserverless-v3\u3002\/\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u5c1d\u8bd5\u4f7f\u7528aws-nodejs-typescript\u6a21\u677f(serverless v3)\" \/>\n<meta property=\"og:description\" content=\"\u8fd9\u7bc7\u6587\u7ae0\u662fAteam Finergy Inc.\u00d7 Ateam CommerceTech Inc.\u00d7 Ateam [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/zh\/blog\/\u5c1d\u8bd5\u4f7f\u7528aws-nodejs-typescript\u6a21\u677fserverless-v3\u3002\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:published_time\" content=\"2023-07-01T20:03:09+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-04-29T07:42:17+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d0f4a37434c4406bee768\/55-1.png\" \/>\n<meta name=\"author\" content=\"\u9038, \u79d1\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u9038, \u79d1\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%9d%e8%af%95%e4%bd%bf%e7%94%a8aws-nodejs-typescript%e6%a8%a1%e6%9d%bfserverless-v3%e3%80%82\/\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%9d%e8%af%95%e4%bd%bf%e7%94%a8aws-nodejs-typescript%e6%a8%a1%e6%9d%bfserverless-v3%e3%80%82\/\",\"name\":\"\u5c1d\u8bd5\u4f7f\u7528aws-nodejs-typescript\u6a21\u677f(serverless v3) - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\"},\"datePublished\":\"2023-07-01T20:03:09+00:00\",\"dateModified\":\"2024-04-29T07:42:17+00:00\",\"author\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/85c1dae56e6ea1e695c73d33c684d487\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%9d%e8%af%95%e4%bd%bf%e7%94%a8aws-nodejs-typescript%e6%a8%a1%e6%9d%bfserverless-v3%e3%80%82\/#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%9d%e8%af%95%e4%bd%bf%e7%94%a8aws-nodejs-typescript%e6%a8%a1%e6%9d%bfserverless-v3%e3%80%82\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%9d%e8%af%95%e4%bd%bf%e7%94%a8aws-nodejs-typescript%e6%a8%a1%e6%9d%bfserverless-v3%e3%80%82\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.silicloud.com\/zh\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u5c1d\u8bd5\u4f7f\u7528aws-nodejs-typescript\u6a21\u677f(serverless v3)\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/\",\"name\":\"Blog - Silicon Cloud\",\"description\":\"\",\"inLanguage\":\"zh-Hans\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/85c1dae56e6ea1e695c73d33c684d487\",\"name\":\"\u9038, \u79d1\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/c94f6d9cbbfbca863fab309840bd690c153c95f8490c290ad2ed54dd693dad16?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/c94f6d9cbbfbca863fab309840bd690c153c95f8490c290ad2ed54dd693dad16?s=96&d=mm&r=g\",\"caption\":\"\u9038, \u79d1\"},\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/author\/keyi\/\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%9d%e8%af%95%e4%bd%bf%e7%94%a8aws-nodejs-typescript%e6%a8%a1%e6%9d%bfserverless-v3%e3%80%82\/#local-main-organization-logo\",\"url\":\"\",\"contentUrl\":\"\",\"caption\":\"Blog - Silicon Cloud\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"\u5c1d\u8bd5\u4f7f\u7528aws-nodejs-typescript\u6a21\u677f(serverless v3) - Blog - Silicon Cloud","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.silicloud.com\/zh\/blog\/\u5c1d\u8bd5\u4f7f\u7528aws-nodejs-typescript\u6a21\u677fserverless-v3\u3002\/","og_locale":"zh_CN","og_type":"article","og_title":"\u5c1d\u8bd5\u4f7f\u7528aws-nodejs-typescript\u6a21\u677f(serverless v3)","og_description":"\u8fd9\u7bc7\u6587\u7ae0\u662fAteam Finergy Inc.\u00d7 Ateam CommerceTech Inc.\u00d7 Ateam [&hellip;]","og_url":"https:\/\/www.silicloud.com\/zh\/blog\/\u5c1d\u8bd5\u4f7f\u7528aws-nodejs-typescript\u6a21\u677fserverless-v3\u3002\/","og_site_name":"Blog - Silicon Cloud","article_published_time":"2023-07-01T20:03:09+00:00","article_modified_time":"2024-04-29T07:42:17+00:00","og_image":[{"url":"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d0f4a37434c4406bee768\/55-1.png"}],"author":"\u9038, \u79d1","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"\u9038, \u79d1","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"5 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%9d%e8%af%95%e4%bd%bf%e7%94%a8aws-nodejs-typescript%e6%a8%a1%e6%9d%bfserverless-v3%e3%80%82\/","url":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%9d%e8%af%95%e4%bd%bf%e7%94%a8aws-nodejs-typescript%e6%a8%a1%e6%9d%bfserverless-v3%e3%80%82\/","name":"\u5c1d\u8bd5\u4f7f\u7528aws-nodejs-typescript\u6a21\u677f(serverless v3) - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website"},"datePublished":"2023-07-01T20:03:09+00:00","dateModified":"2024-04-29T07:42:17+00:00","author":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/85c1dae56e6ea1e695c73d33c684d487"},"breadcrumb":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%9d%e8%af%95%e4%bd%bf%e7%94%a8aws-nodejs-typescript%e6%a8%a1%e6%9d%bfserverless-v3%e3%80%82\/#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%9d%e8%af%95%e4%bd%bf%e7%94%a8aws-nodejs-typescript%e6%a8%a1%e6%9d%bfserverless-v3%e3%80%82\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%9d%e8%af%95%e4%bd%bf%e7%94%a8aws-nodejs-typescript%e6%a8%a1%e6%9d%bfserverless-v3%e3%80%82\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.silicloud.com\/zh\/blog\/"},{"@type":"ListItem","position":2,"name":"\u5c1d\u8bd5\u4f7f\u7528aws-nodejs-typescript\u6a21\u677f(serverless v3)"}]},{"@type":"WebSite","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website","url":"https:\/\/www.silicloud.com\/zh\/blog\/","name":"Blog - Silicon Cloud","description":"","inLanguage":"zh-Hans"},{"@type":"Person","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/85c1dae56e6ea1e695c73d33c684d487","name":"\u9038, \u79d1","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/c94f6d9cbbfbca863fab309840bd690c153c95f8490c290ad2ed54dd693dad16?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/c94f6d9cbbfbca863fab309840bd690c153c95f8490c290ad2ed54dd693dad16?s=96&d=mm&r=g","caption":"\u9038, \u79d1"},"url":"https:\/\/www.silicloud.com\/zh\/blog\/author\/keyi\/"},{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%b0%9d%e8%af%95%e4%bd%bf%e7%94%a8aws-nodejs-typescript%e6%a8%a1%e6%9d%bfserverless-v3%e3%80%82\/#local-main-organization-logo","url":"","contentUrl":"","caption":"Blog - Silicon Cloud"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/31989","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/users\/12"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/comments?post=31989"}],"version-history":[{"count":2,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/31989\/revisions"}],"predecessor-version":[{"id":86163,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/31989\/revisions\/86163"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/media?parent=31989"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/categories?post=31989"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/tags?post=31989"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}