{"id":32308,"date":"2023-12-22T00:20:09","date_gmt":"2023-11-13T14:23:11","guid":{"rendered":"https:\/\/www.silicloud.com\/zh\/blog\/%e6%88%91%e7%94%a8go%e8%af%ad%e8%a8%80%e5%b0%9d%e8%af%95%e4%ba%86serverless-framework%e7%9a%84%e6%a8%a1%e6%9d%bf%e3%80%82\/"},"modified":"2024-05-04T14:44:10","modified_gmt":"2024-05-04T06:44:10","slug":"%e6%88%91%e7%94%a8go%e8%af%ad%e8%a8%80%e5%b0%9d%e8%af%95%e4%ba%86serverless-framework%e7%9a%84%e6%a8%a1%e6%9d%bf%e3%80%82","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/zh\/blog\/%e6%88%91%e7%94%a8go%e8%af%ad%e8%a8%80%e5%b0%9d%e8%af%95%e4%ba%86serverless-framework%e7%9a%84%e6%a8%a1%e6%9d%bf%e3%80%82\/","title":{"rendered":"\u6211\u7528Go\u8bed\u8a00\u5c1d\u8bd5\u4e86Serverless Framework\u7684\u6a21\u677f"},"content":{"rendered":"<h1>\u603b\u7ed3<\/h1>\n<p>\u6211\u5df2\u7ecf\u5c1d\u8bd5\u4f7f\u7528aws-go\u5728Serverless Framework\u7684\u6a21\u677f\u521b\u5efa\u529f\u80fd\u4e2d\u8fdb\u884c\u90e8\u7f72\u3002<\/p>\n<h3>\u73af\u5883<\/h3>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">Node v8.11.1<\/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\">npm 5.6.0<\/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\">Go 1.10.3<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">IAM\u30e6\u30fc\u30b6\u304c\u4f5c\u6210\u3055\u308c\u3066\u3044\u308b\u3053\u3068(AWS API\u3092\u4f7f\u3063\u3066\u64cd\u4f5c\u3059\u308b\u305f\u3081)<\/ul>\n<h4>Serverless Framework\u662f\u4ec0\u4e48<\/h4>\n<p>\u4ee5\u4e0b\u7684\u6b65\u9aa4\u90fd\u4f1a\u81ea\u52a8\u5b8c\u6210\uff0c\u53ef\u4ee5\u8282\u7701\u5f00\u53d1\u65f6\u7684\u5de5\u4f5c\u91cf\uff0c\u975e\u5e38\u65b9\u4fbf\u3002<br \/>\n&#8211; \u751f\u6210Lambda\u51fd\u6570<br \/>\n&#8211; \u4e0a\u4f20\u51fd\u6570<br \/>\n&#8211; \u8bbe\u7f6e\u89e6\u53d1\u4e8b\u4ef6\u7684\u89e6\u53d1\u5668<\/p>\n<h3>\u5b89\u88c5Serverless Framework\u3002<\/h3>\n<p>\u8bf7\u4f7f\u7528\u4ee5\u4e0b\u547d\u4ee4\u8fdb\u884c\u5b89\u88c5\u3002<\/p>\n<p>\u5168\u5c40\u5b89\u88c5Serverless\uff1anpm install -g serverless<\/p>\n<h3>\u8bbe\u7f6e\u51ed\u636e<\/h3>\n<p>\u8bf7\u8f93\u5165\u5df2\u521b\u5efa\u7684IAM\u7528\u6237\u7684\u8bbf\u95ee\u5bc6\u94a5\u548c\u79d8\u5bc6\u8bbf\u95ee\u5bc6\u94a5\u3002<\/p>\n<pre class=\"post-pre\"><code>\u276f vim ~\/.aws\/credentials\r\n\r\n[hoge]\r\naws_access_key_id =  piyo\r\naws_secret_access_key = huga\r\n<\/code><\/pre>\n<p>\u5982\u679c\u9700\u8981\u8bbf\u95ee\u591a\u4e2a\u73af\u5883\u5e76\u4e14\u9700\u8981\u4f7f\u7528\u4e0d\u540c\u7684IAM\u7528\u6237\uff0c\u5efa\u8bae\u6839\u636e\u6bcf\u4e2a\u73af\u5883\u8bbe\u7f6e\u9002\u5f53\u7684\u547d\u540d\u3002<\/p>\n<h3>\u914d\u7f6e\u8a2d\u5b9a de<\/h3>\n<pre class=\"post-pre\"><code>\u276f vim ~\/.aws\/config\r\n\r\n[hoge]\r\noutput = json\r\nregion = ap-northeast-1    \/\/\u597d\u304d\u306a\u30ea\u30fc\u30b8\u30e7\u30f3\u3067\u8a2d\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\u3002\r\n<\/code><\/pre>\n<h3>\u5c1d\u8bd5\u4f7f\u7528\u6a21\u677f\u521b\u5efa\u65b0\u9879\u76ee<\/h3>\n<p>\u5f53\u8bbe\u7f6e\u5b8c\u6210\u540e\uff0c\u6211\u4eec\u7ec8\u4e8e\u53ef\u4ee5\u4f7f\u7528sls\u7684\u6a21\u677f\u6765\u521b\u5efa\u65b0\u9879\u76ee\u4e86\u3002<br \/>\n\u8bf7\u52a1\u5fc5\u5728$GOPATH\u4ee5\u4e0b\u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\u3002<\/p>\n<p>~\/go\/src\/github.com\/xxxxx\/sls-sample\u76ee\u5f55\u4e0b\u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\uff1a<br \/>\nsls create &#8211;template aws-go<\/p>\n<p>\u6267\u884c\u540e\uff0c\u5c06\u4f1a\u521b\u5efa\u4ee5\u4e0b\u6587\u4ef6\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"k\">package<\/span> <span class=\"n\">main<\/span>\r\n\r\n<span class=\"k\">import<\/span> <span class=\"p\">(<\/span>\r\n    <span class=\"s\">\"github.com\/aws\/aws-lambda-go\/lambda\"<\/span>\r\n<span class=\"p\">)<\/span>\r\n\r\n<span class=\"k\">type<\/span> <span class=\"n\">Response<\/span> <span class=\"k\">struct<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"n\">Message<\/span> <span class=\"kt\">string<\/span> <span class=\"s\">`json:\"message\"`<\/span>\r\n<span class=\"p\">}<\/span>\r\n\r\n<span class=\"k\">func<\/span> <span class=\"n\">Handler<\/span><span class=\"p\">()<\/span> <span class=\"p\">(<\/span><span class=\"n\">Response<\/span><span class=\"p\">,<\/span> <span class=\"kt\">error<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"k\">return<\/span> <span class=\"n\">Response<\/span><span class=\"p\">{<\/span>\r\n        <span class=\"n\">Message<\/span><span class=\"o\">:<\/span> <span class=\"s\">\"Go Serverless v1.0! Your function executed successfully!\"<\/span><span class=\"p\">,<\/span>\r\n    <span class=\"p\">},<\/span> <span class=\"no\">nil<\/span>\r\n<span class=\"p\">}<\/span>\r\n\r\n<span class=\"k\">func<\/span> <span class=\"n\">main<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"n\">lambda<\/span><span class=\"o\">.<\/span><span class=\"n\">Start<\/span><span class=\"p\">(<\/span><span class=\"n\">Handler<\/span><span class=\"p\">)<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code><span class=\"k\">package<\/span> <span class=\"n\">main<\/span>\r\n\r\n<span class=\"k\">import<\/span> <span class=\"p\">(<\/span>\r\n    <span class=\"s\">\"github.com\/aws\/aws-lambda-go\/lambda\"<\/span>\r\n<span class=\"p\">)<\/span>\r\n\r\n<span class=\"k\">type<\/span> <span class=\"n\">Response<\/span> <span class=\"k\">struct<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"n\">Message<\/span> <span class=\"kt\">string<\/span> <span class=\"s\">`json:\"message\"`<\/span>\r\n<span class=\"p\">}<\/span>\r\n\r\n<span class=\"k\">func<\/span> <span class=\"n\">Handler<\/span><span class=\"p\">()<\/span> <span class=\"p\">(<\/span><span class=\"n\">Response<\/span><span class=\"p\">,<\/span> <span class=\"kt\">error<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"k\">return<\/span> <span class=\"n\">Response<\/span><span class=\"p\">{<\/span>\r\n        <span class=\"n\">Message<\/span><span class=\"o\">:<\/span> <span class=\"s\">\"Okay so your other function also executed successfully!\"<\/span><span class=\"p\">,<\/span>\r\n    <span class=\"p\">},<\/span> <span class=\"no\">nil<\/span>\r\n<span class=\"p\">}<\/span>\r\n\r\n<span class=\"k\">func<\/span> <span class=\"n\">main<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"n\">lambda<\/span><span class=\"o\">.<\/span><span class=\"n\">Start<\/span><span class=\"p\">(<\/span><span class=\"n\">Handler<\/span><span class=\"p\">)<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<p>\u6211\u89c9\u5f97\u60a8\u53ef\u4ee5\u786e\u8ba4\u5df2\u7ecf\u521b\u5efa\u4e86\u8fd9\u79cd\u7c7b\u578b\u7684\u6a21\u677f\u6587\u4ef6\u3002<br \/>\n\u8bf7\u5bf9\u5df2\u521b\u5efa\u7684\u6587\u4ef6\u4e2d\u7684serverless.yml\u8fdb\u884c\u90e8\u5206\u7f16\u8f91\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"c1\"># Welcome to Serverless!<\/span>\r\n<span class=\"c1\">#<\/span>\r\n<span class=\"c1\"># This file is the main config file for your service.<\/span>\r\n<span class=\"c1\"># It's very minimal at this point and uses default values.<\/span>\r\n<span class=\"c1\"># You can always add more config options for more control.<\/span>\r\n<span class=\"c1\"># We've included some commented out config examples here.<\/span>\r\n<span class=\"c1\"># Just uncomment any of them to get that config option.<\/span>\r\n<span class=\"c1\">#<\/span>\r\n<span class=\"c1\"># For full config options, check the docs:<\/span>\r\n<span class=\"c1\">#    docs.serverless.com<\/span>\r\n<span class=\"c1\">#<\/span>\r\n<span class=\"c1\"># Happy Coding!<\/span>\r\n\r\n<span class=\"na\">service<\/span><span class=\"pi\">:<\/span> <span class=\"s\">hoge<\/span> <span class=\"c1\"># \u597d\u304d\u306a\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u540d<\/span>\r\n<span class=\"c1\"># You can pin your service to only deploy with a specific Serverless version<\/span>\r\n<span class=\"c1\"># Check out our docs for more details<\/span>\r\n<span class=\"c1\"># frameworkVersion: \"=X.X.X\"<\/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\">go1.x<\/span>\r\n\r\n<span class=\"c1\"># you can overwrite defaults here<\/span>\r\n<span class=\"c1\">#  stage: dev<\/span>\r\n<span class=\"c1\">#  region: us-east-1<\/span>\r\n<span class=\"na\">region<\/span><span class=\"pi\">:<\/span> <span class=\"s\">ap-northeast-1<\/span>  <span class=\"c1\">#\u30ea\u30fc\u30b8\u30e7\u30f3\u3092\u8a2d\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044(\u4eca\u56de\u306f\u6771\u4eac)<\/span>\r\n\r\n<span class=\"c1\"># you can add statements to the Lambda function's IAM Role here<\/span>\r\n<span class=\"c1\">#  iamRoleStatements:<\/span>\r\n<span class=\"c1\">#    - Effect: \"Allow\"<\/span>\r\n<span class=\"c1\">#      Action:<\/span>\r\n<span class=\"c1\">#        - \"s3:ListBucket\"<\/span>\r\n<span class=\"c1\">#      Resource: { \"Fn::Join\" : [\"\", [\"arn:aws:s3:::\", { \"Ref\" : \"ServerlessDeploymentBucket\" } ] ]  }<\/span>\r\n<span class=\"c1\">#    - Effect: \"Allow\"<\/span>\r\n<span class=\"c1\">#      Action:<\/span>\r\n<span class=\"c1\">#        - \"s3:PutObject\"<\/span>\r\n<span class=\"c1\">#      Resource:<\/span>\r\n<span class=\"c1\">#        Fn::Join:<\/span>\r\n<span class=\"c1\">#          - \"\"<\/span>\r\n<span class=\"c1\">#          - - \"arn:aws:s3:::\"<\/span>\r\n<span class=\"c1\">#            - \"Ref\" : \"ServerlessDeploymentBucket\"<\/span>\r\n<span class=\"c1\">#            - \"\/*\"<\/span>\r\n\r\n<span class=\"c1\"># you can define service wide environment variables here<\/span>\r\n<span class=\"c1\">#  environment:<\/span>\r\n<span class=\"c1\">#    variable1: value1<\/span>\r\n\r\n<span class=\"na\">package<\/span><span class=\"pi\">:<\/span>\r\n <span class=\"na\">exclude<\/span><span class=\"pi\">:<\/span>\r\n   <span class=\"pi\">-<\/span> <span class=\"s\">.\/**<\/span>\r\n <span class=\"na\">include<\/span><span class=\"pi\">:<\/span>\r\n   <span class=\"pi\">-<\/span> <span class=\"s\">.\/bin\/**<\/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\">bin\/hello<\/span>\r\n  <span class=\"na\">world<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"na\">handler<\/span><span class=\"pi\">:<\/span> <span class=\"s\">bin\/world<\/span>\r\n\r\n<span class=\"c1\">#    The following are a few example events you can configure<\/span>\r\n<span class=\"c1\">#    NOTE: Please make sure to change your handler code to work with those events<\/span>\r\n<span class=\"c1\">#    Check the event documentation for details<\/span>\r\n<span class=\"c1\"># events:<\/span>\r\n<span class=\"c1\">#    events:<\/span>\r\n<span class=\"c1\">#      - http:<\/span>\r\n<span class=\"c1\">#          path: users\/create<\/span>\r\n<span class=\"c1\">#          method: get<\/span>\r\n<span class=\"c1\">#      - s3: ${env:BUCKET}<\/span>\r\n<span class=\"c1\">#      - schedule: rate(10 minutes)<\/span>\r\n<span class=\"c1\">#      - sns: greeter-topic<\/span>\r\n<span class=\"c1\">#      - stream: arn:aws:dynamodb:region:XXXXXX:table\/foo\/stream\/1970-01-01T00:00:00.000<\/span>\r\n<span class=\"c1\">#      - alexaSkill: amzn1.ask.skill.xx-xx-xx-xx<\/span>\r\n<span class=\"c1\">#      - alexaSmartHome: amzn1.ask.skill.xx-xx-xx-xx<\/span>\r\n<span class=\"c1\">#      - iot:<\/span>\r\n<span class=\"c1\">#          sql: \"SELECT * FROM 'some_topic'\"<\/span>\r\n<span class=\"c1\">#      - cloudwatchEvent:<\/span>\r\n<span class=\"c1\">#          event:<\/span>\r\n<span class=\"c1\">#            source:<\/span>\r\n<span class=\"c1\">#              - \"aws.ec2\"<\/span>\r\n<span class=\"c1\">#            detail-type:<\/span>\r\n<span class=\"c1\">#              - \"EC2 Instance State-change Notification\"<\/span>\r\n<span class=\"c1\">#            detail:<\/span>\r\n<span class=\"c1\">#              state:<\/span>\r\n<span class=\"c1\">#                - pending<\/span>\r\n<span class=\"c1\">#      - cloudwatchLog: '\/aws\/lambda\/hello'<\/span>\r\n<span class=\"c1\">#      - cognitoUserPool:<\/span>\r\n<span class=\"c1\">#          pool: MyUserPool<\/span>\r\n<span class=\"c1\">#          trigger: PreSignUp<\/span>\r\n\r\n<span class=\"c1\">#    Define function environment variables here<\/span>\r\n<span class=\"c1\">#    environment:<\/span>\r\n<span class=\"c1\">#      variable2: value2<\/span>\r\n\r\n<span class=\"c1\"># you can add CloudFormation resource templates here<\/span>\r\n<span class=\"c1\">#resources:<\/span>\r\n<span class=\"c1\">#  Resources:<\/span>\r\n<span class=\"c1\">#    NewResource:<\/span>\r\n<span class=\"c1\">#      Type: AWS::S3::Bucket<\/span>\r\n<span class=\"c1\">#      Properties:<\/span>\r\n<span class=\"c1\">#        BucketName: my-new-bucket<\/span>\r\n<span class=\"c1\">#  Outputs:<\/span>\r\n<span class=\"c1\">#     NewOutput:<\/span>\r\n<span class=\"c1\">#       Description: \"Description for the output\"<\/span>\r\n<span class=\"c1\">#       Value: \"Some output value\"<\/span>\r\n<\/code><\/pre>\n<h3>\u90e8\u7f72\u548c\u6267\u884c<\/h3>\n<p>\u5f53\u6587\u4ef6\u7684\u8bbe\u7f6e\u5b8c\u6210\u540e\uff0c\u8ba9\u6211\u4eec\u5c1d\u8bd5\u5b9e\u9645\u90e8\u7f72\u7684\u6b65\u9aa4\u3002<\/p>\n<p>\/\u301c\/go\/src\/github.com\/xxxxx\/sls-sample \u53ef\u4ee5\u88ab\u6539\u5199\u6210\uff1a<\/p>\n<pre class=\"post-pre\"><code>$ make build\r\n\r\ngo get github.com\/aws\/aws-lambda-go\/lambda\r\nenv GOOS=linux go build -ldflags=\"-s -w\" -o bin\/hello hello\/main.go\r\nenv GOOS=linux go build -ldflags=\"-s -w\" -o bin\/world world\/main.go\r\n<\/code><\/pre>\n<p>\u8bf7\u4f7f\u7528\u60a8\u5728\u6700\u521d\u8bbe\u7f6e\u7684 credentials \u548c config \u7684\u540d\u79f0\uff08\u5728\u6b64\u5904\u4e3a hoge\uff09\u6765\u6307\u5b9a\u5e76\u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\uff1a$ sls deploy &#8211;aws-profile hoge\u3002<\/p>\n<pre class=\"post-pre\"><code>$ sls deploy --aws-profile hoge\r\n\r\nServerless: Packaging service...\r\nServerless: Excluding development dependencies...\r\nServerless: Creating Stack...\r\nServerless: Checking Stack create progress...\r\n.....\r\nServerless: Stack create finished...\r\nServerless: Uploading CloudFormation file to S3...\r\nServerless: Uploading artifacts...\r\nServerless: Uploading service .zip file to S3 (4.5 MB)...\r\nServerless: Validating template...\r\nServerless: Updating Stack...\r\nServerless: Checking Stack update progress...\r\n........................\r\nServerless: Stack update finished...\r\nService Information\r\nservice: hoge\r\nstage: dev\r\nregion: ap-northeast-1\r\nstack: hello-dev\r\napi keys:\r\n  None\r\nendpoints:\r\n  None\r\nfunctions:\r\n  hello: hello-dev-hello\r\n  world: hello-dev-world\r\n<\/code><\/pre>\n<p>\u5982\u679c\u51fa\u73b0\u4e86\u8fd9\u6837\u7684\u663e\u793a\uff0c\u8868\u793a\u90e8\u7f72\u6210\u529f\uff01<\/p>\n<h2>\u603b\u7ed3<\/h2>\n<p>\u6211\u610f\u5916\u5730\u5f88\u987a\u5229\u5730\u5230\u8fbe\u4e86\u8fd9\u4e00\u70b9\u3002<br \/>\n\u9664\u4e86aws-go\u4e4b\u5916\uff0c\u8fd8\u6709\u5f88\u591a\u5176\u4ed6\u6a21\u677f\u53ef\u4ee5\u4f7f\u7528\uff0c\u6240\u4ee5\u4e5f\u53ef\u4ee5\u5c1d\u8bd5\u5176\u4ed6\u7684\u3002<\/p>\n<h3>\u9644\u8d60<\/h3>\n<p>\u603b\u7684\u6765\u8bf4\uff0c\u8fd9\u662f\u5173\u4e8e\u63d0\u5230\u4e86\u6709\u8bb8\u591a\u6a21\u677f\u7684\u63cf\u8ff0\u7684\u5185\u5bb9\u3002<\/p>\n<pre class=\"post-pre\"><code> Template \"true\" is not supported. Supported templates are: \"aws-nodejs\", \"aws-\r\nnodejs-typescript\", \"aws-nodejs-ecma-script\", \"aws-python\", \"aws-python3\", \"aws-\r\ngroovy-gradle\", \"aws-java-maven\", \"aws-java-gradle\", \"aws-kotlin-jvm-maven\", \"aws-\r\nkotlin-jvm-gradle\", \"aws-kotlin-nodejs-gradle\", \"aws-scala-sbt\", \"aws-csharp\", \r\n\"aws-fsharp\", \"aws-go\", \"aws-go-dep\", \"azure-nodejs\", \"fn-nodejs\", \"fn-go\", \r\n\"google-nodejs\", \"kubeless-python\", \"kubeless-nodejs\", \"openwhisk-java-maven\", \r\n\"openwhisk-nodejs\", \"openwhisk-php\", \"openwhisk-python\", \"openwhisk-swift\", \r\n\"spotinst-nodejs\", \"spotinst-python\", \"spotinst-ruby\", \"spotinst-java8\", \r\n\"webtasks-nodejs\", \"plugin\" and \"hello-world\".\r\n<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\u603b\u7ed3 \u6211\u5df2\u7ecf\u5c1d\u8bd5\u4f7f\u7528aws-go\u5728Serverless Framework\u7684\u6a21\u677f\u521b\u5efa\u529f\u80fd\u4e2d\u8fdb\u884c\u90e8\u7f72\u3002 \u73af\u5883 N [&hellip;]<\/p>\n","protected":false},"author":4,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-32308","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>\u6211\u7528Go\u8bed\u8a00\u5c1d\u8bd5\u4e86Serverless Framework\u7684\u6a21\u677f - 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\/\u6211\u7528go\u8bed\u8a00\u5c1d\u8bd5\u4e86serverless-framework\u7684\u6a21\u677f\u3002\/\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u6211\u7528Go\u8bed\u8a00\u5c1d\u8bd5\u4e86Serverless Framework\u7684\u6a21\u677f\" \/>\n<meta property=\"og:description\" content=\"\u603b\u7ed3 \u6211\u5df2\u7ecf\u5c1d\u8bd5\u4f7f\u7528aws-go\u5728Serverless Framework\u7684\u6a21\u677f\u521b\u5efa\u529f\u80fd\u4e2d\u8fdb\u884c\u90e8\u7f72\u3002 \u73af\u5883 N [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/zh\/blog\/\u6211\u7528go\u8bed\u8a00\u5c1d\u8bd5\u4e86serverless-framework\u7684\u6a21\u677f\u3002\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:published_time\" content=\"2023-11-13T14:23:11+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-05-04T06:44:10+00:00\" \/>\n<meta name=\"author\" content=\"\u79d1, \u96c5\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u79d1, \u96c5\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 \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\/%e6%88%91%e7%94%a8go%e8%af%ad%e8%a8%80%e5%b0%9d%e8%af%95%e4%ba%86serverless-framework%e7%9a%84%e6%a8%a1%e6%9d%bf%e3%80%82\/\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e6%88%91%e7%94%a8go%e8%af%ad%e8%a8%80%e5%b0%9d%e8%af%95%e4%ba%86serverless-framework%e7%9a%84%e6%a8%a1%e6%9d%bf%e3%80%82\/\",\"name\":\"\u6211\u7528Go\u8bed\u8a00\u5c1d\u8bd5\u4e86Serverless Framework\u7684\u6a21\u677f - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\"},\"datePublished\":\"2023-11-13T14:23:11+00:00\",\"dateModified\":\"2024-05-04T06:44:10+00:00\",\"author\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/41e222757cdd2a3365361328bd79970a\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e6%88%91%e7%94%a8go%e8%af%ad%e8%a8%80%e5%b0%9d%e8%af%95%e4%ba%86serverless-framework%e7%9a%84%e6%a8%a1%e6%9d%bf%e3%80%82\/#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/zh\/blog\/%e6%88%91%e7%94%a8go%e8%af%ad%e8%a8%80%e5%b0%9d%e8%af%95%e4%ba%86serverless-framework%e7%9a%84%e6%a8%a1%e6%9d%bf%e3%80%82\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e6%88%91%e7%94%a8go%e8%af%ad%e8%a8%80%e5%b0%9d%e8%af%95%e4%ba%86serverless-framework%e7%9a%84%e6%a8%a1%e6%9d%bf%e3%80%82\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.silicloud.com\/zh\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u6211\u7528Go\u8bed\u8a00\u5c1d\u8bd5\u4e86Serverless Framework\u7684\u6a21\u677f\"}]},{\"@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\/41e222757cdd2a3365361328bd79970a\",\"name\":\"\u79d1, \u96c5\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/1b2d3e00a7df03689797ebd4af8c5827ba5af936849a71050ec331f4cf902c5d?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/1b2d3e00a7df03689797ebd4af8c5827ba5af936849a71050ec331f4cf902c5d?s=96&d=mm&r=g\",\"caption\":\"\u79d1, \u96c5\"},\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/author\/keya\/\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e6%88%91%e7%94%a8go%e8%af%ad%e8%a8%80%e5%b0%9d%e8%af%95%e4%ba%86serverless-framework%e7%9a%84%e6%a8%a1%e6%9d%bf%e3%80%82\/#local-main-organization-logo\",\"url\":\"\",\"contentUrl\":\"\",\"caption\":\"Blog - Silicon Cloud\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"\u6211\u7528Go\u8bed\u8a00\u5c1d\u8bd5\u4e86Serverless Framework\u7684\u6a21\u677f - 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\/\u6211\u7528go\u8bed\u8a00\u5c1d\u8bd5\u4e86serverless-framework\u7684\u6a21\u677f\u3002\/","og_locale":"zh_CN","og_type":"article","og_title":"\u6211\u7528Go\u8bed\u8a00\u5c1d\u8bd5\u4e86Serverless Framework\u7684\u6a21\u677f","og_description":"\u603b\u7ed3 \u6211\u5df2\u7ecf\u5c1d\u8bd5\u4f7f\u7528aws-go\u5728Serverless Framework\u7684\u6a21\u677f\u521b\u5efa\u529f\u80fd\u4e2d\u8fdb\u884c\u90e8\u7f72\u3002 \u73af\u5883 N [&hellip;]","og_url":"https:\/\/www.silicloud.com\/zh\/blog\/\u6211\u7528go\u8bed\u8a00\u5c1d\u8bd5\u4e86serverless-framework\u7684\u6a21\u677f\u3002\/","og_site_name":"Blog - Silicon Cloud","article_published_time":"2023-11-13T14:23:11+00:00","article_modified_time":"2024-05-04T06:44:10+00:00","author":"\u79d1, \u96c5","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"\u79d1, \u96c5","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"3 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e6%88%91%e7%94%a8go%e8%af%ad%e8%a8%80%e5%b0%9d%e8%af%95%e4%ba%86serverless-framework%e7%9a%84%e6%a8%a1%e6%9d%bf%e3%80%82\/","url":"https:\/\/www.silicloud.com\/zh\/blog\/%e6%88%91%e7%94%a8go%e8%af%ad%e8%a8%80%e5%b0%9d%e8%af%95%e4%ba%86serverless-framework%e7%9a%84%e6%a8%a1%e6%9d%bf%e3%80%82\/","name":"\u6211\u7528Go\u8bed\u8a00\u5c1d\u8bd5\u4e86Serverless Framework\u7684\u6a21\u677f - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website"},"datePublished":"2023-11-13T14:23:11+00:00","dateModified":"2024-05-04T06:44:10+00:00","author":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/41e222757cdd2a3365361328bd79970a"},"breadcrumb":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e6%88%91%e7%94%a8go%e8%af%ad%e8%a8%80%e5%b0%9d%e8%af%95%e4%ba%86serverless-framework%e7%9a%84%e6%a8%a1%e6%9d%bf%e3%80%82\/#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/zh\/blog\/%e6%88%91%e7%94%a8go%e8%af%ad%e8%a8%80%e5%b0%9d%e8%af%95%e4%ba%86serverless-framework%e7%9a%84%e6%a8%a1%e6%9d%bf%e3%80%82\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e6%88%91%e7%94%a8go%e8%af%ad%e8%a8%80%e5%b0%9d%e8%af%95%e4%ba%86serverless-framework%e7%9a%84%e6%a8%a1%e6%9d%bf%e3%80%82\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.silicloud.com\/zh\/blog\/"},{"@type":"ListItem","position":2,"name":"\u6211\u7528Go\u8bed\u8a00\u5c1d\u8bd5\u4e86Serverless Framework\u7684\u6a21\u677f"}]},{"@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\/41e222757cdd2a3365361328bd79970a","name":"\u79d1, \u96c5","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/1b2d3e00a7df03689797ebd4af8c5827ba5af936849a71050ec331f4cf902c5d?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1b2d3e00a7df03689797ebd4af8c5827ba5af936849a71050ec331f4cf902c5d?s=96&d=mm&r=g","caption":"\u79d1, \u96c5"},"url":"https:\/\/www.silicloud.com\/zh\/blog\/author\/keya\/"},{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e6%88%91%e7%94%a8go%e8%af%ad%e8%a8%80%e5%b0%9d%e8%af%95%e4%ba%86serverless-framework%e7%9a%84%e6%a8%a1%e6%9d%bf%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\/32308","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\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/comments?post=32308"}],"version-history":[{"count":2,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/32308\/revisions"}],"predecessor-version":[{"id":98942,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/32308\/revisions\/98942"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/media?parent=32308"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/categories?post=32308"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/tags?post=32308"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}