无法通过厨师食谱在/ mnt上创建文件夹

时间:2016-01-17 12:24:45

标签: amazon-web-services amazon-ec2 chef chef-recipe packer

我使用以下chef命令在/ mnt

上创建一个文件夹
directory '/mnt/node/deploy' do
  owner 'ubuntu'
  group 'ubuntu'
  mode '0755'
  recursive true
  action :create
end

这是通过打包程序调用以创建AWS AMI的配方的一部分。 ubuntu是我用来将我的代码部署到配置的计算机的用户。 当我使用AMI启动EC2实例时,不会在计算机上创建此文件夹。可能是什么问题呢?创建AMI时,我看不到任何错误。

更新-1

这些是日志。我尝试使用root。

`amazon-ebs: * directory[/mnt/node/deploy] action create`
`amazon-ebs: - create new directory /mnt/node/deploy`
`amazon-ebs: - change mode from '' to '0755'`
`amazon-ebs: - change owner from '' to 'root'`
`amazon-ebs: - change group from '' to 'root'`

我看到EC2正在/ mnt上安装临时存储。 我想在临时存储上创建这些文件夹。 我卸载了/ mnt,但没有看到那里的文件夹。

2 个答案:

答案 0 :(得分:1)

Packer在创建图像之前运行Chef。所以,如果我理解正确的话:

  1. Chef在实例临时存储上创建目录。
  2. Packer创建AMI。
  3. 启动AMI,短暂存储中不存在该目录。
  4. AFAIK是预期的行为。该目录是在一个短暂的分区中创建的,并且预计这种分区不会持久。

    总结一下,当您创建AWS AMI映像时,它不包含临时存储。只有EBS卷。临时分区在启动时始终为空。如果要保留该目录,它必须位于EBS分区中。

    如果您仍想使用/mnt目录,则可以避免使用ami_block_device_mappings选项挂载临时存储:

      "ami_block_device_mappings": [
        {
          "device_name": "/dev/sdb",
          "no_device": true
        }
      ],
    

    同样适用于launch_block_device_mappings

    另一种解决方案可能是在新创建的实例中再次运行Chef cookbook。

答案 1 :(得分:0)

amazon-ebs是打包器构建器的名称:

  

amazon-ebs - 通过启动源AMI和创建EBS支持的AMI   在配置之后将其重新打包成新的AMI。如有疑问,请使用   这个构建器,这是最容易上手的。

它以EBS支持的方式运行整个机器,因此它可以在以后将EBS卷转换为AMI。

这与Chef无关。