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

AWS Lambda无法自动获取ECR最新镜像?求自动更新方案

解决AWS Lambda自动使用ECR最新容器镜像的问题

为什么之前的方案无效

Lambda会缓存已配置的容器镜像,只有当函数的镜像URI配置被修改(哪怕是相同值重新设置),或者函数被重新部署时,才会从ECR拉取最新镜像。仅保持标签不变或用latest标签,不会触发Lambda主动检查ECR的镜像更新。

可行的自动更新方案

1. 利用ECR事件触发Lambda自动更新

在ECR仓库配置事件通知,当新镜像推送完成后,触发一个专门的"更新Lambda"函数,通过AWS SDK强制更新目标Lambda的镜像配置:

  • 步骤:
    1. 打开ECR仓库的「事件通知」页面,创建新规则
    2. 事件类型选择IMAGE_PUSH_COMPLETE,指定要监听的标签(比如latest或你的固定标签)
    3. 目标选择「Lambda函数」,指定你提前创建的更新函数
  • 更新函数示例(Python + boto3):
import boto3
import json

lambda_client = boto3.client('lambda')
TARGET_FUNCTION_NAME = "你的目标Lambda函数名"

def lambda_handler(event, context):
    # 从ECR事件中提取最新镜像URI
    image_details = event['detail']['image']
    repository_name = event['detail']['repository-name']
    region = context.invoked_function_arn.split(':')[3]
    account_id = context.invoked_function_arn.split(':')[4]
    image_uri = f"{account_id}.dkr.ecr.{region}.amazonaws.com/{repository_name}:{image_details['tags'][0]}"
    
    # 更新目标Lambda的镜像配置
    response = lambda_client.update_function_code(
        FunctionName=TARGET_FUNCTION_NAME,
        ImageUri=image_uri
    )
    return {
        'statusCode': 200,
        'body': json.dumps(f"Lambda函数已更新至镜像: {image_uri}")
    }
  • 权限配置:给这个更新函数添加lambda:UpdateFunctionCode权限,确保能修改目标Lambda的配置。

2. 在Bitbucket CI/CD Pipeline中添加Lambda更新步骤

在Bitbucket的bitbucket-pipelines.yml里,推送镜像到ECR之后,直接调用AWS CLI命令强制更新Lambda:

  • 示例Pipeline片段:
script:
  # 登录ECR并推送镜像的步骤
  - aws ecr get-login-password --region $AWS_REGION | docker login --username AWS --password-stdin $ECR_REPO_URI
  - docker build -t $ECR_REPO_URI:$IMAGE_TAG .
  - docker push $ECR_REPO_URI:$IMAGE_TAG
  # 新增:更新Lambda函数
  - aws lambda update-function-code --function-name $TARGET_LAMBDA_NAME --image-uri $ECR_REPO_URI:$IMAGE_TAG
  • 前提:Bitbucket Runner需要配置AWS访问密钥(具备lambda:UpdateFunctionCode权限),并设置好环境变量(AWS_REGION、ECR_REPO_URI等)。

3. 使用AWS CodePipeline构建自动化部署流水线

搭建CodePipeline实现从Bitbucket代码提交到Lambda更新的全流程自动化:

  • 阶段配置:
    1. 源阶段:选择Bitbucket作为源,监听代码分支的提交
    2. 构建阶段:配置镜像构建并推送到ECR(如果Bitbucket未做构建)
    3. 部署阶段:选择「Lambda部署」动作,配置目标Lambda函数,指定从ECR获取最新镜像URI
  • 优势:有完整的部署历史、状态监控,适合多环境部署的复杂场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 20:25:20