gpt4 book ai didi

java - 启动实例 : VPC security groups may not be used for a non-VPC launch

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:44:35 28 4
gpt4 key购买 nike

我正在尝试在另一个区域创建一个实例,但出现此错误:

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);

我也尝试过,而不是使用名称“testdefault”,而是使用实际的组 ID (sg-########),但我会收到一条错误消息该安全组不存在(这是错误的,它确实存在)。其中,based on the API doc ,如果使用非默认 VPC,您应该传递实际的 groupid,但我会收到如下错误:

InvalidGroup.NotFound, AWS Error Message: The security group 'sg-########' does not exist

如果我使用“默认”作为 setSecurityGroups,它将使用默认 VPC。它看起来不像我传递的 groupid,尽管它是准确的。

此外,如果我注释掉 setSecurityGroups 代码,并改用 setSubnetId 并传递子网 ID,它会很好地创建实例,但它会进入“默认”安全组,而不是我想要的“testdefault”。

我想要完成的就是创建一个实例并让它使用已经存在的 VPC 组。

最佳答案

我的回答将集中在以下陈述上:

All I'm trying to accomplish is creating an instance and having it use the already existing VPC group.

因此,据我了解,您想在非默认 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'

placement: {
availability_zone: 'us-west-2a'
},
network_interfaces: [
{
subnet_id: 'subnet-e881bd63',
groups: ['sg-fd53bf5e'],
device_index: 0,
associate_public_ip_address: true
}
],
  1. 确保明确指定区域。
  2. 检查我是如何定义子网 ID 和安全组 ID 的。此代码将在我的 VPC 的 subnet-e881bd63 中启动我的 EC2 实例,并将 VPC 安全组 ID sg-fd53bf5e 应用于其 0 网络界面。此外,它还会为我的实例分配一个公共(public) IP 地址。 (默认情况下,当您在 VPC 中启动实例时,它不会分配公共(public) IP 地址)。
  3. 仅供引用。当您在 VPC 中启动实例时,您必须提供安全组 ID 而不是安全组名称。

关于java - 启动实例 : VPC security groups may not be used for a non-VPC launch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22365470/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com