この記事でやったこと
- 全EC2インスタンスのIDを変数へ格納する。
- 変数(リスト)内の区切り文字が空白なのを、改行区切りにする。
- PowerShell For文でインスタンス毎にテキスト出力する。
- 以下のコマンド結果を1つのファイルへ出力する。
aws ec2 describeinstances
aws ec2 describevolumes (複数あることを考慮してFor文利用 )
aws ec2 describenetworkinterfaces (複数あることを考慮してFor文利用 )
aws ec2 describesecuritygroups (複数あることを考慮してFor文利用 )
aws ec2 describeimages
- 以下のコマンド結果を1つのファイルへ出力する。
目次
検証環境
- 検証日: 2021/10/30
- 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. 全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
aws ec2 describevolumes (複数あることを考慮してFor文利用 )
aws ec2 describenetworkinterfaces (複数あることを考慮してFor文利用 )
aws ec2 describesecuritygroups (複数あることを考慮してFor文利用 )
aws ec2 describeimages
ファイル名には「EC2インスタンスNameタグ」を含めてファイル出力します。
※拡張子はyml
にしていますが、JSON利用時はjson
へ修正してください。
20211030-091354_EC2インスタンスNameタグ_ec2-setting-information.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 Write-Output "# --- aws ec2 describe-instances ------" ` | Out-File -Encoding ascii ${work_dir}\${datetime}_${ec2_name}_ec2-setting-information.yml aws ec2 describe-instances ` --instance-ids ${instances} ` | Out-File -Append -Encoding ascii ${work_dir}\${datetime}_${ec2_name}_ec2-setting-information.yml # EBS, volume, For文利用(複数Attach考慮) Write-Output "# --- aws ec2 describe-volumes ------" ` | Out-File -Append -Encoding ascii ${work_dir}\${datetime}_${ec2_name}_ec2-setting-information.yml ${volume_id} = aws ec2 describe-instances ` --instance-ids ${instances} ` --query "Reservations[].Instances[].BlockDeviceMappings[].Ebs[].VolumeId" ` --output text ${volume_id_split} = -split ${volume_id} foreach (${volume} in ${volume_id_split}) { aws ec2 describe-volumes ` --volume-ids ${volume} ` | Out-File -Append -Encoding ascii ${work_dir}\${datetime}_${ec2_name}_ec2-setting-information.yml } # ENI, Elastic Network Interfaces, For文利用(複数Attach考慮) Write-Output "# --- aws ec2 describe-network-interfaces ------" ` | Out-File -Append -Encoding ascii ${work_dir}\${datetime}_${ec2_name}_ec2-setting-information.yml ${interface_id} = aws ec2 describe-instances ` --instance-ids ${instances} ` --query "Reservations[].Instances[].NetworkInterfaces[].NetworkInterfaceId" ` --output text ${interface_id_split} = -split ${interface_id} foreach (${interface} in ${interface_id_split}) { aws ec2 describe-network-interfaces ` --network-interface-ids ${interface} ` | Out-File -Append -Encoding ascii ${work_dir}\${datetime}_${ec2_name}_ec2-setting-information.yml } # SGR, SecurityGroup, For文利用(複数Attach考慮) Write-Output "# --- aws ec2 describe-security-groups ------" ` | Out-File -Append -Encoding ascii ${work_dir}\${datetime}_${ec2_name}_ec2-setting-information.yml ${sgr_id} = aws ec2 describe-instances ` --instance-ids ${instances} ` --query "Reservations[].Instances[].SecurityGroups[].GroupId" ` --output text ${sgr_id_split} = -split ${sgr_id} foreach (${sgr} in ${sgr_id_split}) { aws ec2 describe-security-groups ` --group-ids ${sgr} ` | Out-File -Append -Encoding ascii ${work_dir}\${datetime}_${ec2_name}_ec2-setting-information.yml } # AMI, Amazon Machine Image, 単一のためFor文無し Write-Output "# --- aws ec2 describe-images ------" ` | Out-File -Append -Encoding ascii ${work_dir}\${datetime}_${ec2_name}_ec2-setting-information.yml ${image_id} = aws ec2 describe-instances ` --instance-ids ${instances} ` --query "Reservations[].Instances[].ImageId" ` --output text aws ec2 describe-images ` --image-ids ${image_id} ` | Out-File -Append -Encoding ascii ${work_dir}\${datetime}_${ec2_name}_ec2-setting-information.yml }