从AWS Lambda创建AMI

5
我一直在尝试使用packer从Lambda创建AMI以便特定的用例。我正在使用bash自定义运行时环境。我下载了packer软件包并解压缩了它。
但是,当我尝试运行可执行文件时,Lambda会抛出退出状态1,并且错误信息也不太具体。我尝试通过以下几种方式来解决这个问题 -
  1. 将packer目录路径添加到$PATH中,但我无法源. profile或.bashrc,它说它们不存在。
  2. 尝试向Lambda添加包含packer可执行文件的层,仍然无法解决问题。
代码 -
    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函数中吗? - wjordan
这个curl命令后面看起来像是一个错误。许多无服务器框架允许使用Docker镜像。AWS Lambda是否允许使用Hashi Packer镜像,还是在这种功能上仍然落后?你可以直接跳到packer validate这一步。 - Matt Schuchard
“bash自定义运行环境”是什么 - 您是否有关于此自定义环境的设置脚本或文档?例如,环境中是否可用“unzip”?您是否可以自定义bash选项(例如,添加bash -x以获取命令跟踪输出)? - wjordan
3个回答

2
不要尝试在Lambda中运行Packer,使用AWS ECS Fargate并运行官方Docker镜像

1
Lambda执行环境挂载在只读文件系统上,除了提供512mb临时空间的/tmp。在Bash脚本的开头添加cd /tmp以在临时文件夹中操作下载的文件。

0

如果您想在特定时间使用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

这里我在Node.js中编写了代码,并使用CloudWatch触发Lambda。如果您遇到任何问题,可以联系我,我发现使用Lambda最简单的方法是备份AMi。

针对您的错误,我建议再次检查路径并将设置导入Lambda云中,否则只有路径错误。或者分享一些您的代码截图,以便我们能够帮助。


@ChandrasekharMalladi,您能否在Lambda控制台上增加超时时间和内存限制,并重新运行以进行测试? - Harsh Manvar
从日志来看,我并没有看到内存或时间超出限制的情况,它基本上还在正常范围内。然而,我仍尝试了一下,结果并没有起到帮助作用。 - Chandrasekhar Malladi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接