EC2:インスタンスの一覧を取得する

1,IAM

---------------------------------------
AWSサービス:Amazon EC2
アクション     :DescribeInstances
Amazonリソースネーム(ARN):*
---------------------------------------

2,プログラム仕様

●入力パラメータ
・IAMユーザの”アクセスキーID”と”・シークレットアクセスキー”
●処理内容
EC2インスタンスを取得して、DataGridViewに表示する
●エラー処理
特になし

3,画面構成

DataGridView1 を配置しています。

4,プログラム

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim _AWSID As String = TextBox1.Text
        Dim _AWSPass As String = TextBox2.Text

        'EC2クライアント作成
        Dim cred As Amazon.Runtime.BasicAWSCredentials
        cred = New Amazon.Runtime.BasicAWSCredentials(_AWSID, _AWSPass)
        Dim ec2client As Amazon.EC2.AmazonEC2Client
        ec2client = New Amazon.EC2.AmazonEC2Client(cred, Amazon.RegionEndpoint.APNortheast1)

        'リクエストオブジェクトを定義
        Dim reQ = New Amazon.EC2.Model.DescribeInstancesRequest
        '特定のインスタンスIDのみを調べたい場合はここでパラメータ設定する
        'reQ.InstanceIds.Add(インスタンスID)

        'レスポンスオブジェクトを定義して、実行。
        Dim Res As Amazon.EC2.Model.DescribeInstancesResponse = ec2client.DescribeInstances(reQ)

        '表示用のデータテーブルを作成する。
        Dim Dt As New Data.DataTable
        Dt.Columns.Add("Instance-ID")
        Dt.Columns.Add("PrivateIP")
        Dt.Columns.Add("Global-IP")
        Dt.Columns.Add("Type")
        Dt.Columns.Add("State-Code")
        Dt.Columns.Add("State-Name")
        Dt.Columns.Add("Name")
        Dt.Columns.Add("SecurityGroup")
        Dt.Columns.Add("SecurityG-ID")

        'データテーブルに取得値を格納する。
        Dim Dr As Data.DataRow
        For Each instance In Res.Reservations
            Dr = Dt.NewRow()

            Dr("Instance-ID") = instance.Instances(0).InstanceId
            Dr("PrivateIP") = instance.Instances(0).PrivateIpAddress
            Dr("Global-IP") = instance.Instances(0).PublicIpAddress
            Dr("Type") = instance.Instances(0).InstanceType
            Dr("State-Code") = instance.Instances(0).State.Code
            Dr("State-Name") = instance.Instances(0).State.Name

            'NameはTagの一種なので、こうやってとります。
            For Each wName In instance.Instances(0).Tags
                If wName.Key = "Name" Then Dr("Name") = wName.Value
            Next

            'セキュリティグループは複数指定ができるので、とりあえず最初の1つだけ。
            If instance.Instances(0).SecurityGroups.Count > 0 Then
                Dr("SecurityGroup") = instance.Instances(0).SecurityGroups(0).GroupName.ToString
                Dr("SecurityG-ID") = instance.Instances(0).SecurityGroups(0).GroupId.ToString
            End If

            '最後にDataRowをDataTableに入れる
            Dt.Rows.Add(Dr)
        Next

        '画面表示する。
        DataGridView1.DataSource = Dt

    End Sub

5,解説

17行目までで、EC2からインスタンス一覧を取得します。
19-29行で、DataTable用を準備して
31-56行で、DataTableにEC2から取得した値を設定します。


取得できる値は、17行目終了時点でのResオブジェクトを覗いてみてください。

”インスタンスの状態”の詳細ステータスはDescribeInstancesでは取れません。
DescribeInstanceStatus で取れますので、同じような造りで作成してください。なお、DescribeInstanceStatusのIAMの許可をお忘れなく



Comments