LoginSignup
0

More than 5 years have passed since last update.

EC2をプログラムから操作

Last updated at Posted at 2018-07-27

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 プログラムひな形の作成

コマンドプロンプトで下記コマンド叩いてプロジェクトのひな形作成

Mavenコマンド
mvn -B archetype:generate \
  -DarchetypeGroupId=org.apache.maven.archetypes \
  -DgroupId=org.example.basicapp \
  -DartifactId=myAws

2 pom.xmlに依存関係追加

pomにこれを追記する

pom.xml
  <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インスタンスを起動・停止するプログラムは下記のようになりました。

MyAws.java
   /**
     * プロファイル設定
     */
   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などで公開しても問題ない形になってますね。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0