LoginSignup
10
9

More than 5 years have passed since last update.

AWSのEC2インスタンスを使用して、AWS JavaSDKのアプリを実行しましょう。

Last updated at Posted at 2016-01-07

 最近、AWSサービスが広がっています。自分でも、挑戦してみました。
 ずっと、Javaを使って、アプリやウエブサイトなどを作成して、今回もJavaでしましょう。
 
 課題:AWSのJava SDKで、EC2インスタンス上で動くアプリを使って、AWSサービスの資源をやり取りします。
 ちょっと調べると、複雑そうに見ました。
 
 ・Mavenのインストール、Antのインストール、build.xmlの定義。。。Java環境の設定。。。うううう
 ちゃんと読むと、そのアプリはただ、AWS JavaSDKのJarファイルを作る、使用は普通のJavaと同じだと思います。
 
 ・Credentialについては、EC2インスタンスを作成するときは、Roleにつけて、作成すれば、安全です。
 また、ローカルのCredential設定しなくてもいいです。
 
 ・RoleにつけられたEC2インスタンスのCredentialを習得するために、「InstanceProfileCredentialsProvider」クラスを使えば、よいです。
 
 ・Maven使用しない、Antも使用しない、ただのJavaとAWS JavaSDK
 よし、やりましょう。

1.EC2インスタンスを作成します。
・t2.micro(無料)
・Role:試のため、EC2AccessのAdmin権限を追加します。
(EC2の作成し方やRoleの作成方、みなさん、Googleさんに聞いてくださいね。(笑))

2.PuttyでSSHを経由して、EC2インスタンスをアクセスします。

留意:コマンドがよく見えるように、スペースがわざと離れています。

2.1.Java環境の設定:
次のコマンドをゆっくりに入力しましょう。

//EC2インスタンスをアップデートします。

sudo yum update -y

//javaとjavacが実行できるかどうか確認します。
$ java -version

Java version "1.8.0_65"
Java(TM) SE Runtime Environment (build 1.8.0_65-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.65-b01, mixed mode)

$ javac -version

コマンドがみつかりませんでした。

※この場合は、次のコマンドを実行しましょう。
$ sudo yum group list

Java Development を覚えましょう。

$ sudo yum group install "Java Development" -y

Java 環境を設定します。終わったら、もう一度、javac -versionで確認します。
例:javac 1.8.0_65

以上。

2.2.AWSのJava SDKをダウンロードします。
次のコマンドをゆったり入力しましょう。
$wget http://sdk-for-java.amazonwebservices.com/latest/aws-java-sdk.zip

終わったら、解凍します。

$unzip aws-java-sdk.zip

このフォルダが生成されました。「aws-java-sdk-1.10.45」

以上。

2.3.EC2インスタンスの本当のJavaパスを検出します。
次のコマンドをのんびり入力しましょう。
$ which java

/usr/bin/java

\$ file $(which java)

/usr/bin/java: symbolic link to /etc/alternatives/java

$ file /etc/alternatives/java

/etc/alternatives/java: symbolic link to /usr/java/jdk1.8.0_65/jre/bin/java

$ file /usr/java/jdk1.8.0_65/jre/bin/java

/usr/java/jdk1.8.0_65/jre/bin/java: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.9, BuildID[sha1]=bd74b7294ebbdd93e9ef3b729e5aab228a3f681b, not stripped

※Javaの本当のパスはこれだ:/usr/java/jdk1.8.0_65/jre/

以上。

2.4.AWSのJavaSDKライブラリを配置します。
次のコマンドをだらだら入力しましょう。
・コピー元:/home/ec2-user/aws-java-sdk-1.10.45/lib/
・コピー先:/usr/java/jdk1.8.0_65/jre/lib/ext
$ sudo  cp  /home/ec2-user/aws-java-sdk-1.10.45/lib/*.jar  /usr/java/jdk1.8.0_65/jre/lib/ext

すべてAWSのJavaSDKをコピーします。

$ sudo  cp  /home/ec2-user/aws-java-sdk-1.10.45/third-party/lib/*.jar  /usr/java/jdk1.8.0_65/jre/lib/ext

すべてAWSのThird-partyライブラリーをコピーします。

以上。

2.5.EC2インスタンスのCredentialのリージョンを設定しましょう。
・このEC2インスタンスはRoleつけて、作成されたものなので、アクセスキーや秘密キーを設定しなくても、いいですが。
ジージョンを設定しないといけません。
次のコマンドをささっとにゅうりょくしましょう。
$ aws configure

Enterキー
Enterキー
Default region name:ap-northeast-1
Enterキー

以上。

2.6.EC2インスタンスからAWSリソースをやり取りできるかを確認することをわすれずに。。。
・AWS CLIコマンドを入力してみましょう。

$ aws ec2 describe-instances

AWS上の全部EC2インスタンスが表示されます。
※できない場合は確認の必要項目:
・EC2インスタンスを作成したとき、Roleにつけますか?
・Roleの権限はEC2Accessのですか?

以上。

3.Javaファイルを作成してみましょう。
・ファイル名:s3sample.java
・目的:S3にあるすべてのバケット名をゲットして、表示します。

s3sample.rb

import java.util.*;

import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.*;
import com.amazonaws.auth.InstanceProfileCredentialsProvider;
import com.amazonaws.regions.Region;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3Client;
import com.amazonaws.services.s3.model.Bucket;
import com.amazonaws.services.s3.model.GetObjectRequest;
import com.amazonaws.services.s3.model.ListObjectsRequest;
import com.amazonaws.services.s3.model.ObjectListing;
import com.amazonaws.services.s3.model.PutObjectRequest;
import com.amazonaws.services.s3.model.S3Object;
import com.amazonaws.services.s3.model.S3ObjectSummary;
import com.amazonaws.AmazonClientException;
import com.amazonaws.AmazonServiceException;

public class s3sample{
  public static void main(String[] args){
    try {
      AmazonS3 s3client = new AmazonS3Client(new InstanceProfileCredentialsProvider());
      List<Bucket> listBuckets = s3client.listBuckets();
      int BucketElementNumbers = listBuckets.size();

      for (int i=0;i < BucketElementNumbers ; i++){
        Bucket aBucket = listBuckets.get(i);
        System.out.println(aBucket.getName());
      }
    }catch (AmazonServiceException e){
      System.out.println(e.getMessage());
    }
  }//end main
}//end class

以上です。

4.コンパイル
※普段のJavaファイルとして、コンパイルして、実行します。
$ javac s3sample.java

warning: Supported source version 'RELEASE_6' from annotation processor 'com.amazonaws.eclipse.simpleworkflow.asynchrony.annotationprocessor.AsynchronyDeciderAnnotationProcessor' less than -source '1.8'
1 warning
無視にします。

$java s3sample

abc
ghk
owari

5.トラブル:
・「ClassNotFound」や「packageがみつかりません。」エラーが発生したら、JavaSDKのコピー先はシステムが使っているJAVA_HOMEかどうか確認しましょう。

・権限がない、EC2インスタンスのRoleを確認しましょう。

・アクセスキーや秘密キーを使いたい場合、2.5のステップに全部記入します。
「InstanceProfileCredentialsProvider」クラスを使わないで、「ProfileCredentialsProvider」クラスを使いましょう。
コードや使い方は「aws-java-sdk.zip」の中にある「Sample」フォルダーを読みましょう。

最後、Amazonサービスはただ、単体の一つサービスを使うことではなく、いっぱいサービスを使用して、システムを構築するのが得意です。
ほかのサービスにも、挑戦しましょう。

 

10
9
0

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
10
9