ぶろとよ

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

AWS CLI:PowerShellのFor文で、EC2設定をインスタンス毎にテキスト出力する。

この記事でやったこと

  • 全EC2インスタンスのIDを変数へ格納する。
  • 変数(リスト)内の区切り文字が空白なのを、改行区切りにする。
  • PowerShell For文でインスタンス毎にテキスト出力する。
    • 以下のコマンド結果を1つのファイルへ出力する。

      aws ec2 describeinstances

目次

検証環境

  • 検証日: 2021/10/28
  • 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. 全EC2インスタンスのIDを変数へ格納する

## 全EC2のIDを変数へ格納
${ec2_id} = aws ec2 describe-instances `
    --query "Reservations[].Instances[].InstanceId" `
    --output text `
    ; ${ec2_id}

## < 出力例 >
i-1234567890AAAAAAA     i-1234567890BBBBBBB     i-1234567890CCCCCCCC


2. 変数内の区切り文字を変更(空白 > 改行)

## 変数内の区切り文字を変更(半角空白 > 改行)
##   [-split]のデフォルトは半角空白を改行へ。その他例: [-split ":"] [-split ","]
${ec2_id_split} = -split ${ec2_id} `
    ; ${ec2_id_split}

## < 出力例 >
i-1234567890AAAAAAA
i-1234567890BBBBBBB
i-1234567890CCCCCCCC


3. For文でインスタンス毎にテキスト出力する

EC2インスタンス毎に以下コマンドの結果を1つのファイルへ出力します。

aws ec2 describeinstances


ファイル名には「EC2インスタンスNameタグ」を含めてファイル出力します。
※拡張子はymlにしていますが、JSON利用時はjsonへ修正してください。

20211028-091354_EC2インスタンスNameタグ_ec2-describe-instances.yml


## 変数設定
##     出力フォルダは ${work_dir} で指定
${datetime} = Get-Date -Format yyyyMMdd-HHmmsss
${work_dir} = "C:\#temp"

## 出力フォルダ ${work_dir} を開く
Invoke-Item ${work_dir}

## For文でインスタンス毎にYAMLファイルを出力
foreach (${instances} in ${ec2_id_split}) {
    # EC2 instances
    ${ec2_name} = aws ec2 describe-instances `
        --instance-ids ${instances} `
        --query "Reservations[].Instances[].Tags[?Key=='Name'].Value" `
        --output text
    aws ec2 describe-instances `
        --instance-ids ${instances} `
    | Out-File -Encoding ascii ${work_dir}\${datetime}_${ec2_name}_ec2-describe-instances.yml
}