agent: |
ISVzUSCOnlxbxHHrhogdCreate subnets within the VPC in the us-west-2 region for the EKS cluster.
Create subnets within the VPC in the us-west-2 region for the EKS cluster.
There was a problem that the LLM was not able to address. Please rephrase your prompt and try again.
This script creates new subnets within the specified VPC in the us-west-2 region for the EKS cluster, finding non-conflicting CIDRs dynamically by iterating through potential CIDR blocks starting from a higher range to avoid conflicts.
inputs
outputs
import boto3
import json
# Initialize a session using Amazon EC2
session = boto3.Session(
aws_access_key_id=getEnvVar('AWS_ACCESS_KEY_ID'),
aws_secret_access_key=getEnvVar('AWS_SECRET_ACCESS_KEY'),
region_name=region
)
# Create EC2 client
ec2_client = session.client('ec2')
# Describe existing subnets to avoid conflicts
existing_subnets = ec2_client.describe_subnets(Filters=[{'Name': 'vpc-id', 'Values': [vpc_id]}])
existing_cidrs = [subnet['CidrBlock'] for subnet in existing_subnets['Subnets']]
# Function to find a non-conflicting CIDR
def find_non_conflicting_cidr(existing_cidrs, base_cidr, start_octet):
for i in range(start_octet, 256):
new_cidr = f"{base_cidr}.{i}.0/24"
if new_cidr not in existing_cidrs:
return new_cidr
raise Exception("Unable to find a non-conflicting CIDR")
# Base CIDR for subnets
base_cidr = "10.0"
# Find CIDRs for 2 public and 2 private subnets
public_subnet_cidrs, private_subnet_cidrs = [], []
for i in range(50, 256):
new_cidr = f"{base_cidr}.{i}.0/24"
if new_cidr not in existing_cidrs:
public_subnet_cidrs.append(new_cidr)
if len(public_subnet_cidrs) == 2:
break
for i in range(60, 256):
new_cidr = f"{base_cidr}.{i}.0/24"
if new_cidr not in existing_cidrs:
private_subnet_cidrs.append(new_cidr)
if len(private_subnet_cidrs) == 2:
break
# Get available AZs in the region (first 2)
az_response = ec2_client.describe_availability_zones(
Filters=[{'Name': 'region-name', 'Values': [region]}, {'Name': 'state', 'Values': ['available']}]
)
available_azs = sorted([az['ZoneName'] for az in az_response['AvailabilityZones']])[:2]
if len(available_azs) < 2:
raise Exception("At least 2 Availability Zones are required.")
# Create public subnets in distinct AZs
public_subnet_ids = []
for i, cidr in enumerate(public_subnet_cidrs):
az = available_azs[i]
subnet_response = ec2_client.create_subnet(
VpcId=vpc_id,
CidrBlock=cidr,
AvailabilityZone=az
)
subnet_id = subnet_response['Subnet']['SubnetId']
public_subnet_ids.append(subnet_id)
# Enable auto-assign public IP on launch
ec2_client.modify_subnet_attribute(
SubnetId=subnet_id,
MapPublicIpOnLaunch={'Value': True}
)
# Associate subnet with the route table connected to the Internet Gateway
ec2_client.associate_route_table(
SubnetId=subnet_id,
RouteTableId=rtb_id
)
# Create private subnets in distinct AZs
private_subnet_ids = []
for i, cidr in enumerate(private_subnet_cidrs):
az = available_azs[i]
subnet_response = ec2_client.create_subnet(
VpcId=vpc_id,
CidrBlock=cidr,
AvailabilityZone=az
)
private_subnet_ids.append(subnet_response['Subnet']['SubnetId'])
# Output
print('Public Subnet IDs:', json.dumps(public_subnet_ids, indent=4))
print('Private Subnet IDs:', json.dumps(private_subnet_ids, indent=4))
copied