首页 > 解决方案 > Hashicorp 打包程序:如何在首次运行时初始化实例?

问题描述

我使用Hashicorp Packer创建 AWS ubuntu 映像。我需要在第一次运行时对实例进行一些初始化。我知道我可以创建一个运行一次的脚本。但我想知道是否有任何开箱即用的解决方案,因为我在文档中找不到任何相关信息。

标签: amazon-web-serviceshashicorp-packer

解决方案


Packer 只关心构建基础 AMI,并不真正关心之后会发生什么。最好的选择是cloud-init脚本,因为这就是它们的用途。正如他们网站上提到的:

Cloud-init 是行业标准的跨平台云实例初始化的多分发方法。所有主要的公共云提供商、私有云基础设施的供应系统和裸机安装都支持它。

亚马逊关于设置用户数据脚本的文档可以在这里找到: Run commands on your Linux instance at launch

它们包括一个使用 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' ]

除此之外,如果您要以各种方式启动许多机器,则另一个解决方案是使用配置即代码工具,例如 Puppet、Chef、Ansible 或 Salt。


推荐阅读