Amazon web services 带封隔器的AWS用户_数据
所以我尝试使用Packer创建一个AWS映像,并通过user_data_文件指定一些用户数据。实例启动时需要运行此文件的内容,因为它每次都是唯一的。我不能把这个烤到AMI里 使用packer,我有以下几点:Amazon web services 带封隔器的AWS用户_数据,amazon-web-services,amazon-ec2,packer,user-data,Amazon Web Services,Amazon Ec2,Packer,User Data,所以我尝试使用Packer创建一个AWS映像,并通过user_data_文件指定一些用户数据。实例启动时需要运行此文件的内容,因为它每次都是唯一的。我不能把这个烤到AMI里 使用packer,我有以下几点: { "variables": { "ami_name": "" }, "builders": [ { "type": "amazon-ebs", "region": "us-east-1", "source_ami": "ami-c8580bdf"
{
"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"
}]
}
我的user_data shell脚本的内容只是通过provisioners步骤中运行的ansible脚本安装的包的几个基本配置行。通过观察Packer的输出,我可以确认ansible脚本都在运行
Packer完成并创建AMI,但用户数据块从未执行。生成的图像中不存在它的记录。没有/userdata.log文件,
/var/lib/cloud/instance/user data.txt
是空的,我觉得我缺少了一些基本的东西,因为这应该是使用Packer的一件非常简单的事情 重读这篇文章,我想你可能误解了用户数据脚本是如何与Packer一起工作的
当Packer启动EC2实例时,将提供用户数据。最后,在设置快照并保存为AMI之后,该实例将被保存
当您从创建的AMI启动新实例时,它没有相同的用户数据,它将获取您在启动此新实例时指定的用户数据
初始(在模板中定义)用户数据的效果可能在新实例中存在,也可能不存在,这取决于更改是否在AMI中持久化 正如Rickard von Essen所指出的,答案是将我的脚本复制到
/var/lib/cloud/scripts/per instance
,它将在从这个AMI启动的每个实例上执行我的脚本
或者,如果需要在每次实例启动时执行此操作,您可以将脚本放入/var/lib/cloud/scripts/per boot
在我的例子中,因为我想向第三方服务注册实例,所以每次创建实例时,我只让它执行一次 上传到
/var/lib/cloud/scripts/*
会起作用,但这取决于您希望如何构建图像。您是否需要能够快速启动实例
最好的解决办法是我们。Provisioniers用于在引导后使用ansible/salt/puppet/cheff/shell脚本等安装和配置机器映像,您可以根据需要为映像提供任何内容。这样,您就不必在每次实例启动时都设置DEP,这可能会导致一些问题(想想间歇性的网络问题/故障,这可能会导致一些DEP未安装)
packer的供应器是第三方u你能添加
用户u data.sh
文件吗?日志进入/var/log/cloud init output.log
和/var/log/cloud init.log
。理查德·冯·埃森在下面的回答中直截了当地回答了我。它仅在启动基于打包器的初始实例时执行。当我尝试从这个AMI启动一个实例时,它将不存在。我如何从使用packer构建的AMI启动一个实例,每次运行用户数据,以便每个实例都是唯一的?将脚本放入路径不起作用,只对打包器实例起作用@DavidFicocielloso您是说您在这个路径中放置了一个非常简单的脚本:/var/lib/cloud/scripts/per instance
,但它没有运行?对于一个测试,你应该在里面放一些非常基本的东西,并证明它是有效的。按照我在这个问题上得到的指导,我能够让我的实例启动并在该目录中执行脚本。好吧,所以看起来我完全没有抓住Packer的user_数据部分的要点。我假设它会将用户_数据烘焙到图像中,以便在每次启动时执行它。我得想出一个不同的解决办法。谢谢。只需将脚本(在Packer中设置时)上载到/var/lib/cloud/scripts/per boot/
或per instance
并使其可执行即可。它将在每次启动时由cloud init执行,或在每个实例上执行一次。查看云初始化文档了解更多信息。Rickard von Essen就是他做的!非常感谢。我不知道那些脚本目录。它对我不起作用。还有其他方法可以尝试吗?看起来路径还是一样的。将userdata sh脚本放入该目录后,cloudinit会自动运行该脚本吗?或者我应该在打包机配置期间运行它?