[Home-K8S] #22 FluxCD 계층과 분리 / 다중 클러스터 리소스 공유와 설정 분리
FluxCD - yaml 앞서 fluxcd 를 이용해서 helm chart 를 구성했습니다. 그 외에 일반적인 yaml
AWS 의 전체 리소스를 한번에 볼 수 있는 리소스 탐색기가 최근에 나왔지만,
해당 계정만 보이고 전체 계정에서 확인할 수는 없습니다.
연동 가능한 서비스가 있긴 하지만, 급한 상황이거나 필요한 리소스만 뽑을 때 사용하려고 코드로 작성했습니다.
AWS 액세스 포털에 들어갑니다. 권한이 있는 AWS 계정에서 권한에 맞게 "액세스 키" 를 선택합니다.


aws cli 의 config 를 설정해 줍니다. 위의 SSO 값의 url, region 을 가져와서 sso-session 으로 적용합니다.
[sso-session my-sso] # sso-sessin 이름 설정
sso_region = ap-northeast-2
sso_start_url = https://{sso 시작 URL}.awsapps.com/start/#
[default]
region = ap-northeast-2
output = json같은 config 파일 아래에 사용할 계정들을 추가해 줍니다.
[profile AWS-Account-1] # Account 이름 설정
sso_session = my-sso # 설정한 이름
sso_account_id = 182733843958 # aws 계정 id
sso_role_name = AWSAdministratorAccess # 해당 Role
region = ap-northeast-2
output = json
[profile AWSAccount2]
sso_session = my-sso
sso_account_id = 958493384934
sso_role_name = AWSAdministratorAccess
region = ap-northeast-2
output = json완성된 config 를 aws 의 config 로 넣어줍니다.
(기본 위치: C:\Users\(사용자)\.aws\config)
config 가 설정이 되었으면 로그인을 수행합니다.
aws configure sso
설정한 sso session name 을 입력하면 자동으로 브라우저가 열리며 로그인 할 수 있습니다.

필요한 리소스들을 추출하면 됩니다. AWS 명령어 사용 시에 "--profile" 옵션으로 계정을 정해서 가져오면 되므로, account list 를 설정하고 순환해주면 됩니다.
$accountlist = "AWS-Account-1","AWSAccount2", ...
$ec2Results = @()
$eksResults = @()
$ecsResults = @()
$rdsResults = @()
foreach ($account in $accountlist) {
Write-Host "Processing Account: $account" -ForegroundColor Green
# EC2 기본 정보 (Tags 제외)
$ec2s = aws ec2 describe-instances --profile $account --query "Reservations[*].Instances[0].{InstanceId:InstanceId,State:State.Name,InstanceType:InstanceType,VpcId:VpcId,SubnetId:SubnetId,PrivateIpAddress:PrivateIpAddress,LaunchTime:LaunchTime,PlatformDetails:PlatformDetails}" --output json | ConvertFrom-Json
foreach ($ec2 in $ec2s) {
$ec2Results += [PSCustomObject]@{
Account = $account
InstanceId = $ec2.InstanceId
State = $ec2.State
InstanceType = $ec2.InstanceType
PlatformDetails = $ec2.PlatformDetails
}
}
$ekss = $(aws eks list-clusters --profile $account --output json | ConvertFrom-Json).clusters
foreach ($eks in $ekss) {
$eks = $(aws eks describe-cluster --name $eks --profile $account --output json | ConvertFrom-Json).cluster
$eksResults += [PSCustomObject]@{
Account = $account
ClusterName = $eks.name
Version = $eks.version
}
}
$ecss = $(aws ecs list-clusters --profile $account --output json | ConvertFrom-Json).clusterArns
foreach ($ecs in $ecss) {
$ecs = $(aws ecs describe-clusters --clusters $ecs --include STATISTICS TAGS --profile $account --output json | ConvertFrom-Json).clusters
$ecsResults += [PSCustomObject]@{
Account = $account
clusterName = $ecs.clusterName
runningTasksCount = $ecs.runningTasksCount
}
}
$rdss = $(aws rds describe-db-instances --profile $account --output json | ConvertFrom-Json).DBInstances
foreach ($rds in $rdss) {
$rdsResults += [PSCustomObject]@{
Account = $account
DBInstanceIdentifier = $rds.DBInstanceIdentifier
Engine = $rds.Engine
EngineVersion = $rds.EngineVersion
DBInstanceClass = $rds.DBInstanceClass
AllocatedStorage = "$($rds.AllocatedStorage)GB"
StorageType = $rds.StorageType
InstanceCreateTime = $rds.InstanceCreateTime
}
}
}
Write-Host "`nCSV 파일로 저장 중..." -ForegroundColor Cyan
$dateStamp = Get-Date -Format 'yyyyMMdd'
$ec2Results | Export-Csv -Path "D:\aws_ec2_instances_$($dateStamp).csv" -NoTypeInformation -Encoding UTF8
$eksResults | Export-Csv -Path "D:\aws_eks_clusters_$($dateStamp).csv" -NoTypeInformation -Encoding UTF8
$ecsResults | Export-Csv -Path "D:\aws_ecs_clusters_$($dateStamp).csv" -NoTypeInformation -Encoding UTF8
$rdsResults | Export-Csv -Path "D:\aws_rds_instances_$($dateStamp).csv" -NoTypeInformation -Encoding UTF8
Write-Host "✅ 모든 리소스 정보가 CSV 파일로 저장되었습니다." -ForegroundColor Green
Comments