最近、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にあるすべてのバケット名をゲットして、表示します。
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サービスはただ、単体の一つサービスを使うことではなく、いっぱいサービスを使用して、システムを構築するのが得意です。
ほかのサービスにも、挑戦しましょう。