-
Notifications
You must be signed in to change notification settings - Fork 355
Description
#!/bin/bash
Variables
PROJECT_ID=$(gcloud config get-value project)
REGION="us-west1"
ZONE_1="${REGION}-c"
ZONE_2="${REGION}-b" # You may need to adjust this if a different zone is specified
NETWORK="my-internal-app"
SUBNET_A="subnet-a"
SUBNET_B="subnet-b"
Function to check if a resource is ready
check_resource() {
local resource_type=$1
local resource_name=$2
local max_attempts=10
local attempt=1
while [ $attempt -le $max_attempts ]; do
if gcloud $resource_type describe $resource_name --quiet >/dev/null 2>&1; then
echo "$resource_type $resource_name is ready."
return 0
fi
echo "Waiting for $resource_type $resource_name to be ready... (Attempt $attempt/$max_attempts)"
sleep 10
((attempt++))
done
echo "Timeout waiting for $resource_type $resource_name to be ready."
return 1
}
Create internal IP address
echo "Creating internal IP address..."
gcloud compute addresses create my-ilb-ip
--region=$REGION
--subnet=$SUBNET_B
--addresses=10.10.30.5
check_resource "compute addresses" "my-ilb-ip --region=$REGION"
Create forwarding rule
echo "Creating forwarding rule..."
gcloud compute forwarding-rules create my-ilb-forwarding-rule
--load-balancing-scheme=internal
--network=$NETWORK
--subnet=$SUBNET_B
--address=my-ilb-ip
--ports=80
--region=$REGION
--backend-service=my-ilb-backend-service
check_resource "compute forwarding-rules" "my-ilb-forwarding-rule --region=$REGION"
sleep 10 # Wait for firewall rule to propagate
Create instance templates
echo "Creating instance template 1..."
gcloud compute instance-templates create instance-template-1
--machine-type=e2-medium
--network=$NETWORK
--subnet=$SUBNET_A
--tags=lb-backend
--metadata=startup-script-url=gs://cloud-training/gcpnet/ilb/startup.sh
--region=$REGION
echo "Creating instance template 2..."
gcloud compute instance-templates create instance-template-2
--machine-type=e2-medium
--network=$NETWORK
--subnet=$SUBNET_B
--tags=lb-backend
--metadata=startup-script-url=gs://cloud-training/gcpnet/ilb/startup.sh
--region=$REGION
sleep 20 # Wait for instance templates to be fully created
Create managed instance groups
echo "Creating managed instance group 1..."
gcloud compute instance-groups managed create instance-group-1
--template=instance-template-1
--size=1
--zone=$ZONE_1
echo "Creating managed instance group 2..."
gcloud compute instance-groups managed create instance-group-2
--template=instance-template-2
--size=1
--zone=$ZONE_2
sleep 60 # Wait for instances to be created and initialized
Configure autoscaling for instance groups
echo "Configuring autoscaling for instance group 1..."
gcloud compute instance-groups managed set-autoscaling instance-group-1
--max-num-replicas=5
--target-cpu-utilization=0.8
--cool-down-period=45
--zone=$ZONE_1
echo "Configuring autoscaling for instance group 2..."
gcloud compute instance-groups managed set-autoscaling instance-group-2
--max-num-replicas=5
--target-cpu-utilization=0.8
--cool-down-period=45
--zone=$ZONE_2
sleep 30 # Wait for autoscaling to be configured
Create utility VM
echo "Creating utility VM..."
gcloud compute instances create utility-vm
--zone=$ZONE_1
--machine-type=e2-micro
--network=$NETWORK
--subnet=$SUBNET_A
--private-network-ip=10.10.20.50
check_resource "compute instances" "utility-vm --zone=$ZONE_1"
Create health check
echo "Creating health check..."
gcloud compute health-checks create tcp my-ilb-health-check
--port=80
--region=$REGION
sleep 10 # Wait for health check to be created
Create backend service
echo "Creating backend service..."
gcloud compute backend-services create my-ilb-backend-service
--load-balancing-scheme=internal
--protocol=tcp
--region=$REGION
--health-checks=my-ilb-health-check
--health-checks-region=$REGION
check_resource "compute backend-services" "my-ilb-backend-service --region=$REGION"
Add instance groups to backend service
echo "Adding instance groups to backend service..."
gcloud compute backend-services add-backend my-ilb-backend-service
--instance-group=instance-group-1
--instance-group-zone=$ZONE_1
--region=$REGION
gcloud compute backend-services add-backend my-ilb-backend-service
--instance-group=instance-group-2
--instance-group-zone=$ZONE_2
--region=$REGION
sleep 30 # Wait for backends to be added
Create internal IP address
echo "Creating internal IP address..."
gcloud compute addresses create my-ilb-ip
--region=$REGION
--subnet=$SUBNET_B
--addresses=10.10.30.5
check_resource "compute addresses" "my-ilb-ip --region=$REGION"
Create forwarding rule
echo "Creating forwarding rule..."
gcloud compute forwarding-rules create my-ilb-forwarding-rule
--load-balancing-scheme=internal
--network=$NETWORK
--subnet=$SUBNET_B
--address=my-ilb-ip
--ports=80
--region=$REGION
--backend-service=my-ilb-backend-service
check_resource "compute forwarding-rules" "my-ilb-forwarding-rule --region=$REGION"
echo "Setup complete!"