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

通过GitHub Actions部署Lambda函数时遇ValidationException错误

GitHub Actions部署AWS Lambda遇Layers验证错误解决方案

问题重现

使用以下GitHub Actions工作流部署Lambda函数:

name: Deploy TFM_dev to aws lambda
on:
  push:
    branches:
      - mybranch

jobs:
  deploy_source:
    name: deploy lambda from source
    environment: DEV
    runs-on: ubuntu-latest
    steps:
      - name: checkout source code
        uses: actions/checkout@v1
      - name: Zip
        run: cd src && zip -r function.zip .
      - name: default deploy
        uses: appleboy/lambda-action@master
        with:
          aws_access_key_id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws_secret_access_key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          aws_region: ${{ vars.AWS_REGION }}
          function_name: mylambda
          zip_file: src/function.zip

部署时持续返回如下验证错误:

ValidationException: 1 validation error detected: 
Value '[]' at 'layers' failed to satisfy constraint: 
Member must satisfy constraint: 
[Member must have length less than or equal to 140, 
Member must have length greater than or equal to 1, 
Member must satisfy regular expression pattern: (arn:[a-zA-Z0-9-]+:lambda:[a-zA-Z0-9-]+:\d{12}:layer:[a-zA-Z0-9-_]+:[0-9]+)|(arn:[a-zA-Z0-9-]+:lambda:::awslayer:[a-zA-Z0-9-_]+), 
Member must not be null]

已知该工作流在另一个Lambda函数上可正常运行(使用完全相同的层),目标Lambda函数本身测试正常,更换自定义层版本后错误依旧,不清楚如何设置layers参数,同时疑惑为何另一个部署无需设置该参数。

原因分析

  1. appleboy/lambda-action@master版本的默认行为发生了变化:未显式指定layers参数时,该Action会向AWS Lambda API传递空数组[],而AWS API要求若传入layers数组,每个元素必须是有效的层ARN,不允许空数组存在。
  2. 另一个Lambda函数可能在部署前已通过控制台、CLI等方式配置了层,且旧版本的lambda-action不会主动传递layers参数(保留原有层配置),当前master分支版本强制传递空数组触发了验证错误。

解决方法

方法1:显式指定有效层ARN

在部署步骤的with字段中添加layers参数,填入目标Lambda需要的层ARN,多个ARN用逗号分隔:

- name: default deploy
  uses: appleboy/lambda-action@master
  with:
    aws_access_key_id: ${{ secrets.AWS_ACCESS_KEY_ID }}
    aws_secret_access_key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
    aws_region: ${{ vars.AWS_REGION }}
    function_name: mylambda
    zip_file: src/function.zip
    layers: "arn:aws:lambda:us-east-1:123456789012:layer:custom-layer:3,arn:aws:lambda:::awslayer:AmazonLinux2-Python3.11"

注意ARN格式必须严格符合AWS要求:自定义层ARN为arn:aws:lambda:<区域>:<账号ID>:layer:<层名>:<版本号>,AWS官方层ARN为arn:aws:lambda:::awslayer:<层名>。

方法2:使用稳定版本的Action,避免传递空数组

将appleboy/lambda-action@master替换为该Action的稳定历史版本(比如@v0.2.0,可根据Action发布历史选择合适版本),旧版本通常不会在未指定layers时传递空数组,从而保留Lambda原有层配置:

- name: default deploy
  uses: appleboy/lambda-action@v0.2.0
  with:
    aws_access_key_id: ${{ secrets.AWS_ACCESS_KEY_ID }}
    aws_secret_access_key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
    aws_region: ${{ vars.AWS_REGION }}
    function_name: mylambda
    zip_file: src/function.zip

方法3:确认目标Lambda层配置有效性

检查目标Lambda当前的层配置,确保所有层ARN格式正确、处于可用状态,且与部署使用的AWS账号、区域一致。若Lambda无需层,可先在控制台移除所有层,再重新运行部署工作流。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 13:18:25