我使用Hashicorp Packer来创建一个AWS ubuntu映像。我需要在第一次运行时对实例进行一些初始化。我知道我可以创建一个脚本,将运行一次。但是我想知道是否有任何开箱即用的解决方案,因为我在文档中找不到关于这个的任何内容。
Packer只关心构建基本ami,并不真正关心之后会发生什么。最好的选择是云初始化脚本,因为这就是它们的用途。正如他们网站上提到的:
Cloud-init是行业标准的多分发方法跨平台云实例初始化。它是横向支撑的所有主要的公共云提供商,为私有云提供系统云基础设施和裸机安装。
亚马逊关于设置用户数据脚本的文档可以在这里找到:启动时在Linux实例上运行命令
包括一个使用cloud-init指令的例子:
#cloud-config
repo_update: true
repo_upgrade: all
packages:
- httpd
- mariadb-server
runcmd:
- [ sh, -c, "amazon-linux-extras install -y lamp-mariadb10.2-php7.2 php7.2" ]
- systemctl start httpd
- sudo systemctl enable httpd
- [ sh, -c, "usermod -a -G apache ec2-user" ]
- [ sh, -c, "chown -R ec2-user:apache /var/www" ]
- chmod 2775 /var/www
- [ find, /var/www, -type, d, -exec, chmod, 2775, {}, ; ]
- [ find, /var/www, -type, f, -exec, chmod, 0664, {}, ; ]
- [ sh, -c, 'echo "<?php phpinfo(); ?>" > /var/www/html/phpinfo.php' ]
除此之外,如果你想以各种方式配置许多机器,另一个解决方案是使用Configuration-as-Code工具,如Puppet、Chef、Ansible或Salt。