In AWS, under the EC2 instances view, you can customize the details you want to see about your EC2 instances, however once you do that there is no way of generating a CSV based EC2 instance report using the AWS UI. Plus you don’t have the option of displaying properties such as the VPC or Subnet name – which is a little annoying as working with long ids can get difficult. To make the reporting process a little easier, I put together the script below – which generates a CSV based report.
NOTE – The resulting CSV report is extremely detailed – you can simply remove properties you feel are unnecessary for your reporting purposes.
Before you can run this script install the AWS PowerShell Modules.
 Install-Module -Name AWSPowerShell
Then I would recommend creating an access key profile in the SDK store – by running the following in PowerShell.
Set-AWSCredentials -AccessKey AccessKey -SecretKey SecretKey -StoreAs ProfileName
And to make things easier maybe associate a region with that profile.
Initialize-AWSDefaultConfiguration -ProfileName ProfileName -Region eu-central-1
Report script:
$ec2 = Get-EC2Instance -ProfileName $StoredAWSCredentials
$ec2list = $ec2.Instances
$ec2listdetails = $ec2list | ForEach-Object {
    $properties = [ordered]@{
    Name = ($_ | Select-Object -ExpandProperty tags | Where-Object -Property Key -eq Name).value
    InstanceState = $_.State.Name
    InstanceID = $_.InstanceId
    InstanceType = $_.InstanceType
    Platform = $_.Platform
    LaunchTime = $_.launchtime
    KeyName = $_.KeyName
    AmiID = $_.ImageID
    ImageName = (Get-EC2Image -ImageId $_.ImageID).Name
    PrivateIP = $_.PrivateIpAddress
    SubnetId = $_.SubnetId
    SubnetName = (Get-EC2Subnet -subnetid ($_.SubnetId) | Select-Object -ExpandProperty tags | 
    Where-Object -Property Key -eq Name).value
    NetworkInterfaceId = $_.networkinterfaces.networkinterfaceid
    MAC = $_.networkinterfaces.MacAddress
    VPCId = $_.VpcId
    VPCName = (Get-EC2VPC -vpcid ($_.vpcId) | Select-Object -ExpandProperty tags | Where-Object - 
    Property Key -eq Name).value
    AZ = $_.placement.AvailabilityZone
    SG = $_.SecurityGroups.GroupName
    BackupTag = ($_ | Select-Object -ExpandProperty tags | Where-Object -Property Key -eq 
    BackupTag).value
    }
    New-Object -TypeName PSObject -Property $properties
}
$ec2listdetails | Sort-Object -Property SubnetName | Export-Csv -Path c:\temp\ec2-report.csv
DUDE! Thanks for this. Had been trying to figure out how to use describe Get-EC2Instanceattribute and this gives me all the info I need. Had no idea that I could just use get-ec2instance. Appreciate it a ton!