0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Windows PowerShell と AWS CLI で、すべてのパラメータグループから、指定パラメータの値をすべて取得するメモ

Last updated at Posted at 2023-10-10

はじめに

  • すべてのRDSパラメータグループ対象に、特定のパラメータだけをすべて精査したい
    • 例えばSSL通信を強制しているものがないか等
  • Windows PowerShell と AWS CLI で抽出してみます
  • 愚痴
    • 過去にいた企業内で Mac なんてオサレなマシン提供された未来が見えない
    • jq?勝手に入れられるわけないでしょ?
    • 客も Windows 多いんだし、Word とか画面壊れるの嫌だし、Windows マンセー
    • Linux環境作ればいい?
      • それが出来れば、苦労はしねェ

処理の流れ

1. スタート
2. AWSプロファイルと出力ファイルを読み込む
3. 現在の年月日と時刻を取得
4. 出力ファイル名に年月日と時刻を追加
5. 出力ファイルが既に存在するか確認
   - 5.1. Yes: ユーザーにファイルを削除するか尋ねる
     - 5.1.1. Yes: ファイルを削除
     - 5.1.2. No: スクリプトを終了
   - 5.2. No: 次のステップへ
6. 特定のパラメータKey($targetKeys)を指定
7. CSVヘッダを出力
8. DBパラメータグループとクラスタパラメータグループを対象にループ
   - 8.1. パラメータグループを取得
   - 8.2. 各パラメータグループに対してループ
     - 8.2.1. パラメータグループのパラメータを取得
     - 8.2.2. 各パラメータに対してループ
       - 8.2.2.1. パラメータKeyが$targetKeysに含まれている場合、パラメータグループタイプ、パラメータグループ名、パラメータKey、パラメータValueをCSVに出力
9. スクリプトを終了

スクリプト

# AWSプロファイルと出力ファイルを読み込む
$profile = "AWS_PROFILE名を指定"
$outputFileBase = "出力ファイル名を指定"

# 現在の年月日と時刻をyyyymmddhhmm形式で取得
$date = Get-Date -Format "yyyyMMddHHmm"

# 出力ファイルに年月日と時刻を追加
$outputFile = "$outputFileBase-$date.csv"

# ファイルが既に存在する場合は削除の確認を行う
if (Test-Path $outputFile) {
    $delete = Read-Host "$outputFile already exists. Do you want to delete it? (y/n)"
    if ($delete -eq 'y') {
        Remove-Item $outputFile
    } else {
        Write-Output "Script terminated to avoid overwrite."
        return
    }
}

# 特定のパラメータKeyを複数指定
$targetKeys = 'myParameterKey1', 'myParameterKey2'

# CSVヘッダを出力
Add-Content -Path $outputFile -Value "ParameterGroupType,ParameterGroupName,ParameterKey,ParameterValue"

# DBパラメータグループとクラスタパラメータグループを対象にループ
$groupTypes = @("DB", "Cluster")
$groupTypesCount = $groupTypes.Count
$groupTypeIndex = 1
foreach ($groupType in $groupTypes) {
    Write-Output "$(Get-Date -Format "yyyy/MM/dd HH:mm:ss") Processing group type $groupTypeIndex of $groupTypesCount"
    $parameterGroups = if ($groupType -eq "DB") { 
        aws rds describe-db-parameter-groups --profile $profile | ConvertFrom-Json | Select-Object -Expand DBParameterGroups
    } else { 
        aws rds describe-db-cluster-parameter-groups --profile $profile | ConvertFrom-Json | Select-Object -Expand DBClusterParameterGroups
    }

    $parameterGroupsCount = $parameterGroups.Count
    $parameterGroupIndex = 1
    foreach ($group in $parameterGroups) {
        Write-Output "$(Get-Date -Format "yyyy/MM/dd HH:mm:ss") Processing parameter group $parameterGroupIndex of $parameterGroupsCount"
        $groupName = if ($groupType -eq "DB") { $group.DBParameterGroupName } else { $group.DBClusterParameterGroupName }
        $parameters = if ($groupType -eq "DB") { 
            aws rds describe-db-parameters --db-parameter-group-name $groupName --profile $profile | ConvertFrom-Json | Select-Object -Expand Parameters
        } else { 
            aws rds describe-db-cluster-parameters --db-cluster-parameter-group-name $groupName --profile $profile | ConvertFrom-Json | Select-Object -Expand Parameters
        }

        $parametersCount = $parameters.Count
        $parameterIndex = 1
        foreach ($parameter in $parameters) {
            Write-Output "$(Get-Date -Format "yyyy/MM/dd HH:mm:ss") Processing parameter $parameterIndex of $parametersCount"
            if ($targetKeys -contains $parameter.ParameterName) {
               # JSONからParameterNameとParameterValueを取得し、CSVに出力
               $parameterKey = $parameter.ParameterName
               $parameterValue = $parameter.ParameterValue
               Add-Content -Path $outputFile -Value "$groupType,`"$groupName`",`"$parameterKey`",`"$parameterValue`""
            }
            $parameterIndex++
        }
        $parameterGroupIndex++
    }
    $groupTypeIndex++
}

API 呼び出し回数

  1. DBパラメータグループとクラスタパラメータグループを取得するための2回のAPI呼び出し(aws rds describe-db-parameter-groupsaws rds describe-db-cluster-parameter-groups)。
  2. それぞれのパラメータグループに対して一つのAPI呼び出し(aws rds describe-db-parametersまたはaws rds describe-db-cluster-parameters)。パラメータグループの数は動的であり、その数がAPI呼び出しの回数を決定する。
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?