3-2:お作法

ここではWindows Formアプリケーションで作りますが、最終的にはWebアプリケーションで作成した方が何かと便利です。
最初のうちはFormアプリケーションの方が安心だと思いますので。

早速作ります。

例題として、サーバを起動するプログラムを作ります。

1,IAM設定

事前準備として、このプログラムが利用するユーザをIAMで作成しておきます。
下記権限を持つユーザアカウントのアクセスキーを準備しておいてください。
---------------------------------------
AWSサービス:Amazon EC2
アクション     :StartInstances
Amazonリソースネーム(ARN):*
---------------------------------------

2,プログラム仕様

●入力パラメータ
・IAMユーザの”アクセスキーID”と”・シークレットアクセスキー”
・インスタンスID
●処理内容
サーバを起動する
●エラー処理
メッセージを表示する。

3,作成開始

VSを起動し、新しいプロジェクト→Windows Form アプリケーション として準備します。
下記のファイルを、参照設定として追加します。
”C:\Program Files (x86)\AWS SDK for .NET\bin\Net45\AWSSDK.dll”

4,フォームの構成

↓こんな感じで

5,ボタン押下後のコードを書きます

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
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
        Dim _InstanceID As String = TextBox3.Text

        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.StartInstancesRequest
        reQ.InstanceIds.Add(_InstanceID)

        Dim Res As Amazon.EC2.Model.StartInstancesResponse
        Res = ec2client.StartInstances(reQ)

        If Res.StartingInstances(0).CurrentState.Code <> 0 Then
            MsgBox("サーバは停止中ではありません。")
        End If
End Sub
以上です。
【解説】

 2
 3
 4
        Dim _AWSID As String = TextBox1.Text
        Dim _AWSPass As String = TextBox2.Text
        Dim _InstanceID As String = TextBox3.Text
入力パラメータを受け取り、それぞれ・・・
_AWSID:アクセスキーID
_AWSPass:シークレットアクセスキー
_InstanceID:インスタンスID
を格納します。

本題はここからです。

① サービス単位のオブジェクトを作成します。

EC2サービス関係で何かやろうと思えば、”Amazon.EC2.AmazonEC2Client”オブジェクトを作る必要があります。
(S3サービスで何かやりたければ”Amazon.S3.AmazonS3Client”・・・という感じで定義します。)

EC2クライアントオブジェクトは、認証情報とリージョンを設定します。
 6
 7
 8
 9
        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)

② リクエストを投げるためのオブジェクトを作成し、パラメータを設定する。

この例のStartInstancesコマンドは、複数のインスタンスを指定できるようですので、配列になっています。
なので、Addを使って配列にインスタンスIDを放り込みます。
11
12
        Dim reQ = New Amazon.EC2.Model.StartInstancesRequest
        reQ.InstanceIds.Add(_InstanceID)

③ レスポンス(実行後の結果)を受け取るためのオブジェクトを準備しておく

Res変数
14
        Dim Res As Amazon.EC2.Model.StartInstancesResponse

④ 実行します。

    実行時にはリクエストオブジェクトをパラメータとして指定します。
15
        Res = ec2client.StartInstances(reQ)


⑤ 実行結果の戻り値を検証します。

必須ではないですが、
17
18
19
        If Res.StartingInstances(0).CurrentState.Code <> 0 Then
            MsgBox("サーバは停止中ではありません。")
        End If

戻り値の内容は・・・AWS公式ドキュメントでは、このあたり? ・・・わかりにくいですが。。
コード作成途中の入力支援に、より具体的な説明が出ています。
戻り値0=sttoping なのでサーバ停止中です。
停止中以外の状態で起動命令があれば、メッセージボックスを表示します。




Comments