作成中・・・。
1,IAMの準備
AWS IAM管理コンソールから、これらのプログラム実行権限を持つユーザを作成、アクセスキーを準備しておきます。
このプログラム必要な権限は・・・
目的 |
AWSサービス |
アクション |
ARN |
サーバ起動 |
Amazon EC2 |
StartInstances |
* |
サーバ停止 |
Amazon EC2 |
StopInstances |
* |
|
|
|
|
|
|
|
|
アクセスキーID、シークレットアクセスキーを準備しておきます。
2,プログラムの書き方
2-1,プロジェクトの作成
バッチ処理なので、コンソールアプリケーションとします。
もっと効率的な書き方もあるでしょうが、ここでは1プロジェクト=1処理として書きます。
2-2,App.Configの設定
3-3に記載しているサンプルでは、アクセスキーID・シークレットアクセスキーを、フォーム入力としていましたが、
ここではapp.configに書きます。
1
2
3
4
5
6
7
8
9
10
11
12
|
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<appSettings>
<add key="AWSAccessKey" value="AKIAxxxxxxxxxxxxxVLA"/>
<add key="AWSSecretKey" value="p9CpORxxxxxxxxxxxxxxxxxxxxxxxxxo6xa"/>
<add key="AWSRegion" value="ap-northeast-1"/>
</appSettings>
</configuration>
|
8行目:キー名:AWSAccessKey に アクセスキーID設定
9行目:キー名:AWSSecretKey にシークレットアクセスキーを設定
10行目:キー名:AWSRegion にリージョン(ここでは東京を指すap-northeast-1を設定
としておき、
プログラム側では、下記の一行でOKです
1
|
Dim ec2client As New Amazon.EC2.AmazonEC2Client
|
ちなみにサンプルでは下記のように4行書いていましたが、app.configに書けば上記の通り1行で済みます
1
2
3
4
|
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)
|
2-3、共通エラー処理
OSのイベントログに実行結果およびエラー内容を書きだします。
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 | Module Module1
Sub Main()
End Sub
''' <summary>
''' イベントログに書き込む
''' </summary>
''' <param name="Msg">書き込む文字列</param>
''' <param name="isErr">エラーならTrueを指定</param>
''' <remarks></remarks>
Private Sub writeEventLog(ByVal Msg As String, Optional ByVal isErr As Boolean = False)
'自分のexeファイル名をソース名にする
Dim sourceName As String = IO.Path.GetFileName(System.Reflection.Assembly.GetExecutingAssembly().Location)
'ソースが存在していない時は作成する
If Not System.Diagnostics.EventLog.SourceExists(sourceName) Then
System.Diagnostics.EventLog.CreateEventSource(sourceName, "")
End If
'イベントログにエントリを書き込む
If isErr Then
'エラーの場合、イベントIDを1、分類を1000とする
System.Diagnostics.EventLog.WriteEntry(sourceName, Msg, System.Diagnostics.EventLogEntryType.Error, 1, 1000)
Else
System.Diagnostics.EventLog.WriteEntry(sourceName, Msg)
End If
End Sub
End Module
|
ちなみに、VSを管理者として実行していない場合は、17行目でエラーになると思われます。
主処理を書く
sub Main に実行する処理を書き、1つの実行体(exeファイル)として保管します。
タスクスケジューラでこのexeファイルを起動するものとします。
|