AWS :: CloudFormation :: Init документация позволяет создавать спецификации пользователей в экземплярах ec2, таким образом:
"users" : {
"myUser" : {
"groups" : ["groupOne", "groupTwo"],
"uid" : "50",
"homeDir" : "/tmp"
}
}
Я пытаюсь программно заменить myUser. Использование Ref: не работает:
"users": {
"{ "Ref": "UserName" }": {
"groups": [ "groupOne", "groupTwo" ]
}
}
Он говорит: «Ошибка формата шаблона: неверный формат JSON». на линии с Ref. Я пробовал около 800 различных способов набрать это, с кавычками и без них, используя разные функции вместо Ref, и я ничего не добился. К сожалению, я не могу понять, как определить, действительно ли это проблема типа «у вас отсутствует запятая» или существует более серьезная проблема с попыткой программной замены «myUser». И если последнее, то каково решение.
Любые идеи?
Спасибо!
Это невозможно с CloudFormation
обслуживание напрямую. Внутренняя функция Ref
возвращает значение указанного параметра или ресурса. Затем значение можно связать с ключом JSON / YAML. Но это не может быть ключ напрямую, поскольку объекты JSON / YAML записываются парами ключ / значение.
У меня есть две идеи, как вы могли бы это решить:
CloudFormation
шаблоны, написанные на YAML
с участием Jinja2
шаблоны, скипетр или стеки проекты могут легко сделать этоEC2 user data
напрямую, вы можете попробовать что-то вроде этого:
"UserData" : { "Fn::Base64" : { "Fn::Join" : ["", [
"#!/bin/bash -xe\n",
"useradd ",
{ "Ref": "UserName" },
"\n",
]]}}