1. 概要

この記事では、JavaSDKを使用してEC2リソースを制御する方法を学習します。 EC2(Elastic Cloud Compute)を初めて使用する場合–これはAmazonのクラウドでコンピューティング能力を提供するプラットフォームです。

2. 前提条件

Amazon AWS SDK for EC2を使用するために必要なMavenの依存関係、AWSアカウント設定、およびクライアント接続は、この記事のと同じです。

前の記事で説明したように、 AWSCredentials、のインスタンスを作成したと仮定すると、先に進んでEC2クライアントを作成できます。

AmazonEC2 ec2Client = AmazonEC2ClientBuilder
  .standard()
  .withCredentials(new AWSStaticCredentialsProvider(credentials))
  .withRegion(Regions.US_EAST_1)
  .build();

3. EC2インスタンスの作成

SDKを使用すると、最初のEC2インスタンスを開始するために必要なものをすばやくセットアップできます。

3.1. セキュリティグループの作成

セキュリティグループは、EC2インスタンスへのネットワークトラフィックを制御します。複数のEC2インスタンスに1つのセキュリティグループを使用できます。

セキュリティグループを作成しましょう:

CreateSecurityGroupRequest createSecurityGroupRequest = new CreateSecurityGroupRequest()
  .withGroupName("BaeldungSecurityGroup")
  .withDescription("Baeldung Security Group");
CreateSecurityGroupResult createSecurityGroupResult = ec2Client.createSecurityGroup(
  createSecurityGroupRequest);

セキュリティグループはデフォルトでネットワークトラフィックを許可しないため、トラフィックを許可するようにセキュリティグループを構成する必要があります。

任意のIPアドレスからのHTTPトラフィックを許可しましょう。

IpRange ipRange = new IpRange().withCidrIp("0.0.0.0/0");
IpPermission ipPermission = new IpPermission()
  .withIpv4Ranges(Arrays.asList(new IpRange[] { ipRange }))
  .withIpProtocol("tcp")
  .withFromPort(80)
  .withToPort(80);

最後に、ipRangeインスタンスをAuthorizeSecurityGroupIngressRequestにアタッチし、EC2クライアントを使用してリクエストを行う必要があります。

AuthorizeSecurityGroupIngressRequest authorizeSecurityGroupIngressRequest 
  = new AuthorizeSecurityGroupIngressRequest()
  .withGroupName("BaeldungSecurityGroup")
  .withIpPermissions(ipPermission);
ec2Client.authorizeSecurityGroupIngress(authorizeSecurityGroupIngressRequest);

3.2. キーペアの作成

EC2インスタンスを起動するときは、キーペアを指定する必要があります。 SDKを使用してキーペアを作成できます:

CreateKeyPairRequest createKeyPairRequest = new CreateKeyPairRequest()
  .withKeyName("baeldung-key-pair");
CreateKeyPairResult createKeyPairResult = ec2Client.createKeyPair(createKeyPairRequest);

秘密鍵を取得しましょう:

createKeyPairResult.getKeyPair().getKeyMaterial();

このキーを安全で安全な場所に保管する必要があります。紛失すると元に戻すことができなくなります(Amazonは保管しません)。 これが、EC2インスタンスに接続できる唯一の方法です。

3.3. EC2インスタンスの作成

EC2を作成するには、 RunInstancesRequest:を使用します

RunInstancesRequest runInstancesRequest = new RunInstancesRequest()
  .withImageId("ami-97785bed")
  .withInstanceType("t2.micro") 
  .withKeyName("baeldung-key-pair") 
  .withMinCount(1)
  .withMaxCount(1)
  .withSecurityGroups("BaeldungSecurityGroup");

イメージIDは、このインスタンスが使用するAMIイメージです。

インスタンスタイプは、インスタンスの仕様を定義します。

キー名はオプションです;指定されていない場合、インスタンスに接続できません。 インスタンスが正しく設定されており、接続する必要がないと確信している場合は、これで問題ありません。

最小数と最大数は、作成されるインスタンスの数に制限を与えます。これは、アベイラビリティーゾーンによって異なります。AWSがゾーン内に少なくとも最小数のインスタンスを作成できない場合、インスタンスは作成されません。

逆に、AWSがインスタンスの最大数を作成できない場合、この数が指定したインスタンスの最小数よりも多い場合、AWSはより少ない数を作成しようとします。

これで、runInstances()メソッドを使用してリクエストを実行し、作成されたインスタンスのIDを取得できます。

String yourInstanceId = ec2Client.runInstances(runInstancesRequest)
  .getReservation().getInstances().get(0).getInstanceId();

4. EC2インスタンスの管理

SDKを使用すると、EC2インスタンスの開始、停止、再起動、説明、モニタリングの設定を行うことができます。

4.1. EC2インスタンスの開始、停止、再起動

インスタンスの開始、停止、再起動は比較的簡単です。

インスタンスの開始:

StartInstancesRequest startInstancesRequest = new StartInstancesRequest()
  .withInstanceIds(yourInstanceId);

ec2Client.startInstances(request);

インスタンスの停止:

StopInstancesRequest stopInstancesRequest = new StopInstancesRequest()
  .withInstanceIds(yourInstanceId);
        
ec2Client.stopInstances(request);

インスタンスの再起動:

RebootInstancesRequest request = new RebootInstancesRequest()
  .withInstanceIds(yourInstanceId);
        
RebootInstancesResult rebootInstancesRequest = ec2Client.rebootInstances(request);

これらの各リクエストから、インスタンスの以前の状態を問い合わせることができます:

ec2Client.stopInstances(stopInstancesRequest)
  .getStoppingInstances()
  .get(0)
  .getPreviousState()
  .getName()

4.2. EC2インスタンスのモニタリング

EC2インスタンスの監視を開始および停止する方法を見てみましょう:

MonitorInstancesRequest monitorInstancesRequest = new MonitorInstancesRequest()
  .withInstanceIds(yourInstanceId);
        
ec2Client.monitorInstances(monitorInstancesRequest);
         
UnmonitorInstancesRequest unmonitorInstancesRequest = new UnmonitorInstancesRequest()
  .withInstanceIds(yourInstanceId);

ec2Client.unmonitorInstances(unmonitorInstancesRequest);

4.3. EC2インスタンスの説明

最後に、EC2インスタンスを説明できます:

DescribeInstancesRequest describeInstancesRequest
 = new DescribeInstancesRequest();
DescribeInstancesResult response = ec2Client
  .describeInstances(describeInstancesRequest);

EC2インスタンスは予約にグループ化されます。 予約は、1つ以上のEC2インスタンスを作成するために使用されたStartInstancesRequest呼び出しです。

response.getReservations()

ここから、実際のインスタンスを取得できます。 最初の予約で最初のインスタンスを取得しましょう:

response.getReservations().get(0).getInstances().get(0)

これで、インスタンスについて説明できます。

// ...
.getImageId()
.getSubnetId()
.getInstanceId()
.getImageId()
.getInstanceType()
.getState().getName()
.getMonitoring().getState()
.getKernelId()
.getKeyName()

5. 結論

このクイックチュートリアルでは、JavaSDKを使用してAmazonEC2インスタンスを管理する方法を示しました。

いつものように、コードスニペットはGitHubにあります。