Skip to content

Commit

Permalink
Nuke EKS clusters (#1407)
Browse files Browse the repository at this point in the history
This PR addresses the deletion of an EKS cluster from the nuke DAG.
  • Loading branch information
vatsrahul1001 authored Dec 29, 2023
1 parent f1887ee commit ad9dbb7
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 0 deletions.
16 changes: 16 additions & 0 deletions astronomer/providers/amazon/aws/example_dags/example_aws_nuke.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,12 @@
SLACK_USERNAME = os.getenv("SLACK_USERNAME", "airflow_app")
SLACK_WEBHOOK_CONN = os.getenv("SLACK_WEBHOOK_CONN", "http_slack")

REGRESSION_CLUSTER_AWS_ACCESS_KEY = os.getenv("REGRESSION_CLUSTER_AWS_ACCESS_KEY", "**********")
REGRESSION_CLUSTER_AWS_SECRET_ACCESS_KEY = os.getenv(
"REGRESSION_CLUSTER_AWS_SECRET_ACCESS_KEY", "***********"
)
REGRESSION_CLUSTER_AWS_DEFAULT_REGION = os.getenv("REGRESSION_CLUSTER_AWS_DEFAULT_REGION", "us-east-1")


def generate_task_report(**context: Any) -> None:
"""Generate a report of the task statuses for the DAG run and send it to configured Slack channel for alerts."""
Expand Down Expand Up @@ -125,6 +131,15 @@ def check_dag_status(**kwargs: Any) -> None:
f"aws emr-containers list-virtual-clusters --state RUNNING --region {AWS_DEFAULT_REGION} | jq -r '.virtualClusters[].id' | xargs -I % aws emr-containers delete-virtual-cluster --id % --region {AWS_DEFAULT_REGION}; ",
)

terminate_dag_authoring_regression_clusters = BashOperator(
task_id="terminate_dag_authoring_regression_clusters",
bash_command=f"set -e; "
f"aws configure set aws_access_key_id {REGRESSION_CLUSTER_AWS_ACCESS_KEY}; "
f"aws configure set aws_secret_access_key {REGRESSION_CLUSTER_AWS_SECRET_ACCESS_KEY}; "
f"aws configure set default.region {REGRESSION_CLUSTER_AWS_DEFAULT_REGION}; "
f"sh $AIRFLOW_HOME/dags/example_delete_eks_cluster_and_nodes.sh {REGRESSION_CLUSTER_AWS_DEFAULT_REGION}",
)

execute_aws_nuke = BashOperator(
task_id="execute_aws_nuke",
bash_command=f"aws configure set aws_access_key_id {AWS_ACCESS_KEY_ID}; "
Expand Down Expand Up @@ -163,6 +178,7 @@ def check_dag_status(**kwargs: Any) -> None:
start
>> [get_airflow_version, get_airflow_executor]
>> terminate_running_emr_virtual_clusters
>> terminate_dag_authoring_regression_clusters
>> execute_aws_nuke
>> delete_stale_emr_vpcs
>> delete_stale_emr_iam_roles
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
#!/bin/bash

# Check if the region parameter is provided
if [ -z "$1" ]; then
echo "Usage: $0 <AWS_REGION>"
exit 1
fi

AWS_REGION="$1"

# List all EKS clusters
clusters=$(aws eks list-clusters --region $AWS_REGION | jq -r '.clusters[]')

# Loop through each EKS cluster
for cluster in $clusters; do
echo "Processing EKS cluster: $cluster"

# List nodegroups for the cluster
nodegroups=$(aws eks list-nodegroups --cluster-name $cluster --region $AWS_REGION | jq -r '.nodegroups[]')

# Delete each nodegroup
for nodegroup in $nodegroups; do
echo "Deleting nodegroup '$nodegroup' for cluster '$cluster'"
aws eks delete-nodegroup --cluster-name $cluster --nodegroup-name $nodegroup --region $AWS_REGION
aws eks wait nodegroup-deleted --cluster-name $cluster --nodegroup-name $nodegroup --region $AWS_REGION
done


# Delete the EKS cluster
echo "Deleting EKS cluster: $cluster"
aws eks delete-cluster --name $cluster --region $AWS_REGION

# Wait for the EKS cluster to be deleted
echo "Waiting for EKS cluster '$cluster' to be deleted..."
aws eks wait cluster-deleted --name $cluster --region $AWS_REGION

done

echo "Script execution completed."

0 comments on commit ad9dbb7

Please sign in to comment.