{"id":32493,"date":"2022-12-03T16:12:50","date_gmt":"2023-08-30T03:54:26","guid":{"rendered":"https:\/\/www.silicloud.com\/zh\/blog\/%e8%af%b7%e4%bd%bf%e7%94%a8-aws-sam-cli-%e6%9d%a5%e5%b0%9d%e8%af%95-lambda-%e5%ae%b9%e5%99%a8%e6%94%af%e6%8c%81%e3%80%82\/"},"modified":"2024-04-29T03:36:56","modified_gmt":"2024-04-28T19:36:56","slug":"%e8%af%b7%e4%bd%bf%e7%94%a8-aws-sam-cli-%e6%9d%a5%e5%b0%9d%e8%af%95-lambda-%e5%ae%b9%e5%99%a8%e6%94%af%e6%8c%81%e3%80%82","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/zh\/blog\/%e8%af%b7%e4%bd%bf%e7%94%a8-aws-sam-cli-%e6%9d%a5%e5%b0%9d%e8%af%95-lambda-%e5%ae%b9%e5%99%a8%e6%94%af%e6%8c%81%e3%80%82\/","title":{"rendered":"\u8bf7\u4f7f\u7528 AWS SAM CLI \u6765\u5c1d\u8bd5 Lambda \u5bb9\u5668\u652f\u6301"},"content":{"rendered":"<p>\u8fd9\u7bc7\u6587\u7ae0\u662f\u5173\u4e8eSaison Information Systems 2020\u5e74\u5723\u8bde\u65e5\u5386\u7684\u7b2c\u56db\u7bc7\u6587\u7ae0\u3002<\/p>\n<h2>\u9996\u5148<\/h2>\n<p>\u57282020\u5e74\u7684AWS re:Invent\u5927\u4f1a\u4e0a\uff0c\u5ba3\u5e03\u4e86\u5bf9AWS Lambda\u7684\u5bb9\u5668\u955c\u50cf\u652f\u6301\u3002<\/p>\n<p>AWS Lambda\u73b0\u5728\u652f\u6301\u5bb9\u5668\u955c\u50cf\u4f5c\u4e3a\u6253\u5305\u683c\u5f0f\u3002<\/p>\n<p>\u6700\u7ec8\u5728AWS\u4e0a\u4e5f\u51fa\u73b0\u4e86\u7c7b\u4f3c\u4e8eCloud Run\u7684\u4e1c\u897f\uff01\u4f60\u5728\u90a3\u91cc\u671f\u5f85\u4e86\u5417<br \/>\n\u7136\u800c, \u9057\u61be\u7684\u662f\uff0c\u5b83\u5e76\u4e0d\u662f\u80fd\u591f\u8f7b\u677e\u5730\u5728Lambda\u4e2d\u8fd0\u884c\u4efb\u4f55\u5bb9\u5668\u6620\u50cf\u7684\u529f\u80fd\u3002<br \/>\n\u5b83\u662f\u4e00\u79cd\u529f\u80fd\uff0c\u53ef\u4ee5\u5c06Lambda\u51fd\u6570\u5c01\u88c5\u4e3a\u5bb9\u5668\u6620\u50cf\u5e76\u8fdb\u884c\u90e8\u7f72\uff0c<br \/>\n\u56e0\u6b64\u521b\u5efa\u7684\u5bb9\u5668\u6620\u50cf\u5fc5\u987b\u5b9e\u73b0Lambda\u8fd0\u884c\u65f6API\uff0c\u5e76\u5177\u5907\u4e0eLambda\u51fd\u6570\u7684\u517c\u5bb9\u6027\u3002<\/p>\n<p>AWS SAM CLI \u5728 v1.13.1 \u7248\u672c\u4e2d\u4e5f\u652f\u6301\u5bb9\u5668\u955c\u50cf\u3002<\/p>\n<p>\u53d1\u5e031.13.1\u7248\u672c-\u652f\u6301Lambda\u5bb9\u5668\u955c\u50cf<br \/>\nhttps:\/\/github.com\/aws\/aws-sam-cli\/releases\/tag\/v1.13.1<\/p>\n<h2>\u8bd5\u8bd5\u770b<\/h2>\n<p>\u5982\u524d\u6240\u8ff0\uff0cAWS SAM CLI \u9700\u8981\u7248\u672c\u4e3a v1.13.1 \u6216\u66f4\u9ad8\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">$<\/span> sam <span class=\"nt\">--version<\/span>\r\n<span class=\"go\">SAM CLI, version 1.13.1\r\n<\/span><\/code><\/pre>\n<h3>\u521b\u5efa\u9879\u76ee<\/h3>\n<p>\u6211\u4eec\u53ef\u4ee5\u4f7f\u7528sam init\u63d0\u4f9b\u7684\u9879\u76ee\u6a21\u677f\u6765\u9009\u62e9Image\u7c7b\u578b\u7684\u5305\u3002<br \/>\n\u6211\u4eec\u5c06\u4f7f\u7528nodejs12.x\u7684\u57fa\u7840\u955c\u50cf\u6765\u521b\u5efa\u793a\u4f8b\u9879\u76ee\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">$<\/span> sam init\r\n<span class=\"go\">Which template source would you like to use?\r\n        1 - AWS Quick Start Templates\r\n        2 - Custom Template Location\r\nChoice: 1\r\nWhat package type would you like to use?\r\n        1 - Zip (artifact is a zip uploaded to S3)\r\n        2 - Image (artifact is an image uploaded to an ECR image repository)\r\nPackage type: 2\r\n\r\nWhich base image would you like to use?\r\n        1 - amazon\/nodejs12.x-base\r\n        2 - amazon\/nodejs10.x-base\r\n        3 - amazon\/python3.8-base\r\n        4 - amazon\/python3.7-base\r\n        5 - amazon\/python3.6-base\r\n        6 - amazon\/python2.7-base\r\n        7 - amazon\/ruby2.7-base\r\n        8 - amazon\/ruby2.5-base\r\n        9 - amazon\/go1.x-base\r\n        10 - amazon\/java11-base\r\n        11 - amazon\/java8.al2-base\r\n        12 - amazon\/java8-base\r\n        13 - amazon\/dotnetcore3.1-base\r\n        14 - amazon\/dotnetcore2.1-base\r\nBase image: 1\r\n\r\nProject name [sam-app]:\r\n\r\nCloning app templates from https:\/\/github.com\/aws\/aws-sam-cli-app-templates\r\n\r\n    -----------------------\r\n    Generating application:\r\n    -----------------------\r\n    Name: sam-app\r\n    Base Image: amazon\/nodejs12.x-base\r\n    Dependency Manager: npm\r\n    Output Directory: .\r\n\r\n    Next steps can be found in the README file at .\/sam-app\/README.md\r\n<\/span><\/code><\/pre>\n<p>\u4ee5\u4e0b\u662f\u5df2\u521b\u5efa\u7684\u6587\u4ef6\u6e05\u5355\u3002<br \/>\n\u53ef\u4ee5\u770b\u5230\u5df2\u521b\u5efa\u4e86 Dockerfile\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">$<\/span> <span class=\"nb\">cd <\/span>sam-app\r\n<span class=\"gp\">$<\/span> tree\r\n<span class=\"c\">.\r\n<\/span><span class=\"go\">\u251c\u2500\u2500 events\r\n\u2502   \u2514\u2500\u2500 event.json\r\n\u251c\u2500\u2500 hello-world\r\n\u2502   \u251c\u2500\u2500 app.js\r\n\u2502   \u251c\u2500\u2500 Dockerfile\r\n\u2502   \u251c\u2500\u2500 package.json\r\n\u2502   \u2514\u2500\u2500 tests\r\n\u2502       \u2514\u2500\u2500 unit\r\n\u2502           \u2514\u2500\u2500 test-handler.js\r\n\u251c\u2500\u2500 README.md\r\n\u2514\u2500\u2500 template.yaml\r\n\r\n<\/span><\/code><\/pre>\n<p>\u5728Dockerfile\u4e2d\u6307\u5b9a\u4e86\u7531AWS\u63d0\u4f9b\u7684\u57fa\u7840\u955c\u50cf\u3002<br \/>\n\u53ea\u8981\u4f7f\u7528AWS\u63d0\u4f9b\u7684\u57fa\u7840\u955c\u50cf\uff0c\u5c31\u53ef\u4ee5\u9884\u52a0\u8f7d\u6267\u884cLambda\u51fd\u6570\u6240\u9700\u7684\u8fd0\u884c\u65f6\u4ee5\u53ca\u5176\u4ed6\u7ec4\u4ef6\uff0c<br \/>\n\u56e0\u6b64\u53ea\u9700\u6dfb\u52a0Lambda\u51fd\u6570\u7684\u4ee3\u7801\u548c\u5176\u4f9d\u8d56\u5173\u7cfb\u5373\u53ef\uff0c\u4e0d\u4f1a\u6709\u4efb\u4f55\u95ee\u9898\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"k\">FROM<\/span><span class=\"s\"> public.ecr.aws\/lambda\/nodejs:12<\/span>\r\n\r\n<span class=\"k\">COPY<\/span><span class=\"s\"> app.js package.json .\/<\/span>\r\n\r\n<span class=\"k\">RUN <\/span>npm <span class=\"nb\">install<\/span>\r\n\r\n<span class=\"c\"># Command can be overwritten by providing a different command in the template directly.<\/span>\r\n<span class=\"k\">CMD<\/span><span class=\"s\"> [\"app.lambdaHandler\"]<\/span>\r\n<\/code><\/pre>\n<p>\u4e3a\u4e86\u5c06\u72ec\u7acb\u7684\u5bb9\u5668\u6620\u50cf\u8f6c\u6362\u4e3a\u4e0eLambda\u517c\u5bb9\uff0c\u9700\u8981\u5728\u57fa\u7840\u6620\u50cf\u4e2d\u6dfb\u52a0\u4e00\u7cfb\u5217\u8f6f\u4ef6\u5305\uff0c\u8fd9\u4e9b\u8f6f\u4ef6\u5305\u5b9e\u73b0\u4e86Lambda Runtime API\uff0c\u79f0\u4e3aRuntime Interface Clients (RIC)\u3002<\/p>\n<p>template.yaml\u6587\u4ef6\u7684\u5185\u5bb9\u5982\u4e0b\uff1a<\/p>\n<pre class=\"post-pre\"><code><span class=\"na\">AWSTemplateFormatVersion<\/span><span class=\"pi\">:<\/span> <span class=\"s1\">'<\/span><span class=\"s\">2010-09-09'<\/span>\r\n<span class=\"na\">Transform<\/span><span class=\"pi\">:<\/span> <span class=\"s\">AWS::Serverless-2016-10-31<\/span>\r\n<span class=\"na\">Description<\/span><span class=\"pi\">:<\/span> <span class=\"pi\">&gt;<\/span>\r\n  <span class=\"s\">sam-app<\/span>\r\n\r\n  <span class=\"s\">Sample SAM Template for sam-app<\/span>\r\n\r\n<span class=\"c1\"># More info about Globals: https:\/\/github.com\/awslabs\/serverless-application-model\/blob\/master\/docs\/globals.rst<\/span>\r\n<span class=\"na\">Globals<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"na\">Function<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"na\">Timeout<\/span><span class=\"pi\">:<\/span> <span class=\"m\">3<\/span>\r\n\r\n<span class=\"na\">Resources<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"na\">HelloWorldFunction<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"na\">Type<\/span><span class=\"pi\">:<\/span> <span class=\"s\">AWS::Serverless::Function<\/span>\r\n    <span class=\"na\">Properties<\/span><span class=\"pi\">:<\/span>\r\n      <span class=\"na\">PackageType<\/span><span class=\"pi\">:<\/span> <span class=\"s\">Image<\/span>\r\n      <span class=\"c1\"># ImageConfig:<\/span>\r\n        <span class=\"c1\"># Uncomment this to override command here from the Dockerfile<\/span>\r\n        <span class=\"c1\"># Command: [\"app.lambdaHandler\"]<\/span>\r\n      <span class=\"na\">Events<\/span><span class=\"pi\">:<\/span>\r\n        <span class=\"na\">HelloWorld<\/span><span class=\"pi\">:<\/span>\r\n          <span class=\"na\">Type<\/span><span class=\"pi\">:<\/span> <span class=\"s\">Api<\/span>\r\n          <span class=\"na\">Properties<\/span><span class=\"pi\">:<\/span>\r\n            <span class=\"na\">Path<\/span><span class=\"pi\">:<\/span> <span class=\"s\">\/hello<\/span>\r\n            <span class=\"na\">Method<\/span><span class=\"pi\">:<\/span> <span class=\"s\">get<\/span>\r\n    <span class=\"na\">Metadata<\/span><span class=\"pi\">:<\/span>\r\n      <span class=\"na\">DockerTag<\/span><span class=\"pi\">:<\/span> <span class=\"s\">nodejs12.x-v1<\/span>\r\n      <span class=\"na\">DockerContext<\/span><span class=\"pi\">:<\/span> <span class=\"s\">.\/hello-world<\/span>\r\n      <span class=\"na\">Dockerfile<\/span><span class=\"pi\">:<\/span> <span class=\"s\">Dockerfile<\/span>\r\n\r\n<span class=\"na\">Outputs<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"c1\"># ServerlessRestApi is an implicit API created out of Events key under Serverless::Function<\/span>\r\n  <span class=\"c1\"># Find out more about other implicit resources you can reference within SAM<\/span>\r\n  <span class=\"c1\"># https:\/\/github.com\/awslabs\/serverless-application-model\/blob\/master\/docs\/internals\/generated_resources.rst#api<\/span>\r\n  <span class=\"na\">HelloWorldApi<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"na\">Description<\/span><span class=\"pi\">:<\/span> <span class=\"s2\">\"<\/span><span class=\"s\">API<\/span> <span class=\"s\">Gateway<\/span> <span class=\"s\">endpoint<\/span> <span class=\"s\">URL<\/span> <span class=\"s\">for<\/span> <span class=\"s\">Prod<\/span> <span class=\"s\">stage<\/span> <span class=\"s\">for<\/span> <span class=\"s\">Hello<\/span> <span class=\"s\">World<\/span> <span class=\"s\">function\"<\/span>\r\n    <span class=\"na\">Value<\/span><span class=\"pi\">:<\/span> <span class=\"kt\">!Sub<\/span> <span class=\"s2\">\"<\/span><span class=\"s\">https:\/\/${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com\/Prod\/hello\/\"<\/span>\r\n  <span class=\"na\">HelloWorldFunction<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"na\">Description<\/span><span class=\"pi\">:<\/span> <span class=\"s2\">\"<\/span><span class=\"s\">Hello<\/span> <span class=\"s\">World<\/span> <span class=\"s\">Lambda<\/span> <span class=\"s\">Function<\/span> <span class=\"s\">ARN\"<\/span>\r\n    <span class=\"na\">Value<\/span><span class=\"pi\">:<\/span> <span class=\"kt\">!GetAtt<\/span> <span class=\"s\">HelloWorldFunction.Arn<\/span>\r\n  <span class=\"na\">HelloWorldFunctionIamRole<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"na\">Description<\/span><span class=\"pi\">:<\/span> <span class=\"s2\">\"<\/span><span class=\"s\">Implicit<\/span> <span class=\"s\">IAM<\/span> <span class=\"s\">Role<\/span> <span class=\"s\">created<\/span> <span class=\"s\">for<\/span> <span class=\"s\">Hello<\/span> <span class=\"s\">World<\/span> <span class=\"s\">function\"<\/span>\r\n    <span class=\"na\">Value<\/span><span class=\"pi\">:<\/span> <span class=\"kt\">!GetAtt<\/span> <span class=\"s\">HelloWorldFunctionRole.Arn<\/span>\r\n<\/code><\/pre>\n<p>\u8981\u5bf9\u5bb9\u5668\u955c\u50cf\u8fdb\u884c\u6253\u5305\uff0c\u9700\u8981\u6307\u5b9a PackageType: Image\u3002<br \/>\n\u6307\u5b9a\u662f\u53ef\u9009\u7684\uff0c\u53ef\u6307\u5b9a\u7684\u503c\u4e3a Zip \u6216 Image\u3002<br \/>\nhttps:\/\/docs.aws.amazon.com\/serverless-application-model\/latest\/developerguide\/sam-resource-function.html#sam-function-packagetype<\/p>\n<pre class=\"post-pre\"><code>    <span class=\"na\">Properties<\/span><span class=\"pi\">:<\/span>\r\n      <span class=\"na\">PackageType<\/span><span class=\"pi\">:<\/span> <span class=\"s\">Image<\/span>\r\n<\/code><\/pre>\n<p>\u5728SAM CLI\u4e2d\u6784\u5efa\u5bb9\u5668\u955c\u50cf\uff0c\u60a8\u53ef\u4ee5\u4f7f\u7528Metadata\u8d44\u6e90\u5c5e\u6027\u58f0\u660eDockerfile\u3001Context\u3001Tag\u7b49\u4fe1\u606f\u3002\u60a8\u8fd8\u53ef\u4ee5\u4f7f\u7528DockerBuildArgs\u6761\u76ee\u6307\u5b9a\u6784\u5efa\u65f6\u7684\u53c2\u6570\u3002\u8be6\u7ec6\u4fe1\u606f\u8bf7\u53c2\u9605\u6b64\u94fe\u63a5\uff1ahttps:\/\/docs.aws.amazon.com\/serverless-application-model\/latest\/developerguide\/serverless-sam-cli-using-build.html#build-container-image<\/p>\n<pre class=\"post-pre\"><code>    <span class=\"na\">Metadata<\/span><span class=\"pi\">:<\/span>\r\n      <span class=\"na\">DockerTag<\/span><span class=\"pi\">:<\/span> <span class=\"s\">nodejs12.x-v1<\/span>\r\n      <span class=\"na\">DockerContext<\/span><span class=\"pi\">:<\/span> <span class=\"s\">.\/hello-world<\/span>\r\n      <span class=\"na\">Dockerfile<\/span><span class=\"pi\">:<\/span> <span class=\"s\">Dockerfile<\/span>\r\n<\/code><\/pre>\n<h3>\u6784\u5efa\u5f62\u8c61<\/h3>\n<p>\u4f7f\u7528sam build\u547d\u4ee4\u6765\u6784\u5efa\u5bb9\u5668\u955c\u50cf\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">$<\/span> sam build\r\n<span class=\"go\">Building codeuri: . runtime: None metadata: {'DockerTag': 'nodejs12.x-v1', 'DockerContext': '.\/hello-world', 'Dockerfile': 'Dockerfile'} functions: ['HelloWorldFunction']\r\nBuilding image for HelloWorldFunction function\r\nSetting DockerBuildArgs: {} for HelloWorldFunction function\r\nStep 1\/4 : FROM public.ecr.aws\/lambda\/nodejs:12\r\n<\/span><span class=\"gp\"> ---&gt;<\/span> ccbddaf00c51\r\n<span class=\"go\">Step 2\/4 : COPY app.js package.json .\/\r\n<\/span><span class=\"gp\"> ---&gt;<\/span> fb16c5342f63\r\n<span class=\"go\">Step 3\/4 : RUN npm install\r\n<\/span><span class=\"gp\"> ---&gt;<\/span> Running <span class=\"k\">in <\/span>faa9eb4d503c\r\n<span class=\"gp\">npm WARN deprecated debug@3.2.6: Debug versions &gt;<\/span><span class=\"o\">=<\/span>3.2.0 &lt;3.2.7 <span class=\"o\">||<\/span> <span class=\"o\">&gt;=<\/span>4 &lt;4.3.1 have a low-severity ReDos regression when used <span class=\"k\">in <\/span>a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. <span class=\"o\">(<\/span>https:\/\/github.com\/visionmedia\/debug\/issues\/797<span class=\"o\">)<\/span>\r\n<span class=\"go\">npm WARN deprecated mkdirp@0.5.4: Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)\r\nnpm notice created a lockfile as package-lock.json. You should commit this file.\r\nadded 107 packages from 544 contributors and audited 107 packages in 5.755s\r\n\r\n16 packages are looking for funding\r\n  run `npm fund` for details\r\n\r\nfound 0 vulnerabilities\r\n\r\n<\/span><span class=\"gp\"> ---&gt;<\/span> 8db6f5505058\r\n<span class=\"go\">Step 4\/4 : CMD [\"app.lambdaHandler\"]\r\n<\/span><span class=\"gp\"> ---&gt;<\/span> Running <span class=\"k\">in <\/span>08e14cc877aa\r\n<span class=\"gp\"> ---&gt;<\/span> 271c7f34a0c7\r\n<span class=\"go\">Successfully built 271c7f34a0c7\r\nSuccessfully tagged helloworldfunction:nodejs12.x-v1\r\n\r\nBuild Succeeded\r\n\r\nBuilt Artifacts  : .aws-sam\/build\r\nBuilt Template   : .aws-sam\/build\/template.yaml\r\n\r\nCommands you can use next\r\n=========================\r\n[*] Invoke Function: sam local invoke\r\n[*] Deploy: sam deploy --guided\r\n<\/span><\/code><\/pre>\n<p>\u5df2\u7ecf\u521b\u5efa\u4e86\u88ab\u5c01\u88c5\u7684\u5bb9\u5668\u955c\u50cf\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">$<\/span> docker image <span class=\"nb\">ls<\/span>\r\n<span class=\"go\">REPOSITORY                     TAG                 IMAGE ID            CREATED             SIZE\r\nhelloworldfunction             nodejs12.x-v1       271c7f34a0c7        3 minutes ago       471MB\r\n<\/span><\/code><\/pre>\n<h3>\u672c\u5730\u6d4b\u8bd5<\/h3>\n<p>\u4e3a\u4e86\u5728\u672c\u5730\u6d4b\u8bd5\u4f5c\u4e3a\u5bb9\u5668\u6620\u50cf\u6253\u5305\u7684 Lambda \u51fd\u6570\uff0c\u60a8\u53ef\u4ee5\u4f7f\u7528\u4e00\u4e2a\u8f7b\u91cf\u7ea7\u7684 Web \u670d\u52a1\u5668\uff0c\u5373 Lambda Runtime Interface Emulator\uff08RIE\uff09\u3002\u7531\u4e8e AWS \u63d0\u4f9b\u7684\u57fa\u7840\u6620\u50cf\u5df2\u7ecf\u96c6\u6210\u4e86 RIE\uff0c\u56e0\u6b64\u60a8\u53ea\u9700\u4ece\u6784\u5efa\u6620\u50cf\u4e2d\u521b\u5efa\u5bb9\u5668\u5373\u53ef\u7acb\u5373\u6267\u884c\u6d4b\u8bd5\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">$<\/span> docker run <span class=\"nt\">-d<\/span> <span class=\"nt\">-p<\/span> 9000:8080 helloworldfunction:nodejs12.x-v1\r\n<span class=\"go\">a510b1f8bf0fd5c0d7c6a3716ddaf96462452abcdff26285d1e8471c6e829cc8\r\n\r\n<\/span><span class=\"gp\">$<\/span> curl <span class=\"nt\">-XPOST<\/span> <span class=\"s2\">\"http:\/\/localhost:9000\/2015-03-31\/functions\/function\/invocations\"<\/span> <span class=\"nt\">-d<\/span> <span class=\"s1\">'{}'<\/span>\r\n<span class=\"go\">{\"statusCode\":200,\"body\":\"{\\\"message\\\":\\\"hello world\\\"}\"}\r\n<\/span><\/code><\/pre>\n<p>\u7531\u4e8e RIE \u5c06 HTTP \u8bf7\u6c42\u8f6c\u6362\u4e3a JSON \u4e8b\u4ef6\u5e76\u8fdb\u884c\u4ee3\u7406\uff0c\u56e0\u6b64\u4e0d\u652f\u6301 X-Ray \u548c\u5176\u4ed6 Lambda \u96c6\u6210\u529f\u80fd\u3002<\/p>\n<p>\u5982\u679c\u4f7f\u7528\u81ea\u5df1\u72ec\u7279\u7684\u57fa\u7840\u6620\u50cf\uff0c\u53ef\u4ee5\u901a\u8fc7\u5c06 RIE \u96c6\u6210\u5230\u6620\u50cf\u4e2d\u6216\u8005\u7ed1\u5b9a\u5b89\u88c5 RIE \u5e76\u5c06\u5176\u7528\u4f5c\u5bb9\u5668\u7684\u5165\u53e3\u70b9\u6765\u8fd0\u884c\u6d4b\u8bd5\u3002\u6709\u5173\u66f4\u591a\u4fe1\u606f\uff0c\u8bf7\u53c2\u8003\uff1ahttps:\/\/docs.aws.amazon.com\/lambda\/latest\/dg\/images-test.html#images-test-alternative<\/p>\n<p>\u5f53\u7136\uff0c\u7531\u4e8e\u6211\u4eec\u6b63\u5728\u4f7f\u7528 SAM CLI\uff0c\u6240\u4ee5\u4e5f\u53ef\u4ee5\u901a\u8fc7 sam local invoke \u8fdb\u884c\u6d4b\u8bd5\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">$<\/span> sam <span class=\"nb\">local <\/span>invoke\r\n<span class=\"go\">Invoking Container created from helloworldfunction:nodejs12.x-v1\r\nImage was not found.\r\nBuilding image.................\r\nSkip pulling image and use local one: helloworldfunction:rapid-1.13.1.\r\n\r\n<\/span><span class=\"gp\">START RequestId: 05284faf-5a20-46fc-a695-111eb3d0f085 Version: $<\/span>LATEST\r\n<span class=\"go\">END RequestId: 05284faf-5a20-46fc-a695-111eb3d0f085\r\nREPORT RequestId: 05284faf-5a20-46fc-a695-111eb3d0f085  Init Duration: 1.86 ms  Duration: 96.09 ms      Billed Duration: 100 ms Memory Size: 128 MB     Max Memory Used: 128 MB\r\n<\/span><\/code><\/pre>\n<h3>&#8221; \u7b80\u5316\u90e8\u7f72&#8221;<\/h3>\n<p>\u4e3a\u4e86\u63a8\u9001\u5bb9\u5668\u955c\u50cf\uff0c\u9700\u8981\u4e8b\u5148\u521b\u5efa\u4e00\u4e2a\u4ed3\u5e93\uff0c\u4f46\u53ef\u4ee5\u628a\u955c\u50cf\u63a8\u9001\u7ed9 SAM CLI\uff01<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">$<\/span> aws ecr create-repository <span class=\"nt\">--repository-name<\/span> lambda-container-test\r\n<span class=\"go\">{\r\n    \"repository\": {\r\n        \"repositoryUri\": \"123456789012.dkr.ecr.ap-northeast-1.amazonaws.com\/lambda-container-test\",\r\n        \"imageScanningConfiguration\": {\r\n            \"scanOnPush\": false\r\n        },\r\n        \"registryId\": \"123456789012\",\r\n        \"imageTagMutability\": \"MUTABLE\",\r\n        \"repositoryArn\": \"arn:aws:ecr:ap-northeast-1:123456789012:repository\/lambda-container-test\",\r\n        \"repositoryName\": \"lambda-container-test\",\r\n        \"createdAt\": 1606926983.0\r\n    }\r\n}\r\n<\/span><\/code><\/pre>\n<p>\u6267\u884c sam deploy &#8211;guided\u3002\u901a\u8fc7\u6307\u5b9a\u521a\u624d\u521b\u5efa\u7684\u4ed3\u5e93\u4f5c\u4e3a\u56fe\u50cf\u4ed3\u5e93\uff0c\u5c06\u5728\u90e8\u7f72\u65f6\u81ea\u52a8\u8fdb\u884c\u56fe\u50cf\u63a8\u9001\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">$<\/span> sam deploy <span class=\"nt\">--guided<\/span>\r\n<span class=\"go\">\r\nConfiguring SAM deploy\r\n======================\r\n\r\n        Looking for config file [samconfig.toml] :  Not found\r\n\r\n        Setting default arguments for 'sam deploy'\r\n        =========================================\r\n        Stack Name [sam-app]:\r\n        AWS Region [us-east-1]: ap-northeast-1\r\n        Image Repository []: 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com\/lambda-container-test\r\n        Images that will be pushed:\r\n          helloworldfunction:nodejs12.x-v1 to 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com\/lambda-container-test:helloworldfunction-271c7f34a0c7-nodejs12.x-v1\r\n\r\n<\/span><span class=\"gp\">        #<\/span>Shows you resources changes to be deployed and require a <span class=\"s1\">'Y'<\/span> to initiate deploy\r\n<span class=\"go\">        Confirm changes before deploy [y\/N]: n\r\n<\/span><span class=\"gp\">        #<\/span>SAM needs permission to be able to create roles to connect to the resources <span class=\"k\">in <\/span>your template\r\n<span class=\"go\">        Allow SAM CLI IAM role creation [Y\/n]: y\r\n        HelloWorldFunction may not have authorization defined, Is this okay? [y\/N]: y\r\n        Save arguments to configuration file [Y\/n]: y\r\n        SAM configuration file [samconfig.toml]:\r\n        SAM configuration environment [default]:\r\n\r\n        Looking for resources needed for deployment: Found!\r\n\r\n                Managed S3 bucket: aws-sam-cli-managed-default-samclisourcebucket-xxxxxxxxxxxxx\r\n                A different default S3 bucket can be set in samconfig.toml\r\n\r\n        Saved arguments to config file\r\n        Running 'sam deploy' for future deployments will use the parameters saved above.\r\n        The above parameters can be changed by modifying samconfig.toml\r\n        Learn more about samconfig.toml syntax at\r\n        https:\/\/docs.aws.amazon.com\/serverless-application-model\/latest\/developerguide\/serverless-sam-cli-config.html\r\nThe push refers to repository [123456789012.dkr.ecr.ap-northeast-1.amazonaws.com\/lambda-container-test]\r\n6d7acece320f: Pushed\r\n105893862807: Pushed\r\n3642f26c4fcb: Pushed\r\n1807102b87b6: Pushed\r\n120614c3628c: Pushed\r\n0d8c48ae73f7: Pushed\r\ne4f26f8be15f: Pushed\r\naf6d16f2417e: Pushed\r\nhelloworldfunction-271c7f34a0c7-nodejs12.x-v1: digest: sha256:7a83998f07e54249948db91846abd9dbfecbe175181fe0876b5980a635b9e70f size: 1998\r\n\r\n\r\n        Deploying with following values\r\n        ===============================\r\n        Stack name                   : sam-app\r\n        Region                       : ap-northeast-1\r\n        Confirm changeset            : False\r\n        Deployment image repository  : 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com\/lambda-container-test\r\n        Deployment s3 bucket         : aws-sam-cli-managed-default-samclisourcebucket-xxxxxxxxxxxxx\r\n        Capabilities                 : [\"CAPABILITY_IAM\"]\r\n        Parameter overrides          : {}\r\n        Signing Profiles           : {}\r\n~~\u4ee5\u964d\u7701\u7565~~\r\n<\/span><\/code><\/pre>\n<p>\u53d1\u9001\u8bf7\u6c42\u5230\u521b\u5efa\u7684API Gateway\u5e76\u786e\u8ba4\u5176\u529f\u80fd\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">$<\/span> curl https:\/\/xxxxxxxxxx.execute-api.ap-northeast-1.amazonaws.com\/Prod\/hello\/\r\n<span class=\"go\">{\"message\":\"hello world\"}\r\n<\/span><\/code><\/pre>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d126137434c4406bf61b3\/43-0.png\" alt=\"image.png\" \/><\/div>\n<h2>\u8bf7\u6ce8\u610f\u4e8b\u9879\u7b49<\/h2>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">CloudFormation \u306e\u30b9\u30bf\u30c3\u30af\u3092\u524a\u9664\u3057\u3066\u3082\u3001ECR \u5074\u306e\u30a4\u30e1\u30fc\u30b8\u306f\u524a\u9664\u3055\u308c\u307e\u305b\u3093\u3002<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\u30b3\u30fc\u30eb\u30c9\u30b9\u30bf\u30fc\u30c9\u6642\u306e\u5b9f\u884c\u6642\u9593<\/ul>\n<p>\u7531\u4e8e\u65e0\u6cd5\u8fdb\u884c\u4e25\u683c\u6bd4\u8f83\uff0c\u6240\u4ee5\u6211\u8ba4\u4e3a\u4e0d\u53ef\u80fd\u4e00\u6982\u800c\u8bba\uff0c\u4f46\u662f\u4e0ezip\u7684\u90e8\u7f72\u5305\u76f8\u6bd4\uff0c<br \/>\n\u6211\u542c\u8bf4\u5b83\u4f3c\u4e4e\u9700\u8981\u66f4\u591a\u7684\u65f6\u95f4\u6765\u8fdb\u884c\u521d\u59cb\u5316\u3002<\/p>\n<ul class=\"post-ul\">\u8ab2\u91d1\u671f\u9593<\/ul>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d126137434c4406bf61b3\/48-0.png\" alt=\"image.png\" \/><\/div>\n<p>\u6784\u5efa\u81ea\u5b9a\u4e49\u8fd0\u884c\u65f6<br \/>\nhttps:\/\/docs.aws.amazon.com\/lambda\/latest\/dg\/runtimes-custom.html#runtimes-custom-build<\/p>\n<blockquote><p>\u521d\u59cb\u5316\u65f6\u95f4\u8ba1\u5165\u8ba1\u8d39\u6267\u884c\u65f6\u95f4\u548c\u8d85\u65f6\u65f6\u95f4\u3002<\/p><\/blockquote>\n<h2>\u8bf7\u53c2\u9605\u6b64\u5904<\/h2>\n<p>\u65b0\u6b3eAWS Lambda &#8211; \u5bb9\u5668\u955c\u50cf\u652f\u6301<br \/>\nhttps:\/\/aws.amazon.com\/cn\/blogs\/aws\/new-for-aws-lambda-container-image-support\/<br \/>\nAWS Lambda &#8211; \u5f00\u53d1\u8005\u6307\u5357<br \/>\nhttps:\/\/docs.aws.amazon.com\/zh_cn\/lambda\/latest\/dg\/lambda-images.html<br \/>\nAWS\u65e0\u670d\u52a1\u5668\u5e94\u7528\u6a21\u578b &#8211; \u5f00\u53d1\u8005\u6307\u5357<br \/>\nhttps:\/\/docs.aws.amazon.com\/zh_cn\/serverless-application-model\/latest\/developerguide\/serverless-sam-cli-using-build.html<\/p>\n<p>\u5e0c\u671b\u60a8\u80fd\u4ece\u4e0a\u9762\u7684\u5185\u5bb9\u4e2d\u83b7\u5f97\u6240\u9700\u7684\u53c2\u8003\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u8fd9\u7bc7\u6587\u7ae0\u662f\u5173\u4e8eSaison Information Systems 2020\u5e74\u5723\u8bde\u65e5\u5386\u7684\u7b2c\u56db\u7bc7\u6587\u7ae0\u3002 \u9996\u5148 \u5728 [&hellip;]<\/p>\n","protected":false},"author":6,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-32493","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>\u8bf7\u4f7f\u7528 AWS SAM CLI \u6765\u5c1d\u8bd5 Lambda \u5bb9\u5668\u652f\u6301 - 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\/\u8bf7\u4f7f\u7528-aws-sam-cli-\u6765\u5c1d\u8bd5-lambda-\u5bb9\u5668\u652f\u6301\u3002\/\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u8bf7\u4f7f\u7528 AWS SAM CLI \u6765\u5c1d\u8bd5 Lambda \u5bb9\u5668\u652f\u6301\" \/>\n<meta property=\"og:description\" content=\"\u8fd9\u7bc7\u6587\u7ae0\u662f\u5173\u4e8eSaison Information Systems 2020\u5e74\u5723\u8bde\u65e5\u5386\u7684\u7b2c\u56db\u7bc7\u6587\u7ae0\u3002 \u9996\u5148 \u5728 [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/zh\/blog\/\u8bf7\u4f7f\u7528-aws-sam-cli-\u6765\u5c1d\u8bd5-lambda-\u5bb9\u5668\u652f\u6301\u3002\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:published_time\" content=\"2023-08-30T03:54:26+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-04-28T19:36:56+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d126137434c4406bf61b3\/43-0.png\" \/>\n<meta name=\"author\" content=\"\u6587, \u7fd4\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u6587, \u7fd4\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 \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\/%e8%af%b7%e4%bd%bf%e7%94%a8-aws-sam-cli-%e6%9d%a5%e5%b0%9d%e8%af%95-lambda-%e5%ae%b9%e5%99%a8%e6%94%af%e6%8c%81%e3%80%82\/\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e8%af%b7%e4%bd%bf%e7%94%a8-aws-sam-cli-%e6%9d%a5%e5%b0%9d%e8%af%95-lambda-%e5%ae%b9%e5%99%a8%e6%94%af%e6%8c%81%e3%80%82\/\",\"name\":\"\u8bf7\u4f7f\u7528 AWS SAM CLI \u6765\u5c1d\u8bd5 Lambda \u5bb9\u5668\u652f\u6301 - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\"},\"datePublished\":\"2023-08-30T03:54:26+00:00\",\"dateModified\":\"2024-04-28T19:36:56+00:00\",\"author\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/64d5cc7727fffbff2f9a2a8da1de3e5c\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e8%af%b7%e4%bd%bf%e7%94%a8-aws-sam-cli-%e6%9d%a5%e5%b0%9d%e8%af%95-lambda-%e5%ae%b9%e5%99%a8%e6%94%af%e6%8c%81%e3%80%82\/#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/zh\/blog\/%e8%af%b7%e4%bd%bf%e7%94%a8-aws-sam-cli-%e6%9d%a5%e5%b0%9d%e8%af%95-lambda-%e5%ae%b9%e5%99%a8%e6%94%af%e6%8c%81%e3%80%82\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e8%af%b7%e4%bd%bf%e7%94%a8-aws-sam-cli-%e6%9d%a5%e5%b0%9d%e8%af%95-lambda-%e5%ae%b9%e5%99%a8%e6%94%af%e6%8c%81%e3%80%82\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.silicloud.com\/zh\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u8bf7\u4f7f\u7528 AWS SAM CLI \u6765\u5c1d\u8bd5 Lambda \u5bb9\u5668\u652f\u6301\"}]},{\"@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\/64d5cc7727fffbff2f9a2a8da1de3e5c\",\"name\":\"\u6587, \u7fd4\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/920c3d673e0bccacc98e5e6b7149bb3c22edd8d39cb753e5d7d7e471498118a1?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/920c3d673e0bccacc98e5e6b7149bb3c22edd8d39cb753e5d7d7e471498118a1?s=96&d=mm&r=g\",\"caption\":\"\u6587, \u7fd4\"},\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/author\/wenxiang\/\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e8%af%b7%e4%bd%bf%e7%94%a8-aws-sam-cli-%e6%9d%a5%e5%b0%9d%e8%af%95-lambda-%e5%ae%b9%e5%99%a8%e6%94%af%e6%8c%81%e3%80%82\/#local-main-organization-logo\",\"url\":\"\",\"contentUrl\":\"\",\"caption\":\"Blog - Silicon Cloud\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"\u8bf7\u4f7f\u7528 AWS SAM CLI \u6765\u5c1d\u8bd5 Lambda \u5bb9\u5668\u652f\u6301 - 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\/\u8bf7\u4f7f\u7528-aws-sam-cli-\u6765\u5c1d\u8bd5-lambda-\u5bb9\u5668\u652f\u6301\u3002\/","og_locale":"zh_CN","og_type":"article","og_title":"\u8bf7\u4f7f\u7528 AWS SAM CLI \u6765\u5c1d\u8bd5 Lambda \u5bb9\u5668\u652f\u6301","og_description":"\u8fd9\u7bc7\u6587\u7ae0\u662f\u5173\u4e8eSaison Information Systems 2020\u5e74\u5723\u8bde\u65e5\u5386\u7684\u7b2c\u56db\u7bc7\u6587\u7ae0\u3002 \u9996\u5148 \u5728 [&hellip;]","og_url":"https:\/\/www.silicloud.com\/zh\/blog\/\u8bf7\u4f7f\u7528-aws-sam-cli-\u6765\u5c1d\u8bd5-lambda-\u5bb9\u5668\u652f\u6301\u3002\/","og_site_name":"Blog - Silicon Cloud","article_published_time":"2023-08-30T03:54:26+00:00","article_modified_time":"2024-04-28T19:36:56+00:00","og_image":[{"url":"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d126137434c4406bf61b3\/43-0.png"}],"author":"\u6587, \u7fd4","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"\u6587, \u7fd4","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"6 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e8%af%b7%e4%bd%bf%e7%94%a8-aws-sam-cli-%e6%9d%a5%e5%b0%9d%e8%af%95-lambda-%e5%ae%b9%e5%99%a8%e6%94%af%e6%8c%81%e3%80%82\/","url":"https:\/\/www.silicloud.com\/zh\/blog\/%e8%af%b7%e4%bd%bf%e7%94%a8-aws-sam-cli-%e6%9d%a5%e5%b0%9d%e8%af%95-lambda-%e5%ae%b9%e5%99%a8%e6%94%af%e6%8c%81%e3%80%82\/","name":"\u8bf7\u4f7f\u7528 AWS SAM CLI \u6765\u5c1d\u8bd5 Lambda \u5bb9\u5668\u652f\u6301 - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website"},"datePublished":"2023-08-30T03:54:26+00:00","dateModified":"2024-04-28T19:36:56+00:00","author":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/64d5cc7727fffbff2f9a2a8da1de3e5c"},"breadcrumb":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e8%af%b7%e4%bd%bf%e7%94%a8-aws-sam-cli-%e6%9d%a5%e5%b0%9d%e8%af%95-lambda-%e5%ae%b9%e5%99%a8%e6%94%af%e6%8c%81%e3%80%82\/#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/zh\/blog\/%e8%af%b7%e4%bd%bf%e7%94%a8-aws-sam-cli-%e6%9d%a5%e5%b0%9d%e8%af%95-lambda-%e5%ae%b9%e5%99%a8%e6%94%af%e6%8c%81%e3%80%82\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e8%af%b7%e4%bd%bf%e7%94%a8-aws-sam-cli-%e6%9d%a5%e5%b0%9d%e8%af%95-lambda-%e5%ae%b9%e5%99%a8%e6%94%af%e6%8c%81%e3%80%82\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.silicloud.com\/zh\/blog\/"},{"@type":"ListItem","position":2,"name":"\u8bf7\u4f7f\u7528 AWS SAM CLI \u6765\u5c1d\u8bd5 Lambda \u5bb9\u5668\u652f\u6301"}]},{"@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\/64d5cc7727fffbff2f9a2a8da1de3e5c","name":"\u6587, \u7fd4","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/920c3d673e0bccacc98e5e6b7149bb3c22edd8d39cb753e5d7d7e471498118a1?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/920c3d673e0bccacc98e5e6b7149bb3c22edd8d39cb753e5d7d7e471498118a1?s=96&d=mm&r=g","caption":"\u6587, \u7fd4"},"url":"https:\/\/www.silicloud.com\/zh\/blog\/author\/wenxiang\/"},{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e8%af%b7%e4%bd%bf%e7%94%a8-aws-sam-cli-%e6%9d%a5%e5%b0%9d%e8%af%95-lambda-%e5%ae%b9%e5%99%a8%e6%94%af%e6%8c%81%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\/32493","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\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/comments?post=32493"}],"version-history":[{"count":2,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/32493\/revisions"}],"predecessor-version":[{"id":78898,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/32493\/revisions\/78898"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/media?parent=32493"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/categories?post=32493"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/tags?post=32493"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}