我想在 VPC 内的公共子网中配置 EC2 实例。为了实现此目的,我使用 boto3 编写了以下代码。总而言之,我创建了一个 VPC,为其启用 DNS 支持和主机名,创建一个安全组以允许所有入口流量,为 VPC 创建一个子网(并要求它在启动时映射公共 IP),创建并将 Internet 网关连接到 VPC,最后创建一个具有 CIDR 目标 0.0.0.0/0 的路由表。然后,我使用我们在 VPC 内创建的子网创建一个实例。
def setup_network():
use_dry_run = False
ec2_resource = boto3.resource('ec2', region_name=AWS_REGION)
ec2_client = boto3.client('ec2', region_name=AWS_REGION)
#Create a VPC
vpc = ec2_resource.create_vpc(DryRun=use_dry_run, CidrBlock='10.0.0.0/24')
ec2_client.modify_vpc_attribute(VpcId=vpc.vpc_id, EnableDnsSupport={'Value':True})
ec2_client.modify_vpc_attribute(VpcId=vpc.vpc_id, EnableDnsHostnames={'Value':True})
#Create an EC2 Security Group
ip_permissions = [
{
'IpProtocol': '-1',
'FromPort': -1,
'ToPort': -1,
'IpRanges': [{'CidrIp': '0.0.0.0/0'}]
}]
security_group = ec2_client.create_security_group(GroupName='gpu_group', Description='Allow_all_ingress_egress', VpcId=vpc.vpc_id)
group_id = security_group['GroupId']
ec2_client.authorize_security_group_ingress(GroupId=group_id, IpPermissions=ip_permissions)
#Create the subnet for the VPC
subnet = vpc.create_subnet(DryRun=use_dry_run, CidrBlock='10.0.0.0/25', AvailabilityZone=AWS_AVAILABILITY_ZONE)
ec2_client.modify_subnet_attribute(SubnetId=subnet.subnet_id, MapPublicIpOnLaunch={'Value':True})
#Create an Internet Gateway
gateway = ec2_resource.create_internet_gateway(DryRun=use_dry_run)
gateway.attach_to_vpc(DryRun=use_dry_run, VpcId=vpc.vpc_id)
#Create a Route table and add the route
route_table = ec2_client.create_route_table(DryRun=use_dry_run, VpcId=vpc.vpc_id)
route_table_id = route_table['RouteTable']['RouteTableId']
ec2_client.create_route(DryRun=use_dry_run, DestinationCidrBlock='0.0.0.0/0',RouteTableId=route_table_id,GatewayId=gateway.internet_gateway_id\
)
return vpc, subnet
我无法通过 ssh 进入任何实例;我忘记了什么吗?