EC2を操作するプログラムを作成。
今回はEC2インスタンスを起動・停止するプログラムを作成しました。
前提条件
- AWSアカウントを作成していること
- 言語はJava
- AWS-SDKはMavenから取り込みます
1 IAMユーザの作成
AWSのアカウントを作成した直後だとルートユーザしか存在しない状態です。
しかし、ルートユーザを使用するのは非常に危険。
プログラムに必要な権限を付与したIAMユーザを作成してプログラムからアクセスするのがベストプラクティス。
AWSマネジメントコンソールで
サービス⇒IAM⇒ユーザ⇒ユーザを追加
から作成できる。
- ユーザ名は好きなものを入力
- AWSアクセスの種類は「プログラムによるアクセス」を選択
- ポリシーの選択では今回はEC2を操作するので「AmazonEC2FullAccess 」を設定します。
- 作成が完了するとアクセスキーとシークレットアクセスキーが表示されるのでメモしておきましょう。
以上でプログラムからEC2を操作するためのIAMユーザの作成は完了です。
2 credentials設定
上記の手順で作成したIAMユーザでプログラムがAWSにアクセスするためにユーザ情報を設定します。
プログラムに使用するIAMユーザの情報を認識させます。
これには色々方法がありますが、今回はAWS認証情報ファイルを使用する方法でやります。
C:\Users\ユーザ名.aws
配下にcredentialsというファイルがあってこれにアクセスキーを記述します。
初期状態で[default]で記載されているものがあると思うのでそれを真似てその下に先ほど作成したIAMユーザのアクセスキー、シークレットアクセスキーを記述します。
[]の中は好きな名前でOK。後ほどプログラムで指定します。
3 リージョン設定
C:\Users\ユーザ名.aws
配下にconfigというファイルを作ってこれにリージョン情報を記述します。
東京リージョンならこんな感じ。
[default]
region = ap-northeast-1
これで自動的にプログラムがリージョンを認識してくれるようになります。
4 EC2インスタンス作成
プログラムから起動・停止するインスタンスを作成します。
プログラムからAMIなどを指定して作成もできるようですが、今回はマネジメントコンソールで先に作成します。
手順は省略。
5 プログラムの作成
1 プログラムひな形の作成
コマンドプロンプトで下記コマンド叩いてプロジェクトのひな形作成
mvn -B archetype:generate \
-DarchetypeGroupId=org.apache.maven.archetypes \
-DgroupId=org.example.basicapp \
-DartifactId=myAws
2 pom.xmlに依存関係追加
pomにこれを追記する
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-bom</artifactId>
<version>1.11.373</version>
<type>pom</type>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-ec2</artifactId>
</dependency>
aws-java-sdk-bomはAWSのSDKを個別に指定するなら必要なもの。
aws-java-sdk-s3はEC2のAPIを呼び出すためのもの。
3 EC2起動・停止プログラム作成
EC2インスタンスを起動・停止するプログラムは下記のようになりました。
/**
* プロファイル設定
*/
public MyEc2(){
// Credentialsに記載した情報を取得
AWSCredentialsProvider provider = new ProfileCredentialsProvider("プロファイル名"); // 2.credentials設定で指定した名前。
ec2 = AmazonEC2ClientBuilder.standard().withCredentials(provider).build();
}
/**
* 引数で渡されたIDのEC2インスタンスを起動する
* @param instanceId 起動したいインスタンスID
*/
public void startInstance(String instanceId){
StartInstancesResult result = ec2.startInstances(new StartInstancesRequest().withInstanceIds(instanceId));
System.out.println(result.toString());
}
/**
* 引数で渡されたIDのEC2インスタンスを停止する
* @param instanceId 停止したいインスタンスID
*/
public void stopInstance(String instanceId) {
StopInstancesResult result = ec2.stopInstances(new StopInstancesRequest().withInstanceIds(instanceId));
System.out.println(result.toString());
}
}
インタンスIDを引数で受け取り、インスタンスを起動・停止するプログラムです。
IAM情報やリージョン情報は設定ファイルを読み込んでくれるのでソース中に記載する必要がなく、
スッキリする上にGitubなどで公開しても問題ない形になってますね。