EC2のCloudWatchエージェント設定をSystems Manager-パラメータストアに置いているのですが、40台分ほど本文のみを抜き出す作業が発生・・・。
手入力は辛かったのでAWSCLIで実施しました。これはその時の備忘メモです。
やったこと
- パラメータストアの中身(本文)を個別にテキストファイルとして出力
- 出力フォルダの作成
- パラメータスト名でテキストファイル出力
目次
検証環境
- 検証日: 2022/05/02
- PC環境:
- Windows10 Home Ver21H1
- PowerShell: Ver7.1.5
- AWS CLI:
aws-cli/2.1.34 Python/3.8.8 Windows/10 exe/AMD64 prompt/off
-- profile default
: 読み取り専用-- profile aws_RW
: 書き込み権限あり- ※ 誤操作防止のため、変更操作時のみ
-- profile
オプション付与。
- ※ 誤操作防止のため、変更操作時のみ
-- profile aws_PF
: SystemsManagerポートフォワーディング用
- Windows10 Home Ver21H1
注意事項
- 本記事の内容は
Windows PowerShell
で検証しています。 - AWS CLIは
バージョン2
を使用しています。- 本記事のコマンド出力で
YAML
を使用してますが、これはバージョン2の機能です。
- 本記事のコマンド出力で
- コマンド内の変数やパラメータやは検証で使用したものを記載しています。ご自身の環境に合わせ、書き換えて使用してください。
- 個人で検証しているため実行結果に責任は持てません。必ずご自身でも検証してから使用してください。
1. jq のインストール
AWSCLIでパラメータストアの中身を書き出すと、改行やTAB等が正規表現でテキスト化されてしまうため、「jq -r」を使用して正規表現から戻します。そのためjqが必要。
公式サイトからexeファイルを落として、リネーム後にPATHが通っているフォルダへ格納すれば使えます。
- 公式サイトからWindows用のexeファイルをDownloadする
- https://stedolan.github.io/jq/
- 「Download jq 1.6」 > 「Windows(64bit)」の順にクリック
- ファイル「jq-win64.exe」がDownloadフォルダに格納される
- https://stedolan.github.io/jq/
- Downloadしたファイルのリネーム
- 「jq-win64.exe」 > 「jq.exe」
- PATHが通っているフォルダへ「jq.exe」を格納する
- 例:
C:\Windows
- 例:
2. パラメータストアの中身のJSONファイルを個別テキスト化する
2.1 ファイル出力フォルダの作成
ファイル出力するフォルダを作成します。
C:\#work\AWSCLI\YYYYMMDD-hhmmss\ParameterStore
${LogDir} = "C:\#work\AWSCLI\$(Get-Date -Format yyyyMMdd-HHmmss)" + "\ParameterStore" New-Item "${LogDir}" -type directory -Force ; Invoke-Item "${LogDir}" # ※好きなフォルダを指定する場合は「${LogDir}」の中身を変えます。 # `${LogDir} = "C:\Users\aws"`
2.2 パラメータストア名の一覧を出力する
aws ssm describe-parameters --query Parameters[].Name ## 出力例(パラメータストア名) - Parameter01 - Parameter02 - Parameter03
2.3 変数の指定
「2.2」で出力した内容を元に変数を作成する。
${param_name_01} = "Parameter01" ${param_name_02} = "Parameter02" ${param_name_03} = "Parameter03"
2.4 個別でパラメータストアの中身をJSON出力
パラメータストアの中身のみを個別にテキストファイル化(JSON)します。
ファイル名はパラメータストア名です。
AWSCLIで中身を書き出すと、改行やTAB等が正規表現でテキスト化されてしまうため、「jq -r」を使用して正規表現から戻します。
中身に日本語が無いことを想定していますが、日本語を含む場合は文字コードの調整が必要です。
- 日本語無し(今回):
Out-File -Encoding ascii
- shift-jis:
Out-File -Encoding default
- utf-8(BOM付き):
Out-File -Encoding utf8
${param}=${param_name_01} ; aws ssm get-parameter --name ${param} --output json --query Parameter.Value | jq -r | Out-File -Encoding ascii ${LogDir}\${param}.json ${param}=${param_name_02} ; aws ssm get-parameter --name ${param} --output json --query Parameter.Value | jq -r | Out-File -Encoding ascii ${LogDir}\${param}.json ${param}=${param_name_03} ; aws ssm get-parameter --name ${param} --output json --query Parameter.Value | jq -r | Out-File -Encoding ascii ${LogDir}\${param}.json