amazon-web-services - Hashicorp 打包程序:如何在首次运行时初始化实例?
问题描述
我使用Hashicorp Packer创建 AWS ubuntu 映像。我需要在第一次运行时对实例进行一些初始化。我知道我可以创建一个运行一次的脚本。但我想知道是否有任何开箱即用的解决方案,因为我在文档中找不到任何相关信息。
解决方案
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。
推荐阅读
- android - How to wait/observe incoming data from server correctly with rxjava/retrofit
- maven - 无法解析类 org.jenkinsci.plugins.workflow.support.steps.build.DownstreamFailureCause
- c - 该程序在运行时给出“分段错误”,但是当我在调试器中完全一样时它工作得很好
- vue.js - Vuex:dispatch 是否返回一个承诺,以便您可以链接它们?
- python-3.x - 在 Windows\Linux CentOS for Python3 上安装 quickfix 模块
- c# - ASP.NET Core,Telerik 网格,不显示数据,但控制器操作返回数据
- if-statement - SAS删除符合组内条件的观察
- reactjs - React Native:如何使用 iOS 14.0 获得 iPad 模拟器?
- daml - daml 测试命令失败,原因是:damlc:用户错误(无法启动场景服务:BErrorClient
- sql - SQL 一对多关系:我应该在表中看到“多”字段吗?