如何通过CloudFormation Init创建无内容的空文件?
如何通过CloudFormation Init创建无内容的空文件?
我完全懂你碰到的这个坑——直接写content: ""或者省略content字段都会触发那个“File specified without source or content”错误,这是因为YAML会把空字符串解析成空值,CFN-init根本不认为这是有效的内容输入。
这里有两个靠谱的解决办法:
方法一:用Base64编码空字符串
通过!Base64 ""来定义content字段,这样CFN-init会把它识别为有效的内容(解码后就是空的),就能顺利创建出空文件了。修改后的模板片段如下:
Resources: Instance: Type: AWS::EC2::Instance Metadata: AWS::CloudFormation::Init: config: files: /var/log/app.log: content: !Base64 "" mode: '000646'
方法二:通过commands执行touch命令
如果你更习惯用Linux命令的方式,也可以在CFN-init的commands部分加一个touch命令来创建空文件,之后再通过files字段设置好文件权限:
Resources: Instance: Type: AWS::EC2::Instance Metadata: AWS::CloudFormation::Init: config: commands: 01_create_empty_log_file: command: "touch /var/log/app.log" files: /var/log/app.log: mode: '000646'
两种方法都能解决你的问题,你可以根据自己的使用习惯选就行。
备注:内容来源于stack exchange,提问作者zmunk
相关产品推荐
相关产品推荐

