73979


EC2の情報をaws
cliでJSON形式に取得してからcsvに変換したいです。具体的には特定のSGを指定して、そのSGがアタッチされたENI、インスタンスID、インスタンスに紐づいているSGすべての情報を抽出したいと考えています。

aws cliはpowershell上で実行しており、実行したコマンド/出力結果は以下記載している内容です。  
得られた出力内の"SyncRoot"内の「NetworkInterfaceId、InstanceId、GroupId」をcsvの列名として値をそれぞれ記載したいと考えています。

得られた結果をConvertTo-Csvにパイプして処理をしたのですが、"SyncRoot"内の要素が出力されず悩んでいます。  
"SyncRoot"内の各要素をどのようにcsvに落とし込めるのか教えてほしいです。

※JSON形式に拘りはなく、情報をcsvに落とし込めればtext形式やyamlでも良いと思っています。

**実行コマンド:**

[code]

    aws ec2 describe-network-interfaces --filter Name=group-id,Values=$SG --query 'NetworkInterfaces[*].[{NetworkInterfaceId:NetworkInterfaceId},{InstanceId:Attachment.InstanceId},{GroupId:Groups[*].GroupId}]' --output json --no-verify | convertfrom-json
    
[/code]

**得られた出力:**

[code]

    Length         : 3
    LongLength     : 3
    Rank           : 1
    SyncRoot       : {@{NetworkInterfaceId=eni-07d6edexxxxxxxxxx}, @{InstanceId=i-00c4ebexxxxxxxxxx}, @{GroupId=System.Object[]}}
    IsReadOnly     : False
    IsFixedSize    : True
    IsSynchronized : False
    Count          : 3
    
[/code]


CC BY-SA 4.0
2021-02-14T03:41:38.600
73977
2021-02-14T06:13:07.337
2021-02-14T06:13:07.337
3060
43959
question
aws powershell aws-cli
EC2の情報をaws cliでJSON形式に取得してからcsvに変換したい


AWS CLIの出力をPowerShell上で処理するくらいなら、[AWS Tools for
PowerShell](https://aws.amazon.com/jp/powershell/)をお勧めします。[`AWS.Tools.EC2`モジュール](https://www.powershellgallery.com/packages/AWS.Tools.EC2/4.1.8.0)が用意されているため

[code]

    Install-Module -Name AWS.Tools.EC2
    
[/code]

でインストールできます。AWS Tools for PowerShell向けの認証情報も設定できますが、フォールバックしてAWS
CLIの設定をそのまま使用することもできます。

`aws ec2 describe-network-interfaces`に相当するのは[`Get-
EC2NetworkInterface`コマンドレット](https://docs.aws.amazon.com/powershell/latest/reference/index.html?page=Get-
EC2NetworkInterface.html&tocid=Get-
EC2NetworkInterface)で、返されるのは[`Amazon.EC2.Model.NetworkInterface`](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/index.html?page=EC2/TNetworkInterface.html&tocid=Amazon_EC2_Model_NetworkInterface)オブジェクト配列となります。

[code]

    aws ec2 describe-network-interfaces `
      --filter Name=group-id,Values=$SG `
      --query 'NetworkInterfaces[*].[{NetworkInterfaceId:NetworkInterfaceId},{InstanceId:Attachment.InstanceId},{GroupId:Groups[*].GroupId}]' `
      --output json --no-verify | convertfrom-json
    
[/code]

に相当し、期待されている処理は

[code]

    Get-EC2NetworkInterface -Filter @{ Name='group-id'; Values=$SG } | ForEach-Object {
      [PSCustomObject]@{
        NetworkInterfaceId=$_.NetworkInterfaceId
        InstanceId=$_.Attachment.InstanceId
        GroupId=$_.Groups.GroupId
      }
    }
    
[/code]

くらいでしょうか。


CC BY-SA 4.0
2021-02-14T05:00:15.587
73979
2021-02-14T05:00:15.587
4236
73977
answer