Могу ли я создать AMI с упаковщиком на macOS?

Я пытаюсь создать Windows AMI (пользовательский образ AWS) с Packer. Есть ли способ использовать WinRM в macOS или мне нужно создать образ на компьютере с Windows?

Мы используем сочетание серверов Ubuntu и Windows, и большинство из них — серверы Ubuntu. Я хотел бы построить все это на моем макбуке. В производстве мы используем Jenkins.

Образ предназначен для запуска IIS и Sitecore.

мне нужно установить

  • ИИС
  • Сайткор
  • Filebeat

Пример кода:

resource "aws_key_pair" "mykey" {
  key_name = "mykey"
  public_key = "${file("${var.PATH_TO_PUBLIC_KEY}")}"
}

resource "aws_instance" "win-example" {
  security_groups = [ "${aws_security_group.windows-admin.id}" ]
  subnet_id = "subnet-730c9c16"
  ami = "ami-40003a26"
  instance_type = "t2.micro"
  associate_public_ip_address = true
  key_name = "${aws_key_pair.mykey.key_name}"
  tags {
    Name = "win-example"
  }
  user_data = <<EOF
<powershell>
net user ${var.INSTANCE_USERNAME} ${var.INSTANCE_PASSWORD} /add
net localgroup administrators ${var.INSTANCE_USERNAME} /add

winrm quickconfig -q
winrm set winrm/config/winrs '@{MaxMemoryPerShellMB="300"}'
winrm set winrm/config '@{MaxTimeoutms="1800000"}'
winrm set winrm/config/service '@{AllowUnencrypted="true"}'
winrm set winrm/config/service/auth '@{Basic="true"}'

netsh advfirewall firewall add rule name="WinRM 5985" protocol=TCP dir=in localport=5985 action=allow
netsh advfirewall firewall add rule name="WinRM 5986" protocol=TCP dir=in localport=5986 action=allow

net stop winrm
sc.exe config winrm start=auto
net start winrm
</powershell>
EOF

  provisioner "file" {
    source = "test.txt"
    destination = "C:/test.txt"
    connection {
      type = "winrm"
      user = "${var.INSTANCE_USERNAME}"
      password = "${var.INSTANCE_PASSWORD}"
      insecure = true
      timeout = "10m"
    }
  }
  connection {
    type = "winrm"
    user = "${var.INSTANCE_USERNAME}"
    password = "${var.INSTANCE_PASSWORD}"
    insecure = true
    timeout = "10m"
  }
}

терраформ сообщает об ошибке:

Error applying plan:
1 error(s) occurred:
* aws_instance.win-example: 1 error(s) occurred:
* unknown error Post http://54.229.229.22:5985/wsman: dial tcp 54.229.229.22:5985: getsockopt: operation timed out

Сценарий powershell запускается, и пользователь создается, но файл «test.txt» не копируется на сервер.


person Martin Andersen    schedule 02.05.2017    source источник


Ответы (3)


Я создал AMI Linux с хоста Windows, так что я много знаю об этом процессе. Он просто использует API-интерфейсы AWS для создания экземпляра из исходного AMI, SSH и выполняет нужные команды, выключает его и сохраняет для вас новый AMI (с некоторыми опущенными деталями). Так что не имеет значения, какую ОС вы используете для создания AMI.

Однако у меня нет опыта работы с WinRM, но, судя по этим статьям, это выглядит не так уж и тривиально:

Похоже, WinRM поддерживается уже два года:

23 ИЮНЯ 2015 | МИТЧЕЛЛ ХАШИМОТО | ПАКЕР

Мы выпустили Packer 0.8. Packer — это инструмент для создания образов виртуальных машин, контейнеров и других развертываемых артефактов.

Основные особенности Packer 0.8:

  • WinRM и Windows Provisioners
  • Образы Windows AWS

Вы действительно пробовали создавать образы Windows и сталкивались с некоторыми проблемами?

person NikoNyrh    schedule 02.05.2017
comment
Да, и я обновил свой вопрос кодом, который я пытаюсь заставить работать. - person Martin Andersen; 02.05.2017

Packer не зависит от вашей ОС при сборке с помощью облачного конструктора (например, amazon-ebs). Это рабочий пример для начала, template.json:

{
  "builders": [{
    "type": "amazon-ebs",
    "region": "eu-west-1",
    "instance_type": "m3.medium",
    "source_ami": "ami-d593bba6",
    "ami_name": "packer-demo-{{timestamp}}",
    "user_data_file": "userdata.txt",
    "communicator": "winrm",
    "winrm_username": "Administrator"
  }],
  "provisioners": [{
    "type": "powershell",
    "inline": [
      "dir c:\\"
    ]
  }]
}

И userdata.txt:

<powershell>
winrm quickconfig -q
winrm set winrm/config/winrs '@{MaxMemoryPerShellMB="300"}'
winrm set winrm/config '@{MaxTimeoutms="1800000"}'
winrm set winrm/config/service '@{AllowUnencrypted="true"}'
winrm set winrm/config/service/auth '@{Basic="true"}'

netsh advfirewall firewall add rule name="WinRM 5985" protocol=TCP dir=in localport=5985 action=allow
netsh advfirewall firewall add rule name="WinRM 5986" protocol=TCP dir=in localport=5986 action=allow

net stop winrm
sc config winrm start=auto
net start winrm

Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope LocalMachine
</powershell>
person Rickard von Essen    schedule 02.05.2017
comment
Packer не зависит от вашей ОС при сборке с помощью облачного компоновщика, да, потому что вы используете winrm, который не работает на Mac или Linux. - person red888; 05.05.2019
comment
@ red888 это неправда. Packer использует нативную библиотеку Go WinRM, которая будет работать на любой ОС, в которую компилируется Go. (Я сопровождаю Packer..) - person Rickard von Essen; 05.05.2019

На самом деле я достиг результата, который вы ищете, создав OVA с помощью Packer, но вместо установки инструментов vmware я устанавливаю облачные утилиты amazon. Это не совсем то, что вы ищете, но я думаю, что вы можете получить желаемый результат таким образом.

Затем из командной строки (или моего скрипта сборки) с установленными инструментами AWS я делаю следующее:

  1. aws s3 cp my-machine.ova s3://some-folder/mymachine.ova
  2. aws ec2 import-image --cli-input-json '{ "Платформа": "Linux", "Архитектура": "x86_64", "Описание": "Некоторые Centos AMI v21.2.1", "DiskContainers": [{ " Description": "Some_App", "UserBucket": { "S3Bucket": "centos-builds", "S3Key": "some-build-ami.ova"}}]}'
  3. aws ec2 описать-импорт-изображений-задач

Несколько предположений, таких как ваш секрет EC2 и ключ доступа, являются переменными среды, и что у вас есть инструменты AWS, установленные на вашем компьютере для сборки. Импорт образа занимает около 15 минут, а затем у вас есть хороший свежий AMI, ожидающий вас в ec2.

Что бы это ни стоило, это просто использует локальный компоновщик vmware fusion, а затем преобразует его в AMI, который мне нужен для локального устранения неполадок.

Дополнительная информация здесь.

person JP Bourget    schedule 15.05.2017
comment
Вам это вообще помогло? - person JP Bourget; 19.05.2017