Wenn Sie eine Instanz starten, können Sie optional die Sicherheitsgruppe angeben. Wenn Sie die Optionen: security_groups auslassen, wird standardmäßig die Sicherheitsgruppe "Standard" verwendet (Sie können die Sicherheitsgruppe einer Instanz nach dem Start nicht ändern). In Ihrem Beispiel sollten Sie die Sicherheitsgruppe für die gerade erstellte Sicherheitsgruppe angeben.
Eine andere Sache, die zu berücksichtigen ist, ist das Schlüsselpaar anzugeben. Es wird standardmäßig auf eins gesetzt, wenn Sie es nicht einstellen, aber Sie werden dies wahrscheinlich benötigen, um sich bei einem öffentlichen AMI anzumelden.
Hier ist ein Beispiel, das ich gerade lief. Die AMI, die ich benutze, ist die Amazon Linux Ami.
AWS.config(:access_key_id => '...', :secret_access_key => '...')
ec2 = AWS::EC2.new(:ec2_endpoint => "ec2.sa-east-1.amazonaws.com")
# create a security group and authorize ssh
sg = ec2.security_groups.create('my-security-group')
sg.authorize_ingress(:tcp, 22)
# create a key pair and write it to disk
key_pair = ec2.key_pairs.create('my-key-pair')
File.open("#{ENV['HOME']}/.ssh/my-key-pair.pk", 'w') do |file|
file.write key_pair.private_key
end
require 'fileutils'
FileUtils.chmod(0600, "#{ENV['HOME']}/.ssh/my-key-pair.pk")
instance = ec2.instances.create(
:image_id => 'ami-3c3be421',
:key_name => key_pair.name,
:security_groups => [sg])
sleep 1 while instance.status == :pending
puts instance.ip_address
#=> '1.2.3.4'
Jetzt sollten Sie in der Lage sein, in die Instanz ssh (manchmal ist es eine ~ 30 Sekunden Verzögerung aus, wenn die Instanzen Status: verfügbar und, wenn es um ssh reagiert).
Das Problem besteht darin, dass Sie Ihre neue Instanz in der Sicherheitsgruppe "default" statt der neu erstellten mit einer Ingress-Regel für ssh erstellen/ausführen. –