
AWSでJavaを使うには?AWS SDK for Javaの導入手順を解説!
目次
AWSでJavaを使うには?
Java個別の開発についてのお話に入る前に、AWS上でアプリケーション開発を行うに当たっての基本的な仕組みと享受できるメリットについて簡単にご説明します。
まず一口にアプリ開発と言っても、プログラムの作成だけで済む話ではなく、そこには煩雑でハイコストな作業や機能実装が附随します。
例えば、WEBアプリにおける認証機能の実装は、規模の大小に関わらず必須かつ重い工程である割りに、往々にして類似サービスとの差別化が図れないといった課題と隣合わせにあります。
そこでAWSでは、こういった認証やスケール設計、インフラ周りに関する様々な機能をフルマネージドサービスとして提供しています。
開発側は、これらのサービスをコンポーネントとしてプロジェクトに取り入れることによって、煩わしい作業から解放されて、開発のみに集中できるようになるのです。
AWSにおけるアプリ開発の考え方をご理解頂いたところで、次のセクションからはJava開発のお話に移っていきましょう。
AWS SDK for Javaとは?
「AWS SDK for Java」とは、提供される独自のJava APIを使うことでAWSのサービスへアクセスするためのJavaアプリケーション開発を支援してくれるSDK(ソフトウェア開発キット)です。
AWS SDK for Javaを使うことで、EC2やS3などのAWSの様々なサービスで動作するアプリケーションの開発が簡単に行えます。
なお、AWS SDK for JavaにはJDK6をコードベースとしたバージョン1.X系とJDK8をコードベースとしたバージョン2.X系があり、それぞれ提供されるライブラリなどに違いがあります。
バージョン2.X系は公式ドキュメント類が日本語化されていないため、この記事においてはバージョン1.X系における導入手順をご紹介しますが、両者は並行利用可能となっています。
事前準備
AWS SDK for Javaの導入に当たり、いくつか事前準備が必要ですので順次ご説明します。
IAMユーザーの作成
まずは事前準備の第一段階としてAWSのIAMユーザーを作成します。
既にIAMユーザーを作成済みの方は、この工程は読み飛ばしてください。IAMユーザーとは、AWSのサービスを利用する権限を付与されたユーザーのことで、設定した認証情報を入力して各種サービスにサインインできます。
まず、AWSのコンソールから[IAM]のサービスを開き、[アクセス管理]配下の[ユーザー]をクリックし、[ユーザーを追加]ボタンをクリックします。任意のユーザー名を入力し「プログラムによるアクセス」にチェックを入れて[次のステップ]に進みます。
[アクセス許可の設定]や[タグ]はそのままで[確認]まで進んで、[ユーザーの作成]をクリックすると「アクセスキー」と「シークレットアクセスキー」が表示されるので控えておきましょう。特に、シークレットアクセスキーはこの段階でしか確認できないのでご注意ください。Java開発環境のセットアップ
AWS SDK for Javaの導入にはJava 6.0以降が必要となります。
最近版のJDK(Java SE Development Kit)をhttp://www.oracle.com/technetwork/java/javase/downloads/からダウンロードします。なお、ダウンロードにはOracleのアカウントが必要となりますので、作成しておきましょう。
AWS SDK for Javaのセットアップ
Apache Mavenのインストール
セットアップの第一段階として、SDKをビルドするために必要な「Apache Maven」をインストールします。Apache Mavenとは、Java用のプロジェクト管理ツールで、プロジェクトのビルド、テストからドキュメントの作成まで一括で管理できます。
まず公式サイトよりバイナリファイルをダウンロードします。
https://maven.apache.org/download.cgi
ダウンロードしたファイルを解凍後、任意のディレクトリに展開し、展開先ディレクトリ配下の「bin」ディレクトリをPATH環境変数に追加します。
コマンドプロンプト上で【mvn -v】コマンドを実行し、バージョン情報や上記で設定したPATHが表示されればインストールは成功です。
Mavenパッケージの作成
続いて、コマンドプロンプト上で以下のコマンドを入力してMavenパッケージを作成します。
1 2 3 4 |
mvn -B archetype:generate \ -DarchetypeGroupId=org.apache.maven.archetypes \ -DgroupId=org.example.basicapp(アプリケーションの完全パッケージ名前空間) \ -DartifactId=myapp(プロジェクト名) |
最後に、プロジェクトでAWS SDK for Javaを使用するために、Maven依存関係としてSDKを設定していきます。パッケージ作成で作られたプロジェクトのpom.xmlファイルに以下の情報を追加します。
1 2 3 4 5 6 7 8 9 10 11 |
<dependencyManagement> <dependencies> <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-java-sdk-bom</artifactId> <version>1.11.327</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> |
これでプロジェクトの設定ができたので、コマンドプロンプト上でプロジェクトディレクトリに移動して【mvn package】コマンドを実行します。ビルドに成功すれば、[.jar]ディレクトリにtargetファイルが作成されます。
SDKをビルドする
Mavenを使用して、SDKをビルド&インストールします。GitHubからSDKのソースコードをダウンロードし、以下のコマンドを実行します。
1 |
mvn clean install |
以上でAWS SDK for Javaのセットアップは完了です。
AWS SDK for Javaの実行
ここからは、AWS SDK for Javaを使ってAmazon EC2インスタンスを作成する手順をご説明します。
依存関係の設定
まず、EC2に対するSDKの依存関係を登録するため、pom.xmlファイルの<dependencies>セクションに以下を追加します。
1 2 3 4 |
<dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>ec2</artifactId> </dependency> |
セキュリティーグループの作成
EC2インスタンスへのネットワークトラフィックを制御するセキュリティグループを作成します。
CreateSecurityGroupRequestインスタンスを作成し、そのインスタンスに対して、withGroupNameメソッドでグループ名、withDescriptionメソッドでグループの説明を設定します。
1 2 |
CreateSecurityGroupRequest csgr = new CreateSecurityGroupRequest(); csgr.withGroupName(""JavaSecurityGroup"").withDescription(""My security group""); |
リクエストインスタンスを引数としてcreateSecurityGroupメソッドに渡し、CreateSecurityGroupResultオブジェクトを作成します。
1 |
CreateSecurityGroupResult createSecurityGroupResult = amazonEC2Client.createSecurityGroup(csgr); |
トラフィック許可の設定
作成したセキュリティグループは、デフォルトではAmazon EC2インスタンスへのインバウンドトラフィックを許可しないので、トラフィックを許可するように設定します。
IpPermissionインスタンスを作成し、withIpv4Rangesメソッドを使用して許可対象となる任意のIPアドレスの範囲を設定します。withIpProtocolメソッドでIP プロトコル、withFromPortメソッドとwithToPortメソッドで許可対象となるポートの範囲を指定します。
1 2 3 4 5 6 7 8 9 10 |
IpPermission ipPermission = new IpPermission(); IpRange ipRange1 = new IpRange().withCidrIp(""111.111.111.111/32""); IpRange ipRange2 = new IpRange().withCidrIp(""150.150.150.150/32""); ipPermission.withIpv4Ranges(Arrays.asList(new IpRange[] {ipRange1, ipRange2})) .withIpProtocol(""tcp"") .withFromPort(22) .withToPort(22); |
許可リクエストの作成
AuthorizeSecurityGroupIngressRequestインスタンスを作成し、withGroupNameメソッドを使用してセキュリティグループ名を指定し、初期化したIpPermissionオブジェクトをwithIpPermissionsメソッドに渡します。
1 2 3 4 5 |
AuthorizeSecurityGroupIngressRequest authorizeSecurityGroupIngressRequest = new AuthorizeSecurityGroupIngressRequest(); authorizeSecurityGroupIngressRequest.withGroupName(""JavaSecurityGroup"") .withIpPermissions(ipPermission); |
最後にリクエストオブジェクトをauthorizeSecurityGroupIngressメソッドに渡して、このセクションは完了です。
1 |
amazonEC2Client.authorizeSecurityGroupIngress(authorizeSecurityGroupIngressRequest); |
キーペアの作成
EC2インスタンスを起動するには、キーペアを指定する必要があります。
CreateKeyPairRequestインスタンスを作成し、withKeyNameメソッドを使用して任意のキーペア名を設定します。
1 2 |
CreateKeyPairRequest createKeyPairRequest = new CreateKeyPairRequest(); createKeyPairRequest.withKeyName(keyName); |
作成されたリクエストインスタンスをcreateKeyPairメソッドに渡して結果オブジェクトを作成します。
1 |
CreateKeyPairResult createKeyPairResult = amazonEC2Client.createKeyPair(createKeyPairRequest); |
結果オブジェクトのgetKeyPairメソッドを呼び出して、プライベートキーを取得します。
1 2 3 |
KeyPair keyPair = new KeyPair(); keyPair = createKeyPairResult.getKeyPair(); String privateKey = keyPair.getKeyMaterial(); |
EC2インスタンスの作成
EC2インスタンスを作成するには、RunInstancesRequestインスタンスを作成する必要があります。
1 2 3 4 5 6 7 |
RunInstancesRequest runInstancesRequest = new RunInstancesRequest(); runInstancesRequest.withImageId(""ami-a9d09ed1"") .withInstanceType(InstanceType.T1Micro) .withMinCount(1) .withMaxCount(1) .withKeyName(""my-key-pair"") .withSecurityGroups(""my-security-group""); |
withImageIdはこのインスタンスが使用するAMI(Amazon マシンイメージ)のID、withInstanceTypeは指定したAMIと互換性のあるインスタンスタイプを指定します。
withMinCount/withMaxCountは起動するインスタンスの最小・最大数、withKeyNameとwithSecurityGroupsには設定したキーペアとセキュリティグループを指定します。
リクエストオブジェクトをrunInstancesメソッドに渡してリクエストを実行すれば、インスタンスが起動します。
1 |
RunInstancesResult result = amazonEC2Client.runInstances(runInstancesRequest); |
まとめ
この記事では、まず冒頭でAWSにおけるJava開発を行う上で知っておきたいサービスの活用に関することをお伝えしました。AWSによってフルマネージドされたサービスをコンポーネントして用いることで開発効率が上がるというお話でした。
以降はAWS SDK for Javaの導入手順を、ECインスタンスの作成を通じてご説明しました。SDKを利用することで、EC2のリソース制御を簡単に実行できました。
また今回ご説明したEC2に限らず、オンラインストレージサービスのS3においてファイルデータを操作したり、メッセージキューイングサービスのSQSにおいてメッセージを送受信したりといったAWSのサービスを利用するプログラミングも簡単に行えます。
今回ご紹介したサービスやSDKを活用して、AWSでのJava開発の効率アップ、コスト削減に繋げて頂ければと思います。