2016-08-31 2 views
1

я в состоянии создать экземпляр EC2 (Amazon Linux) с помощью AWS Java SDK:Программным изменить имя хоста вновь созданного экземпляра AWS

RunInstancesRequest runInstancesRequest = new RunInstancesRequest() 
       .withInstanceType(InstanceType.valueOf("T2Micro")) 
       .withImageId("ami-12345abc") 
       .withMinCount(1) 
       .withMaxCount(1) 
       .withSecurityGroupIds("some-group") 
       .withKeyName("my-key") 

RunInstancesResult runInstancesResult = ec2.runInstances(runInstancesRequest); 

Теперь я хочу hostname из созданного таким образом сервер будет изменен ну, программно. Вручную можно с помощью этого AWS documentation. Я хочу, чтобы автоматизировать этот процесс, поэтому я стараюсь с помощью user data shell scripts как:

RunInstancesRequest runInstancesRequest = new RunInstancesRequest() 
       .withInstanceType(InstanceType.valueOf("T2Micro")) 
       ...... 
       .withUserData(getUserDataScript()); 
RunInstancesResult runInstancesResult = ec2.runInstances(runInstancesRequest); 

private static String getUserDataScript() { 
     String str = "#!/bin/bash\n" + 
        "sudo sed -i -e 's/[before]/after/' /etc/sysconfig/network\n" + 
        "sudo init 6"; 
     return Base64.getEncoder().encodeToString(str.getBytes()); 
} 

Проблемы в настоящее время является то, что я больше не могу войти к экземпляру так создан. Просто дает ошибку connection refused. Проверял ключ и каждую деталь - я могу войти в систему, если я не предоставляю скрипт пользовательских данных.

Я меняю имя хоста правильно? Есть ли другой способ автоматизировать это?

+0

Обновление: Теперь я могу войти в систему, но это занимает примерно около 15 минут - слишком большое значение для меня, чтобы ждать, когда вы создаете экземпляр в моей программе – User528491

ответ

1

при запуске sudo init 6 вы перезагружаетесь, что может занять некоторое время, поэтому вы не можете войти в систему сразу;

, что вы можете попробовать это запустить команду hostname непосредственно использовать новое имя хоста, так скрипт будет что-то вроде

String str = "#!/bin/bash\n" + 
       "sudo sed -i -e 's/[before]/new_hostname/' /etc/sysconfig/network\n" + 
       "sudo echo 'new_hostname' >> /etc/hostname" + 
       "sudo hostname new_hostname"; 

примечание: Я не в полной мере проверить это, но я ожидаю, что это должно взять new_hostname без перезапустите, чтобы он мог подключаться - в зависимости от вашего вкуса дистрибутива linux он может быть немного другим, я предлагаю вам сначала войти в обычную копию экземпляра и запустить команду, чтобы убедиться, что ti работает с вашим дистрибутивом linux.

+0

Хорошее предложение, но, к сожалению, он не работает на Amazon Linux без перезагрузки – User528491

Смежные вопросы