Java 启动实例:VPC安全组不能用于非VPC启动
我试图在另一个区域中创建实例,但出现以下错误:Java 启动实例:VPC安全组不能用于非VPC启动,java,amazon-web-services,amazon-ec2,amazon-vpc,Java,Amazon Web Services,Amazon Ec2,Amazon Vpc,我试图在另一个区域中创建实例,但出现以下错误: AWS Error Code: InvalidParameterCombination, AWS Error Message: VPC security groups may not be used for a non-VPC launch 这是我正在执行的代码 RunInstancesRequest instancereq = new RunInstancesRequest(); instancereq.setInstanceType("m3
AWS Error Code: InvalidParameterCombination, AWS Error Message: VPC security groups may not be used for a non-VPC launch
这是我正在执行的代码
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);
如果我使用“default”作为设置安全组
它将使用默认VPC。它看起来不像我通过的groupid,尽管它是准确的
另外,如果我注释掉setSecurityGroups
代码,使用setSubnetId
并传递子网id,它将创建一个实例,但它会进入“default”安全组,而不是我想要的“testdefault”
我所要做的就是创建一个实例,并让它使用已经存在的VPC组。我的答案将集中在以下陈述上: 我所要做的就是创建一个实例,让它使用已经存在的VPC组 因此,据我所知,您希望在非默认VPC中启动一个实例,并为其分配一个现有的VPC安全组 我不是一个
java
的家伙,但我可以在ruby
中做你想做的事情,如下所示
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
尽管这是一个Ruby
代码,但它非常简单,应该给您一些关于如何在Java
中进行此操作的清晰提示,因为所有这些AWS SDK都轮询相同的web服务api
我想,在上面的代码中,您应该关注的是:
:region => 'us-west-2'
及
子网-e881bd63
中启动我的EC2实例,并将VPC安全组IDsg-fd53bf5e
应用于其0
th网络接口。此外,它还将为我的实例分配一个公共IP地址。(默认情况下,在VPC中启动实例时不会分配公共IP地址)使用命令行程序时也会出现同样的错误,因此我添加了一个由QuickNull帮助的单独答案。只需确保指定安全组和子网。例如:
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
感谢他的ruby
code,以下是java
解决方案供参考:
// 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"));
无法为VPC启动指定安全组名称(
setSecurityGroups
)。对于非默认VPC,必须使用安全组ID。请参阅EC2页(带有安全组ID
,或CLI中的--安全组ID
)
在CLI或API操作中为非默认VPC指定安全组时,必须使用安全组ID和非安全组名称来标识安全组
见:
相关的:
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
// 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"));