interfaz - pasos para crear un componente en java
Instancia de lanzamiento: los grupos de seguridad de VPC no se pueden usar para un lanzamiento que no sea de VPC (4)
Este mismo error ocurre usando el programa de línea de comando, así que estoy agregando una respuesta separada ayudada por QuickNull. Simplemente asegúrese de especificar el grupo de seguridad y la subred. Por ejemplo:
aws ec2 run-instances --image-id ami-XXXXXXXX --count 1 --instance-type t1.micro --key-name XXXXXXXX --security-group-ids sg-XXXXXXXX --subnet-id subnet-XXXXXXXX
Intento crear una instancia en otra región, pero obtengo este error:
AWS Error Code: InvalidParameterCombination, AWS Error Message: VPC security groups may not be used for a non-VPC launch
Aquí está el código que estoy ejecutando.
RunInstancesRequest instancereq = new RunInstancesRequest();
instancereq.setInstanceType("m3.medium");
instancereq.setImageId("ami-37b1b45e");
instancereq.setMinCount(1);
instancereq.setMaxCount(1);
ArrayList<String> secgroup = new ArrayList<String>();
instancereq.setKeyName("testkey");
secgroup.add("testdefault");
instancereq.setSecurityGroups(secgroup);
instancereq.setPlacement(getAzPlacement());
RunInstancesResult instanceresult = ec2.runInstances(instancereq);
También intenté, en lugar de usar el nombre "testdefault", usar el groupid actual (sg-########)
, pero recibiré un error que dice que el grupo de seguridad no existe (que es mal, lo hace). Lo cual, basado en el documento API , si usa una VPC no predeterminada, debe pasar el groupid real pero obtendré un error como este:
InvalidGroup.NotFound, AWS Error Message: The security group ''sg-########'' does not exist
Si utilizo "default" como setSecurityGroups
la VPC predeterminada. Simplemente no parece ser como el groupid que estoy pasando, a pesar de ser exacto.
Además, si hago un comentario sobre el código setSecurityGroups
, y uso setSubnetId
en setSubnetId
lugar y paso el ID de subred, creará la instancia muy bien, pero va al grupo de seguridad "predeterminado", no a "prueba predeterminada" como yo quiero.
Todo lo que intento lograr es crear una instancia y hacer que use el grupo de VPC ya existente.
Gracias a @slayedbylucifer por su código ruby
, aquí está la solución java
para referencia:
// Creates an instance in the specified subnet of a non-default VPC and using the
// security group with id sg-1234567
ec2.runInstances(new RuntInstancesRequest()
...
.withSubnetId("subnet-1234abcd")
.withSecurityGroupIds("sg-1234567"));
Mi respuesta se enfocará en la siguiente declaración:
Todo lo que intento lograr es crear una instancia y hacer que use el grupo de VPC ya existente.
Entonces, según tengo entendido, desea iniciar una instancia en una VPC no predeterminada y asignarle un grupo de seguridad de VPC existente.
No soy un chico de java
, pero podría hacer lo que quisieras en ruby
como a continuación.
require ''aws-sdk-core''
Aws.config = {
:access_key_id => "my_access_key",
:secret_access_key => "my_secret_key",
:region => ''us-west-2''
}
ec2 = Aws::EC2.new
ec2.run_instances(
min_count: 1,
max_count: 1,
image_id: ''ami-8635a9b6'',
instance_type: ''t1.micro'',
placement: {
availability_zone: ''us-west-2a''
},
network_interfaces: [
{
subnet_id: ''subnet-e881bd63'',
groups: [''sg-fd53bf5e''],
device_index: 0,
associate_public_ip_address: true
}
],
key_name: ''my-key''
).each do |resp|
resp.instances.each do |x|
puts x.instance_id
end
end
Aunque se trata de un código de Ruby
, es bastante directo y debería darle algunos consejos claros sobre cómo hacerlo en Java
ya que todos estos SDK de AWS sondean las mismas API de servicio web.
Supongo que las cosas que deberías concentrarte en el código anterior son:
:region => ''us-west-2''
y
placement: {
availability_zone: ''us-west-2a''
},
network_interfaces: [
{
subnet_id: ''subnet-e881bd63'',
groups: [''sg-fd53bf5e''],
device_index: 0,
associate_public_ip_address: true
}
],
- Asegúrese de especificar explícitamente la región.
- Compruebe cómo he definido la ID de subred y la ID del grupo de seguridad. Este código iniciará mi instancia de EC2 en
subnet-e881bd63
de mi VPC y aplicará el ID de grupo de seguridad de VPCsg-fd53bf5e
a susg-fd53bf5e
interfaz de red. Además, también asignará una dirección IP pública a mi instancia. (de forma predeterminada, no asignará una dirección IP pública cuando inicie instancias en VPC). - FYI. Cuando inicia instancias en VPC, debe proporcionar la ID del grupo de seguridad en lugar del nombre del grupo de seguridad.
No puede especificar nombres de grupo de seguridad para el lanzamiento de VPC ( setSecurityGroups
). Para una VPC no predeterminada, debe usar ID de grupos de seguridad en su lugar. Consulte la página de instancias de ejecución EC2 ( withSecurityGroupIds
, o --security-group-ids
desde CLI).
Cuando especifica un grupo de seguridad para una VPC no predeterminada para la CLI o las acciones de API, debe usar la ID del grupo de seguridad y no el nombre del grupo de seguridad para identificar el grupo de seguridad.
Ver: Grupos de seguridad para EC2-VPC
Relacionado:
- Terraform lanza "groupName no se puede usar con la subred del parámetro" o "los grupos de seguridad VPC no se pueden usar para un lanzamiento que no sea VPC"