You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求AWS Lambda使用自定义Docker容器的完整端到端实现示例

需求可行性说明

你的需求完全可实现,AWS Lambda原生支持容器镜像部署模式,执行结束后会自动回收所有临时容器资源,无需额外开发清理逻辑。

全流程可运行示例

1. 调整Dockerfile适配Lambda要求

你已有的可运行Dockerfile只需要新增Lambda Runtime接口适配逻辑即可,以下是完整示例:

  • 核心文件1:Dockerfile
# 可替换为你自己的基础镜像,此处用AWS官方Lambda基础运行时镜像简化适配
FROM public.ecr.aws/lambda/provided:al2-x86_64

# 安装业务依赖
RUN yum install -y curl jq && yum clean all

# 复制你要执行的业务bash脚本
COPY my_task.sh ./
RUN chmod +x my_task.sh

# 复制Lambda入口引导脚本
COPY bootstrap ./
RUN chmod +x bootstrap

# 指定Lambda启动入口
CMD ["bootstrap"]
  • 核心文件2:bootstrap(Lambda运行时入口,用来接收触发事件调用你的业务脚本)
#!/bin/sh
set -euo pipefail

# 循环监听Lambda运行时事件
while true
do
  # 获取触发事件信息
  EVENT=$(curl -sS "http://${AWS_LAMBDA_RUNTIME_API}/2018-06-01/runtime/invocation/next")
  REQ_ID=$(echo "$EVENT" | jq -r '.requestContext.requestId')

  # 调用你指定的bash脚本,传入事件参数
  ./my_task.sh "$EVENT"

  # 上报执行成功结果
  curl -sS "http://${AWS_LAMBDA_RUNTIME_API}/2018-06-01/runtime/invocation/${REQ_ID}/response" -d '{"code":0,"msg":"task done"}'
done
  • 核心文件3:my_task.sh(你自己的业务逻辑脚本,可自定义内容)
#!/bin/bash
echo "接收到触发参数:$1"
# 此处写入你的实际业务逻辑
echo "业务任务执行完成"

2. 构建镜像并推送至ECR

提前安装配置好AWS CLI,执行以下命令:

# 配置变量,替换为你自己的实际参数
AWS_REGION=cn-north-1
ECR_REPO_NAME=lambda-custom-task-repo

# 1. 创建ECR镜像仓库(如果已创建可跳过)
aws ecr create-repository --repository-name $ECR_REPO_NAME --region $AWS_REGION

# 2. 登录ECR
ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text)
aws ecr get-login-password --region $AWS_REGION | docker login --username AWS --password-stdin ${ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com

# 3. 构建镜像并打标签
docker build -t lambda-task .
docker tag lambda-task:latest ${ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com/${ECR_REPO_NAME}:latest

# 4. 推送镜像到ECR
docker push ${ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com/${ECR_REPO_NAME}:latest

3. 创建Lambda函数

提前准备好Lambda执行角色,角色需要附加AWSLambdaBasicExecutionRole和AmazonEC2ContainerRegistryReadOnly权限策略:

# 替换为你自己的Lambda执行角色ARN
LAMBDA_ROLE_ARN=arn:aws-cn:iam::${ACCOUNT_ID}:role/lambda-container-role

# 创建Lambda函数
aws lambda create-function \
  --function-name custom-container-task \
  --package-type Image \
  --code ImageUri=${ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com/${ECR_REPO_NAME}:latest \
  --role ${LAMBDA_ROLE_ARN} \
  --timeout 300 \
  --memory-size 1024 \
  --region $AWS_REGION

4. 手动触发Lambda执行

执行以下命令触发调用,Lambda会自动拉取ECR镜像、启动容器、执行你的bash脚本:

# 触发调用,执行结果写入response.json
aws lambda invoke \
  --function-name custom-container-task \
  --payload '{"test_key":"test_value"}' \
  --region $AWS_REGION \
  response.json

# 查看执行结果
cat response.json

5. 资源自动回收说明

Lambda执行完成后会自动销毁容器实例,释放所有计算资源,无需你手动操作。如果不需要保留相关配置,可手动删除ECR镜像和Lambda函数即可。

内容的提问来源于stack exchange,提问作者user10664542

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 06:39:04