概要
AWS SDK for .NET を使用して EC2 インスタンスの一覧を取得する。
.NetCore 向けの部分ではまった点も有ったので備忘のために作成。
検証環境
OS: amazon linux2(ami-0c3fd0f5d33134a76)
スペック: t2.micro
言語: C#
フレームワーク: .Net Core 2.2
手順
事前準備
- EC2 割り当て用のロール作成。権限は"AmazonEC2ReadOnlyAccess"をつける。
- EC2 インスタンスをaws上に1台立てる。とりあえず ssh で繋げられればOK。前述で作成したロールを割り当てておく。
- .Net Core インストール
$ sudo rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm
$ sudo yum update -y
$ sudo yum install -y dotnet-sdk-2.2
- Project の作成
$ dotnet new console -o aws_sdk
$ ls
aws_sdk
$ cd aws_sdk
$ dotnet run
Hello World!
- AWSSDK アセンブリのインストール
$ pwd
/home/ec2-user/aws_sdk
$ dotnet add package AWSSDK.EC2 --version 3.3.118.3
参考URL: https://www.nuget.org/packages/AWSSDK.EC2/
プログラムの作成と実行
- Program.csの編集
using System;
using System.Collections.Generic;
using Amazon;
using Amazon.EC2;
using Amazon.EC2.Model;
namespace aws_sdk
{
class Program
{
static void Main(string[] args)
{
var ec2Client = new AmazonEC2Client(RegionEndpoint.APNortheast1);
var request = new DescribeInstancesRequest
{
Filters = new List<Filter> {
new Filter {
Name = "instance-type",
Values = new List<string> {
"t2.micro"
}
}
}
};
List<Reservation> response = ec2Client.DescribeInstancesAsync(request).Result.Reservations;
foreach (Reservation reservation in response)
{
foreach (Instance instance in reservation.Instances)
{
Console.WriteLine(instance.InstanceId);
Console.WriteLine(instance.State.Name);
Console.WriteLine(instance.PrivateIpAddress);
}
}
}
}
}
参考URL: https://docs.aws.amazon.com/sdkfornet/latest/apidocs/
- プログラムの実行
$ dotnet run
i-00c6d881e4fa13468
running
192.168.0.116
終わりに
AWS Document にあるコード例を参考に DescribeInstances を実行しようとして何度もエラーになってはまった...。.NET Core は非同期の呼び出しパターンのみをサポートするって書いてあったのに気付かず...。ドキュメント見逃しパターンって一生治らん気がするわ。まあ、何となく .NET SDK の使い方はわかったから良しとする。