Назад | Перейти на главную страницу

Как динамически добавить предложение users в CloudFormation :: Init (или как программно установить ключи шаблона)

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",
  ]]}}