ぶろとよ

ネットワーク系クラウドエンジニア(AWS)の技術ブログ。自動化に興味があるためAWS CLIを勉強&アウトプット中。

AWS CLI: パラメータストアの中身だけを抜き出して個別ファイル化する

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ポートフォワーディング用

注意事項

  • 本記事の内容はWindows PowerShellで検証しています。
  • AWS CLIはバージョン2を使用しています。
    • 本記事のコマンド出力でYAMLを使用してますが、これはバージョン2の機能です。
  • コマンド内の変数やパラメータやは検証で使用したものを記載しています。ご自身の環境に合わせ、書き換えて使用してください。
  • 個人で検証しているため実行結果に責任は持てません。必ずご自身でも検証してから使用してください。


1. jq のインストール

AWSCLIでパラメータストアの中身を書き出すと、改行やTAB等が正規表現でテキスト化されてしまうため、「jq -r」を使用して正規表現から戻します。そのためjqが必要。
公式サイトからexeファイルを落として、リネーム後にPATHが通っているフォルダへ格納すれば使えます。

  1. 公式サイトからWindows用のexeファイルをDownloadする
    • https://stedolan.github.io/jq/
      • 「Download jq 1.6」 > 「Windows(64bit)」の順にクリック
      • ファイル「jq-win64.exe」がDownloadフォルダに格納される
  2. Downloadしたファイルのリネーム
    • 「jq-win64.exe」 > 「jq.exe」
  3. 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