Dav*_*llo 9 amazon-ec2 packer amazon-web-services user-data
所以我正在尝试使用Packer创建AWS映像并通过user_data_file指定一些用户数据.实例启动时需要运行此文件的内容,因为每次实例都是唯一的.我不能把它加入AMI.
使用打包器我有以下内容:
{
"variables": {
"ami_name": ""
},
"builders": [
{
"type": "amazon-ebs",
"region": "us-east-1",
"source_ami": "ami-c8580bdf",
"instance_type": "t2.micro",
"ssh_username": "ubuntu",
"ami_name": "{{ user `ami_name` }}-{{ isotime | clean_ami_name }}",
"user_data_file": "user_data.sh",
"tags": {
"os_version": "ubuntu",
"built_by": "packer",
"build_on": "{{ isotime | clean_ami_name }}",
"Name": "{{ user `ami_name` }}"
}
}],
"provisioners": [
{
"type": "ansible",
"playbook_file": "playbook.yml",
"user": "ubuntu"
}]
}
Run Code Online (Sandbox Code Playgroud)
我的user_data shell脚本的内容只是通过在供应商步骤中运行的ansible脚本安装的软件包的几个基本配置行.观察Packer的输出我可以确认ansible脚本全部运行.
Packer完成并创建AMI,但永远不会执行用户数据.结果图像中不存在任何记录.没有/userdata.log文件并且/var/lib/cloud/instance/user-data.txt
是空的我觉得我错过了一些基本的东西,因为这应该是一个非常简单的事情与Packer.
Dav*_*llo 10
正如 Rickard von Essen 所指出的,答案是将我的脚本复制到/var/lib/cloud/scripts/per-instance
该脚本中,该脚本将在从此 AMI 启动的每个实例上执行我的脚本。
或者,/var/lib/cloud/scripts/per-boot
如果每次实例启动时都需要执行此操作,您可以将脚本放入。
在我的情况下,因为我想向第 3 方服务注册实例,所以每次创建实例时只执行一次。
重读这个我想也许你误解了用户数据脚本如何与Packer一起工作.
user_data
在Packer启动EC2实例时提供.在配置快照并保存为AMI之后,此实例最终完成.
从创建的AMI启动新实例时,它没有相同的用户数据,它会获取您在启动此新实例时指定的用户数据.
初始(在模板中定义)用户数据的效果可能会也可能不会出现在新实例中,具体取决于更改是否在AMI中保留.
归档时间: |
|
查看次数: |
4361 次 |
最近记录: |