【问题标题】:Creating an AMI from AWS Lambda从 AWS Lambda 创建 AMI
【发布时间】:2019-03-12 04:04:32
【问题描述】:

我一直在尝试使用 packer 从 Lambda 为特定用例创建 AMI。我正在使用 bash 自定义运行时环境。我拉出打包机包并解压缩。

但是当我尝试运行可执行文件时,Lambda 以退出状态 1 将我抛出,并且错误也不是描述性的。我尝试通过几种方式解决此问题-

  1. 将打包程序目录路径添加到 $PATH,但我无法获取 .profile 或 .bashrc,它说它们不存在。

  2. 尝试向 Lambda 添加一个带有打包程序可执行文件的层,但仍然没有帮助。

代码-

    echo "Installing Packer..."
    curl -qL -o packer.zip https://releases.hashicorp.com/packer/1.1.1/packer_1.1.1_linux_amd64.zip
    echo "Unzipping Packer"
    unzip packer.zip
    echo "Changing permissions on packer"
    chmod 777 ./packer
    echo "Running Packer Validate"
    ./packer validate ${LAMBDA_TASK_ROOT}/packer.json

Lambda 控制台日志 -

    % Total    % Received % Xferd  Average Speed   Time    Time     
    Time  Current Dload  Upload   Total   Spent    Left  Speed

    0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
    100 15.8M  100 15.8M    0     0  48.3M      0 --:--:-- --:--:-- --:--:-- 49.2M
    END RequestId: 14cb72cf-c7ff-4a4d-a1c1-99d145395aef
    REPORT RequestId: 14cb72cf-c7ff-4a4d-a1c1-99d145395aef  Init 
    Duration: 61.04 ms  Duration: 5623.92 ms    Billed Duration: 5700 ms    Memory Size: 1408 MB    Max Memory Used: 274 MB 
    RequestId: 14cb72cf-c7ff-4a4d-a1c1-99d145395aef Error: Runtime 
    exited with error: exit status 1
    Runtime.ExitError

顺便说一句,有什么办法可以让 lambda 日志更具描述性?如果执行失败,它甚至不打印出 echo 语句?

以前有人遇到过这种情况吗?任何线索都会有所帮助。

提前感谢您的帮助:)

【问题讨论】:

  • 您能否将您从控制台日志中获得的确切文本以及源代码复制/粘贴到您的 Lambda 函数中?
  • 这看起来像是curl 命令之后的错误。一堆无服务器框架允许使用 Docker 镜像。 AWS Lambda 是否允许使用 Hashi Packer 映像,还是在这种功能上仍然落后?你可以这样直接跳到packer validate
  • 什么是“bash 自定义运行时环境”——你有关于这个自定义环境的设置脚本或文档吗?例如,unzip 在环境中是否可用?你能自定义 bash 选项吗(例如,添加 bash -x 用于命令跟踪输出)?

标签: bash amazon-web-services aws-lambda packer


【解决方案1】:

不要尝试在 Lambda 中运行 Packer,使用 AWS ECS Fargate 并运行 official docker image

【讨论】:

    【解决方案2】:

    Lambda 执行环境安装在只读文件系统上,/tmp 除外,它提供 512mb 的暂存空间。将cd /tmp 添加到 Bash 脚本的开头,以操作临时文件夹中下载的文件。

    【讨论】:

      【解决方案3】:

      如果您想在特定时间使用 lambda 创建 AMI,例如使用 cron 作业触发 lambda 并获取 ec2 的 AMI 备份,您可以关注我的博客:

      https://knowihave.blogspot.com/2018/09/aws-auto-ami-backup-across-all-region.html

      代码也可以在我的 git 上找到:

      https://github.com/harsh4870/AWS-auto-ami-backup-across-all-region

      在这里,我在节点 js 中编写了代码并使用云手表触发了 lambda。如果您遇到任何问题,您可以联系我发现使用 lambda 进行 AMi 备份的最简单方法

      如果出现您的错误,我建议再次检查路径并将设置导入 lambda 它仅云路径错误,否则请分享您的代码屏幕截图以便提供帮助

      【讨论】:

      • @ChandrasekharMalladi 你能增加 lambda 的时间吗?和来自 lambda 控制台的内存限制并再次运行以进行测试。
      • 从日志中,我没有看到内存或时间超出限制,它几乎在该区域中。但是,我试了一下,它没有帮助。
      猜你喜欢
      • 2012-01-18
      • 1970-01-01
      • 2016-12-31
      • 2017-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-10
      • 2017-07-07
      相关资源
      最近更新 更多