通过在 CloudShell 中使用 AWS CDK 来部署 Lambda 函数
本教程演示如何通过在 CloudShell 中使用 AWS Cloud Development Kit (AWS CDK),将 Lambda 函数部署到您的账户。
先决条件
引导您的帐户使用 AWS CDK。有关使用 AWS CDK 进行引导的信息,请参阅《AWS CDK v2 开发人员指南》中的引导。如果您尚未引导该账户,可以在 CloudShell 中运行
cdk bootstrap。
确保您拥有向您的账户部署资源的权限。建议使用管理员权限。
教程
以下教程概述了如何通过在 CloudShell 中使用 AWS CDK,来部署基于 Docker 容器的 Lambda 函数。
在您的主目录中创建一个新文件夹。
mkdir ~/docker-cdk-tutorial导航到所创建的文件夹。
cd ~/docker-cdk-tutorial在本地安装 AWS CDK 依赖项。
npm install aws-cdk aws-cdk-lib
在您创建的文件夹中创建一个框架 AWS CDK 项目。
touch cdk.json mkdir lib touch lib/docker-tutorial.js lib/Dockerfile lib/hello.js使用文本编辑器(如
nano cdk.json)打开该文件并将以下内容粘贴到该文件中。{ "app": "node lib/docker-tutorial.js" }打开
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');打开
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" ]打开
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; };使用 AWS CDK CLI 合成项目并部署资源。您必须引导您的账户。
npx cdk synth npx cdk deploy --require-approval never
调用 Lambda 函数进行确认和验证。
aws lambda invoke --function-name DockerTutorialFunction out.json jq . out.json
现在,您已经使用 AWS CDK 成功部署了基于 Docker 容器的 Lambda 函数。有关 AWS CDK 的更多信息,请参见 AWS CDK v2 开发人员指南。如果您在尝试完成本教程时遇到错误或问题,请参阅本指南的故障排除部分寻求帮助。
清理
现在,您已经使用 AWS CDK 成功部署了基于 Docker 容器的 Lambda 函数。在 AWS CDK 项目中,运行以下命令以删除关联资源。系统将提示您确认删除。
npx cdk destroy DockerTutorialStack要将您在本教程中创建的文件和资源从您的 AWS CloudShell 环境中删除,请运行以下命令。
cd ~ rm -rf ~/docker-cli-tutorial