

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用中的部署 Lambda 函数 AWS CDK CloudShell
<a name="tutorial-docker-cdk-deploy"></a>

本教程向您展示如何使用中的将 Lambda 函数部署到您的账户。 AWS Cloud Development Kit (AWS CDK) CloudShell

## 先决条件
<a name="prerequisites-docker-cdk-deploy"></a>
+ 引导您的帐户使用 AWS CDK。*有关使用引导的信息 AWS CDK，请参阅 v2 开发者指南中的[AWS CDK 引导](https://docs.aws.amazon.com/cdk/v2/guide/bootstrapping.html)。*如果你还没有引导账户，你可以跑`cdk bootstrap`进去。 CloudShell
+ 确保您拥有向您的账户部署资源的权限。建议使用管理员权限。

## 教程
<a name="tutorial-docker-cdk-deploy-steps"></a>

以下教程概述了如何使用中的部署基于 Docker 容器的 Lambda 函数。 AWS CDK CloudShell

1. 在您的主目录中创建一个新文件夹。

   ```
   mkdir ~/docker-cdk-tutorial
   ```

1. 导航到所创建的文件夹。

   ```
   cd ~/docker-cdk-tutorial
   ```

1. 在本地安装 AWS CDK 依赖项。

   ```
   npm install aws-cdk aws-cdk-lib
   ```  
![\[用于安装 AWS CDK 依赖项的命令的图像。\]](http://docs.aws.amazon.com/zh_cn/cloudshell/latest/userguide/images/docker-cdk-tutorial%20-%201-setup.png)

1. 在您创建的文件夹中创建一个基本 AWS CDK 项目。

   ```
   touch cdk.json
   mkdir lib
   touch lib/docker-tutorial.js lib/Dockerfile lib/hello.js
   ```

1. 使用文本编辑器（如 `nano cdk.json`）打开该文件并将以下内容粘贴到该文件中。

   ```
   {
     "app": "node lib/docker-tutorial.js"
   }
   ```

1. 打开 `lib/docker-tutorial.js` 文件并将以下内容粘贴到该文件中。

   ```
   // this file defines the CDK constructs we want to deploy
   
   const { App, Stack } = require('aws-cdk-lib');
   const { DockerImageFunction, DockerImageCode } = require('aws-cdk-lib/aws-lambda');
   const path = require('path');
   
   // create an application
   const app = new App();
   
   // define stack
   class DockerTutorialStack extends Stack {
     constructor(scope, id, props) {
       super(scope, id, props);
   
       // define lambda that uses a Docker container
       const dockerfileDir = path.join(__dirname);
       new DockerImageFunction(this, 'DockerTutorialFunction', {
         code: DockerImageCode.fromImageAsset(dockerfileDir),
         functionName: 'DockerTutorialFunction',
       });
     }
   }
   
   // instantiate stack
   new DockerTutorialStack(app, 'DockerTutorialStack');
   ```

1. 打开 `lib/Dockerfile` 并将以下内容粘贴到其中。

   ```
   # Use a NodeJS 20.x runtime
   FROM public.ecr.aws/lambda/nodejs:20
   
   # Copy the function code to the LAMBDA_TASK_ROOT directory
   # This environment variable is provided by the lambda base image
   COPY hello.js ${LAMBDA_TASK_ROOT}
   
   # Set the CMD to the function handler
   CMD [ "hello.handler" ]
   ```

1. 打开 `lib/hello.js` 文件并将以下内容粘贴到该文件中。

   ```
   // define the handler
   exports.handler = async (event) => {
     // simply return a friendly success response
     const response = {
       statusCode: 200,
       body: JSON.stringify('Hello, World!'),
     };
     return response;
   };
   ```

1. 使用 C AWS CDK LI 合成项目并部署资源。您必须引导您的账户。

   ```
   npx cdk synth
   npx cdk deploy --require-approval never
   ```  
![\[使用 AWS CDK CLI 合成项目和部署资源的命令的图像。\]](http://docs.aws.amazon.com/zh_cn/cloudshell/latest/userguide/images/docker-cdk-tutorial%20-%203-cdk-deploy-build.png)

1. 调用 Lambda 函数进行确认和验证。

   ```
   aws lambda invoke --function-name DockerTutorialFunction out.json
   jq . out.json
   ```  
![\[用于调用 Lambda 函数的命令的图片。\]](http://docs.aws.amazon.com/zh_cn/cloudshell/latest/userguide/images/docker-cdk-tutorial%20-%205-lambda-invoke.png)

   现在，您已经使用 AWS CDK成功部署了基于 Docker 容器的 Lambda 函数。有关的更多信息 AWS CDK，请参阅 [AWS CDK v2 开发者指南](https://docs.aws.amazon.com/cdk/v2/guide/hello_world.html)。如果您在尝试完成本教程时遇到错误或问题，请参阅本指南的[故障排除](https://docs.aws.amazon.com/cloudshell/latest/userguide/troubleshooting.html)部分寻求帮助。

## 清理
<a name="clean-up-docker-cdk-deploy"></a>

现在，您已经使用 AWS CDK成功部署了基于 Docker 容器的 Lambda 函数。在 AWS CDK 项目内部，运行以下命令以删除关联的资源。系统将提示您确认删除。
+ 

  ```
  npx cdk destroy DockerTutorialStack
  ```
+ 要将您在本教程中创建的文件和资源从您的 AWS CloudShell 环境中删除，请运行以下命令。

  ```
  cd ~
  rm -rf ~/docker-cli-tutorial
  ```