JavaでEC2インスタンスを管理する
1概要
この記事では、Java SDKを使用してEC2リソースを制御する方法について学習します。
EC2(Elastic Cloud Compute)
を初めて使用する場合 – これは、Amazonのクラウドでコンピューティング能力を提供するプラットフォームです。
2前提条件
EC2用のAmazon AWS SDKを使用するために必要な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インスタンスを起動するときは、https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html[キーペア]を指定する必要があります。 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");
Image Idは、このインスタンスが使用する
AMI image
です。
インスタンスの種類
は、インスタンスの仕様を定義します。
-
キー名はオプションです; ** 指定されていない場合は、インスタンスに接続できません。インスタンスを正しく設定したので、接続する必要がないと確信している場合は、これで問題ありません。
-
最小数と最大数によって、作成されるインスタンス数の上限が決まります** これはアベイラビリティゾーンによって異なります。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結論
このクイックチュートリアルでは、Java SDKを使用してAmazon EC2インスタンスを管理する方法を示しました。
いつものように、コードスニペットはhttps://github.com/eugenp/tutorials/tree/master/aws[over GitHub]で見つけることができます。