# 1 점검 Write-Host "πŸ” [톡합 점검] AWS λ¦¬μ†ŒμŠ€ μƒνƒœ 확인 μ‹œμž‘" -ForegroundColor Cyan Write-Host "===============================================" # 1. κΈ€λ‘œλ²Œ μ„œλΉ„μŠ€ 점검 (S3, IAM λ“±) Write-Host "`n🌐 Global Services (전체 곡톡)" -ForegroundColor Yellow Write-Host "-----------------------------------------------" # S3 버킷 확인 $s3 = aws s3 ls if ($s3) { Write-Host "⚠ S3 Buckets 발견:" -ForegroundColor Magenta $s3 } else { Write-Host "βœ… S3 버킷 μ—†μŒ" } # IAM μ‚¬μš©μž 확인 [cite: 4] $users = aws iam list-users --query "Users[].UserName" --output text if ($users) { Write-Host "⚠ IAM Users: $users" -ForegroundColor Magenta } # Route53 ν˜ΈμŠ€νŒ… μ‘΄ 확인 [cite: 4] $zones = aws route53 list-hosted-zones --query "HostedZones[].Name" --output text if ($zones) { Write-Host "⚠ Route53 Zones: $zones" -ForegroundColor Magenta } # 2. 리전별 λ¦¬μ†ŒμŠ€ 점검 $regions = (aws ec2 describe-regions --query "Regions[].RegionName" --output text).Split("`t") foreach ($region in $regions) { Write-Host "`nπŸ“ Region: $region" -ForegroundColor Yellow # EC2 μΈμŠ€ν„΄μŠ€ $ec2 = aws ec2 describe-instances --region $region --query "Reservations[].Instances[].InstanceId" --output text if ($ec2) { Write-Host " ⚠ EC2 Instances: $ec2" } # μ‚¬μš© κ°€λŠ₯ν•œ(μ—°κ²°λ˜μ§€ μ•Šμ€) EBS λ³Όλ₯¨ $ebs = aws ec2 describe-volumes --region $region --query "Volumes[?State=='available'].VolumeId" --output text if ($ebs) { Write-Host " 🚨 λ―Έμ‚¬μš© EBS (과금): $ebs" -ForegroundColor Red } # Elastic IP (EIP) $eip = aws ec2 describe-addresses --region $region --query "Addresses[].PublicIp" --output text if ($eip) { Write-Host " ⚠ Elastic IPs: $eip" } # NAT Gateway $nat = aws ec2 describe-nat-gateways --region $region --query "NatGateways[?State=='available'].NatGatewayId" --output text if ($nat) { Write-Host " 🚨 NAT Gateway (고과금): $nat" -ForegroundColor Red } # RDS μΈμŠ€ν„΄μŠ€ [cite: 2, 3] $rds = aws rds describe-db-instances --region $region --query "DBInstances[].DBInstanceIdentifier" --output text if ($rds) { Write-Host " ⚠ RDS Instances: $rds" } # Lambda ν•¨μˆ˜ [cite: 12] $lambda = aws lambda list-functions --region $region --query "Functions[].FunctionName" --output text if ($lambda) { Write-Host " ⚠ Lambda Functions: $lambda" } } Write-Host "`n===============================================" Write-Host "βœ… λͺ¨λ“  리전 점검이 μ™„λ£Œλ˜μ—ˆμŠ΅λ‹ˆλ‹€." -ForegroundColor Green # 2. μ‚­μ œ Write-Host "🚨 [μœ„ν—˜] AWS μ „ 리전 톡합 λ¦¬μ†ŒμŠ€ μžλ™ μ‚­μ œ μ‹œμž‘" -ForegroundColor Red Write-Host "였λ₯˜ λ°©μ§€ 둜직이 적용된 λ²„μ „μž…λ‹ˆλ‹€." -ForegroundColor Yellow $confirm = Read-Host "정말 μ‹€ν–‰ν•˜λ €λ©΄ 'YES'λ₯Ό μž…λ ₯ν•˜μ„Έμš”" if ($confirm -ne "YES") { Write-Host "❌ μ·¨μ†Œλ˜μ—ˆμŠ΅λ‹ˆλ‹€." -ForegroundColor Green exit } # 1. κΈ€λ‘œλ²Œ λ¦¬μ†ŒμŠ€ μ‚­μ œ (S3) Write-Host "`nπŸ—‘οΈ [Global] S3 Buckets μ‚­μ œ μ‹œμž‘..." -ForegroundColor Magenta $s3Raw = aws s3api list-buckets --query "Buckets[].Name" --output text if ($null -ne $s3Raw -and $s3Raw -ne "") { $buckets = $s3Raw.Split("`t") foreach ($bucket in $buckets) { if ($bucket) { Write-Host " - Bucket κ°•μ œ μ‚­μ œ: $bucket" -ForegroundColor Cyan aws s3 rb "s3://$bucket" --force } } } # 2. μ „ 리전 탐색 및 μ‚­μ œ μ‹œμž‘ $regionsRaw = aws ec2 describe-regions --query "Regions[].RegionName" --output text if ($null -eq $regionsRaw -or $regionsRaw -eq "") { Write-Host "❌ 리전 λͺ©λ‘μ„ κ°€μ Έμ˜¬ 수 μ—†μŠ΅λ‹ˆλ‹€." -ForegroundColor Red exit } $regions = $regionsRaw.Split("`t") foreach ($region in $regions) { $region = $region.Trim() if (-not $region) { continue } Write-Host "`nπŸ”₯ Region: [$region] μ‚­μ œ μž‘μ—… μ‹œμž‘" -ForegroundColor Magenta Write-Host "-------------------------------------------" # --- [ASG μ‚­μ œ] --- $asgRaw = aws autoscaling describe-auto-scaling-groups --region $region --query "AutoScalingGroups[].AutoScalingGroupName" --output text if ($null -ne $asgRaw -and $asgRaw -ne "") { foreach ($asg in $asgRaw.Split("`t")) { Write-Host " - Deleting ASG: $asg" aws autoscaling update-auto-scaling-group --region $region --auto-scaling-group-name $asg --min-size 0 --max-size 0 --desired-capacity 0 aws autoscaling delete-auto-scaling-group --region $region --auto-scaling-group-name $asg --force-delete } } # --- [EC2 μ’…λ£Œ] --- $ec2Raw = aws ec2 describe-instances --region $region --query "Reservations[].Instances[].InstanceId" --output text if ($null -ne $ec2Raw -and $ec2Raw -ne "") { Write-Host " - Terminating EC2: $ec2Raw" aws ec2 terminate-instances --region $region --instance-ids ($ec2Raw.Split("`t")) } # --- [RDS μ‚­μ œ] --- $rdsRaw = aws rds describe-db-instances --region $region --query "DBInstances[].DBInstanceIdentifier" --output text if ($null -ne $rdsRaw -and $rdsRaw -ne "") { foreach ($db in $rdsRaw.Split("`t")) { Write-Host " - Deleting RDS: $db" aws rds delete-db-instance --region $region --db-instance-identifier $db --skip-final-snapshot --delete-automated-backups } } # --- [NAS (EFS/FSx) μ‚­μ œ] --- $efsRaw = aws efs describe-file-systems --region $region --query "FileSystems[].FileSystemId" --output text if ($null -ne $efsRaw -and $efsRaw -ne "") { foreach ($fsId in $efsRaw.Split("`t")) { $mtRaw = aws efs describe-mount-targets --region $region --file-system-id $fsId --query "MountTargets[].MountTargetId" --output text if ($null -ne $mtRaw -and $mtRaw -ne "") { foreach ($mt in $mtRaw.Split("`t")) { aws efs delete-mount-target --region $region --mount-target-id $mt } } Start-Sleep -Seconds 2 aws efs delete-file-system --region $region --file-system-id $fsId } } # --- [NAT Gateway μ‚­μ œ] --- $natRaw = aws ec2 describe-nat-gateways --region $region --query "NatGateways[?State=='available'].NatGatewayId" --output text if ($null -ne $natRaw -and $natRaw -ne "") { foreach ($nat in $natRaw.Split("`t")) { Write-Host " - Deleting NAT Gateway: $nat" aws ec2 delete-nat-gateway --region $region --nat-gateway-id $nat } } # --- [Elastic IP ν•΄μ œ] --- $eipRaw = aws ec2 describe-addresses --region $region --query "Addresses[].AllocationId" --output text if ($null -ne $eipRaw -and $eipRaw -ne "") { foreach ($eip in $eipRaw.Split("`t")) { Write-Host " - Releasing EIP: $eip" aws ec2 release-address --region $region --allocation-id $eip } } } Write-Host "`n=================================" Write-Host "βœ… λͺ¨λ“  리전 점검 및 μ‚­μ œ λͺ…λ Ή μ™„λ£Œ" -ForegroundColor Green