我想在EC2示例启动时创建2个用户并更改route 53记录。
在阅读this document和this document之后,我将以下内容写入其 * 用户数据 * 部分。
#cloud-config
cloud_final_modules:
- [users-groups, always]
- [runcmd, always]
users:
- name: brian.lee
ssh-authorized-keys:
- ssh-ed25519 AAAAC3NzaC1lZ...
brian.lee@3H1-01-987654.my-company.com
groups:
- wheel
sudo:
- ALL=(ALL) NOPASSWD:ALL
shell: /bin/bash
- name: test.user
ssh-authorized-keys:
- ssh-ed25519 AAAAC3Nz...
test.user@3H1-01-12345.my-company.com
groups:
- wheel
sudo:
- ALL=(ALL) NOPASSWD:ALL
shell: /bin/bash
runcmd:
- echo aaa > /tmp/test.txt
- |
export public_ip=$(/usr/bin/curl http://checkip.amazonaws.com)
sudo sed -i "s|PUBLIC_IP|$public_ip|" /tmp/change_dns.json
- aws route53 change-resource-record-sets --hosted-zone-id B4QMKZ7DTDEZL1 --change-batch\
file:///tmp/change_dns.json
write_files:
- path: /tmp/change_dns.json
owner: root:root
permissions: '0644'
content: |-
{
"Comment": "redirect route53 record to this EC2",
"Changes": [
{
"Action": "UPSERT",
"ResourceRecordSet": {
"Name": "bastion.my-company.com",
"Type": "A",
"TTL": 300,
"ResourceRecords": [
{
"Value": "PUBLIC_IP"
}
]
}
}
]
}
用户创建成功,/tmp/change_dns.json
文件也顺利创建。
但是runcmd
部分根本不会执行。我甚至在EC2示例中找不到/tmp/test.txt
。
我检查了/var/log/cloud-init-output.log
文件。但是我找不到任何与runcmd
相关的错误。
我给EC2示例赋予了一个IAM角色,这样它就有权更改route 53记录。
有人知道为什么runcmd
在我的cloud-init脚本中没有执行吗?
1条答案
按热度按时间cgyqldqp1#
根据cloudinit的官方文档
注意:不要从cloud-init将文件写入/tmp,而应使用/run/somedir。早期 Boot 环境可能会争用systemd-tmpfiles-clean LP:#1707222.
尝试将输出文件更改为/tmp的其他位置;这符合你所说的,cloudinit日志中没有错误。
根据文档,
runcmd
步骤应在配置阶段而不是最后阶段运行您将
runcmd
放入cloud_final_modules中,并期望在创建change_dns.json
后在进程结束时运行,但实际情况并非如此;因此,您可能需要翻转runcmd
和writefiles
步骤,并首先运行writefiles
,以便json文件为runcmd
步骤做好准备。