如何在运行 AWS Linux 2 的 AWS Elastic Beanstalk 上配置 Linux 交换空间?

6

回答 Can I configure Linux swap space on AWS Elastic Beanstalk? 这个 Stack Overflow 上的问题(来自 2016 年),可以使用 .ebextensions 配置文件配置 AWS Elastic Beanstalk 环境的 Linux 交换空间。

然而,AWS 文档 Customizing software on Linux servers 中有一个注释适用于更新的 Amazon Linux 2 平台:

在 Amazon Linux 2 平台上,我们强烈建议您在尽可能情况下使用 Buildfile、Procfile 和平台钩子来配置和运行自定义代码,而不是在 .ebextensions 配置文件中提供文件和命令,以便在实例启动期间为环境实例配置和运行自定义代码。

如何使用这种更现代的配置方法来配置交换空间?

2个回答

7

BuildfileProcfile并不适合此操作。它们有不同的用途——运行短命令和长命令。

我会使用平台钩子。具体来说,使用prebuild

这里的文件在 Elastic Beanstalk 平台引擎下载和提取应用程序源捆绑包之后运行,并在设置和配置应用程序和 Web 服务器之前运行。

理由是最好在应用程序开始配置之前创建交换空间。如果创建交换空间操作失败,您可以快速得到通知,而不是在设置应用程序之后才得到通知。

从 SO 链接中,可以将 01_add-swap-space.sh 放入 .platform/hooks/prebuild/ 文件夹中。请确保在将应用程序打包成压缩文件之前,01_add-swap-space.sh 可执行(chmod +x)。


4
基本上是相同的,但脚本放置的位置不同,我不需要.ebextensions/swap.config,因为脚本会根据其在文件系统中的位置在正确的时间执行。太棒了。 - Aaron Brager
2
@AaronBrager 是的。Amazon Linux 2钩子引入了许多新功能,例如这些钩子。 - Marcin
.platform/hooks/ 是用于应用部署平台钩子的目录。由于配置交换影响的是 EC2 实例而不是应用程序本身,交换脚本应该被定义为配置部署平台钩子,.platform/confighooks 在配置更新时运行,而不是在每次应用程序部署时运行。 - undefined
对于任何想知道的人来说,在2022年4月29日之后的任何Amazon Linux 2实例上,弹性Beanstalk会自动将脚本设置为可执行,因此在压缩之前不需要使用chmod +x命令。 - undefined

1
最简单的解决方案是将以下脚本放置在部署压缩文件中的.platform/hooks/predeploy/目录中。 如果尚未完成,它将创建一个1G(1024 x 1M)的交换文件,并确保每次实例重启时都会初始化。
#!/bin/bash
echo "************************"
echo "Handling swap file"
echo $(date)
echo "************************"
# if /etc/fstab doesn't contains swapfile command
if ! grep -q "swap" /etc/fstab; then
    sudo /bin/dd if=/dev/zero of=/var/swap.1 bs=1M count=1024
    sudo /sbin/mkswap /var/swap.1
    sudo chmod 600 /var/swap.1
    sudo /sbin/swapon /var/swap.1
    sudo /sbin/swapon -s
    touch .swapmem
    echo "************************"
    echo "Adding swapfile to /etc/fstab"
    echo $(date)
    echo "************************"
    echo '/var/swap.1 swap swap defaults 0 0' | sudo tee -a /etc/fstab
fi

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