こちらの記事の続きとなります。
前回はSystems Manager-パラメータストアを中身を個別ファイル化するだけでしたが、本記事ではパラメータストアの作成/変更も含む内容になっています。
EC2のCloudWatchエージェント設定をSystems Manager-パラメータストアに置いているのですが、実務で40台分ほどのパラメータストア変更があり、流石に手作業での変更は時間とミス防止から無理でしたので、AWS CLIで実行しました。
時間も短縮できましたし、パラメータストア変更前後の中身をWinMergeで比較表示までCLIで出来たため、かなり楽に作業を実施することが出来ました。
目次
検証環境
- 検証日: 2022/06/19
- 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. 事前準備
1.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
- 例:
1.2. WinMerge のインストール
WinMerge 日本語版のサイトからインストーラをダウンロードしてインストールします。
「WinMerge日本語版のサイト > 64bit版ダウンロード > 画面遷移して自動ダウンロードされる」
1.3 ファイル出力フォルダの作成
ファイル出力するフォルダを作成します。
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.1 テスト用のJSONファイル作成
# パラメータストア名、「a-zA-Z0-9_.-」を利用可能。 ${param_name} = "Test-param_01" ${parama_version} = "v1" # インデントをTABにしたいのですが、ヒアドキュメントはTABを削除してしまうため、TABを「`t」にして出力しています。 ${json_content} = @" { `t"Version": "01", `t"Content": [ `t`t{ `t`t`t"Key1": "Vlaue1", `t`t`t"Key2": "Vlaue2" `t`t} `t] } "@ Write-Output ${json_content} | Out-File -Encoding ascii ${LogDir}\${param_name}_${parama_version}.json
2.2 パラメータストアの作成
${profile} = "aws_RW" aws ssm put-parameter ` --profile ${profile} ` --description "Test Parametor Store." ` --name "${param_name}" ` --type "String" ` --value file://${LogDir}\${param_name}_${parama_version}.json ` --tags "Key=Name,Value=${param_name}" ` "Key=Env,Value=Test"
2.3 作成したパラメータストアの中身をJSONファイルで出力する
パラメータストアの中身のみを個別にテキストファイル化(JSON)します。
ファイル名はパラメータストア名です。
AWSCLIで中身を書き出すと、改行やTAB等が正規表現でテキスト化されてしまうため、「jq -r」を使用して正規表現から戻します。
中身に日本語が無いことを想定していますが、日本語を含む場合は文字コードの調整が必要です。
- 日本語無し(今回):
Out-File -Encoding ascii
- shift-jis:
Out-File -Encoding default
- utf-8(BOM付き):
Out-File -Encoding utf8
${param_create} = "${LogDir}\${param_name}_1-create.json" aws ssm get-parameter --name ${param_name} --output json ` | jq -r .Parameter.Value ` | Out-File -Encoding ascii ${param_create}
3. パラメータストアの変更
3.1 変更用のJSONファイル作成
# 既存パラメータストア名を指定。Versionはv2。 ${param_name} = "Test-param_01" ${parama_version} = "v2" # インデントをTABにしたいのですが、ヒアドキュメントはTABを削除してしまうため、TABを「`t」にして出力しています。 ${json_content} = @" { `t"Version": "02", `t"Content": [ `t`t{ `t`t`t"Key1": "Vlaue1", `t`t`t"Key2": "Vlaue2", `t`t`t"Key3": "Vlaue3" `t`t} `t] } "@ Write-Output ${json_content} | Out-File -Encoding ascii ${LogDir}\${param_name}_${parama_version}.json
3.2 パラメータストアの変更
${profile} = "aws_RW" # 上書きはオプション「--overwrite」が必要。 # 変更するオプションを記載する。今回は中身のみ変えるので「--value」を記載。 aws ssm put-parameter ` --profile ${profile} ` --name "${param_name}" ` --overwrite ` --value file://${LogDir}\${param_name}_${parama_version}.json
3.3 変更したパラメータストアの中身をJSONファイルで出力する
${param_after} = "${LogDir}\${param_name}_2-after.json" aws ssm get-parameter --name ${param_name} --output json ` | jq -r .Parameter.Value ` | Out-File -Encoding ascii ${param_after}
4. WinMergeで作成時と変更後のJSONファイルを比較する
これまでの手順で作成時と変更後で、パラメータストアのJSONファイルを出力していますので、これらの比較確認をWinMergeで行います。
${param_create}
= 出力ファイル名:Test-param_01_1-create.json
${param_after}
= 出力ファイル名:Test-param_01_2-after.json
# JSONファイルの変数はこれまでの手順で入ってます。 # WinMerge.exe のフルパスを指定。 # インストール型はこのままでOK、ポータブル型は環境に合わせて修正。 ${winmerge_exe} = "C:\Program Files\WinMerge\WinMergeU.exe" # JSONファイルを指定してGUIのWinMergeを開きます。 # 左ペインが作成時、右ペインが変更後。 Start-Process ` -FilePath "${winmerge_exe}" ` -ArgumentList "/wl /wr `"${param_create}`" `"${param_after}`""
GUIのWinMergeが開いて、差分を表示します。