AWS SDK for .NET を使用して各リージョンの VPC 情報を取得してみた

AWS のマネージメントコンソールから各リージョンの情報を確認するには、右上のリージョンを選択しなおす必要があって面倒です。最近では、EC2 Global View で各リージョンの VPC 数が見えたりしますが、少し物足りません。リージョンをまたがってリソース状況を調べるなら AWS CLI を組み合わせてやる方法もあります。
そこで今回は、AWS SDK for .NET を使用して各リージョンの VPC 情報の取得を試してみました。

EC2 Global View の例

.NET コンソールアプリを作成

$ appname=mnrawsdev

$ dotnet new console --output $appname --framework net6.0 --use-program-main

$ cd $appname

$ code Program.cs

$ dotnet run
Hello, World!

.NET に AWSSDK.EC2 パッケージを追加

$ dotnet add package AWSSDK.EC2

Program.cs を下記ようなコードに変更

using System;
using System.Threading.Tasks;
using Amazon;
using Amazon.EC2;
using Amazon.EC2.Model;

namespace mnrawsdev;
class Program
{
    static async Task Main(string[] args)
    {
        Console.WriteLine("Hello, World!");

        var ec2Client = new AmazonEC2Client();
        DescribeRegionsResponse describeRegionsResponse = await ec2Client.DescribeRegionsAsync();
        foreach (var region in describeRegionsResponse.Regions)
        {
            Console.WriteLine($"{region.RegionName}: {region.Endpoint}: {region.OptInStatus}");
            await DescribeVpcs(region.RegionName);
        }
    }

    static async Task DescribeVpcs(string region)
    {
        var newRegion = RegionEndpoint.GetBySystemName(region);
        var ec2Client = new AmazonEC2Client(newRegion);
        DescribeVpcsResponse describeVpcsResponse = await ec2Client.DescribeVpcsAsync();
        foreach (var vpc in describeVpcsResponse.Vpcs)
        {
            Console.WriteLine($" -> {vpc.VpcId}: {vpc.CidrBlock}: IsDefault={vpc.IsDefault}");
        }
    }
}

動作確認

$ dotnet run
Hello, World!
ap-south-1: ec2.ap-south-1.amazonaws.com: opt-in-not-required
 -> vpc-0ce526b9cf1a42a60: 172.31.0.0/16: IsDefault=True
eu-north-1: ec2.eu-north-1.amazonaws.com: opt-in-not-required
 -> vpc-0c7e0d4ef134dafce: 172.31.0.0/16: IsDefault=True
eu-west-3: ec2.eu-west-3.amazonaws.com: opt-in-not-required
 -> vpc-019dd14abc436c714: 172.31.0.0/16: IsDefault=True
eu-west-2: ec2.eu-west-2.amazonaws.com: opt-in-not-required
 -> vpc-00598c45c7027b677: 172.31.0.0/16: IsDefault=True
eu-west-1: ec2.eu-west-1.amazonaws.com: opt-in-not-required
 -> vpc-04a437b798a48d739: 172.31.0.0/16: IsDefault=True
ap-northeast-3: ec2.ap-northeast-3.amazonaws.com: opt-in-not-required
 -> vpc-08f528ccae8cea775: 172.31.0.0/16: IsDefault=True
ap-northeast-2: ec2.ap-northeast-2.amazonaws.com: opt-in-not-required
 -> vpc-017618237beba3920: 172.31.0.0/16: IsDefault=True
ap-northeast-1: ec2.ap-northeast-1.amazonaws.com: opt-in-not-required
ca-central-1: ec2.ca-central-1.amazonaws.com: opt-in-not-required
 -> vpc-0161ade2c2124034c: 172.31.0.0/16: IsDefault=True
sa-east-1: ec2.sa-east-1.amazonaws.com: opt-in-not-required
 -> vpc-04c2c5088c2151de6: 172.31.0.0/16: IsDefault=True
ap-east-1: ec2.ap-east-1.amazonaws.com: opted-in
 -> vpc-0906d47710b8f6721: 172.31.0.0/16: IsDefault=True
ap-southeast-1: ec2.ap-southeast-1.amazonaws.com: opt-in-not-required
 -> vpc-070302e54c13fd364: 172.31.0.0/16: IsDefault=True
ap-southeast-2: ec2.ap-southeast-2.amazonaws.com: opt-in-not-required
 -> vpc-0ff6aae36a229ac3f: 172.31.0.0/16: IsDefault=True
eu-central-1: ec2.eu-central-1.amazonaws.com: opt-in-not-required
 -> vpc-0eb091b4662c234a1: 172.31.0.0/16: IsDefault=True
us-east-1: ec2.us-east-1.amazonaws.com: opt-in-not-required
 -> vpc-0538ca2212aa6e428: 172.31.0.0/16: IsDefault=True
us-east-2: ec2.us-east-2.amazonaws.com: opt-in-not-required
 -> vpc-041551da06dcd9e92: 172.31.0.0/16: IsDefault=True
us-west-1: ec2.us-west-1.amazonaws.com: opt-in-not-required
 -> vpc-0be4cce199fe0b3b9: 172.31.0.0/16: IsDefault=True
us-west-2: ec2.us-west-2.amazonaws.com: opt-in-not-required
 -> vpc-0423af0b6eb4d6055: 172.31.0.0/16: IsDefault=True

参考

https://learn.microsoft.com/ja-jp/dotnet/core/tutorials/with-visual-studio-code?pivots=dotnet-6-0

https://learn.microsoft.com/ja-jp/dotnet/core/tools/dotnet-new

https://docs.aws.amazon.com/ja_jp/sdk-for-net/v3/developer-guide/welcome.html

https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/EC2/TEC2Client.html

タグ: , ,