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

使用AWS自定义Lambda Runtime运行Bash脚本失败,求助解决aws命令无法执行的问题

AWS自定义Lambda Runtime运行Bash脚本失败,求助解决aws命令无法执行的问题

看起来你遇到的核心问题是Lambda自定义运行时的环境里没有预装AWS CLI工具,而你添加的bash层只提供了Bash的运行环境,并没有包含AWS CLI,所以才会出现/opt/bin/aws: cannot execute: required file not found的报错。我给你几个实用的解决思路,还有一些细节调整建议:

一、快速解决:添加包含AWS CLI的Lambda层

你可以直接使用社区维护的AWS CLI公共层,比如(注意要匹配你的Lambda所在区域,下面是us-east-1的示例,其他区域可以找对应ARN或者自己构建):
arn:aws:lambda:us-east-1:017000801446:layer:awscli:14

添加这个层之后,AWS CLI会被放在/opt/awscli/bin/路径下,你需要在脚本开头把这个路径加入环境变量,这样就能直接调用aws命令了:

export PATH="/opt/awscli/bin:$PATH"

二、更灵活的方案:自己构建AWS CLI层

如果需要特定版本的AWS CLI,或者担心公共层的兼容性,你可以自己打包一个:

  1. 用Amazon Linux 2环境(比如EC2实例或者本地Docker的amazonlinux:2镜像)
  2. 执行以下命令把AWS CLI安装到指定目录:
    mkdir -p layer/awscli/bin
    curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
    unzip awscliv2.zip
    ./aws/install -i layer/awscli -b layer/awscli/bin
    
  3. 把layer目录打包成zip文件,上传到Lambda作为自定义层
  4. 同样在脚本里加入PATH配置:export PATH="/opt/awscli/bin:$PATH"

三、你的测试脚本和目标脚本的小修正

  1. 测试用的function.sh缺少闭合的},修正后应该是:
    function handler () {
      EVENT_DATA=$1
      DATA=$(aws s3 ls)
      RESPONSE="{\"statusCode\": 200, \"body\": \"$DATA\"}"
      echo $RESPONSE
    }
    
  2. 你的VPC端点查询脚本里,数组赋值的方式有问题,直接用end_points=$(aws ...)会把结果变成字符串,无法正确遍历,应该改成:
    #!/usr/bin/bash 
    declare -a end_points
    # 用read -ra把输出转为数组
    read -ra end_points <<< "$(aws ec2 describe-vpc-endpoints --filters "Name=vpc-endpoint-type,Values=Interface" --query 'VpcEndpoints[*].VpcEndpointId' --output text)"
    for ep in "${end_points[@]}"; do 
       echo "$ep"; 
    done
    

四、关于定时调度的补充

你提到要每天下午5点运行这个脚本,记得用EventBridge(原CloudWatch Events)创建定时规则,cron表达式设为0 17 * * ? *(默认时区是UTC,如果你需要国内时区,要把时间转换成UTC,比如下午5点北京时间对应UTC上午9点,表达式就是0 9 * * ? *)。

备注:内容来源于stack exchange,提问作者Judi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.17 12:33:03