Amazon EC2 での Elastic IP アドレスの使用 - AWS SDK for C++

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Amazon EC2 での Elastic IP アドレスの使用

前提条件

作業を始める前に「AWS SDK for C++ の開始方法」を読むことをお勧めします。

コード例をダウンロードし、「コード例の開始方法」の説明に従ってソリューションをビルドします。

例を実行するには、リクエストに使用するユーザープロファイルに、AWS のサービスとアクションに対する適切なアクセス許可が付与されている必要があります。詳細については、「AWS 認証情報の提供」を参照してください。

Elastic IP アドレスを割り当てる

Elastic IP アドレスを使用するにはまずアカウントに 1 つ割り当ててから、それをインスタンスまたはネットワークインターフェイスに関連付けます。

Elastic IP アドレスを割り当てるには、ネットワークタイプ (Classic EC2 または VPC) が含まれる AllocateAddressRequest オブジェクトを使用して EC2Client の AllocateAddress 関数を呼び出します。

警告

2022 年 8 月 15 日に、EC2-Classic の提供を終了しhます。EC2-Classic は、VPC への移行をお勧めします。詳細については、「Linux インスタンス用 Amazon EC2 ユーザーガイド」または「Windows インスタンス用 Amazon EC2 ユーザーガイド」の「EC2-Classic から VPC への移行」を参照してください。ブログ記事「EC2-Classic Networking は販売終了になります — 準備方法はこちら」も参照してください。

レスポンスオブジェクトの AllocateAddressResponse クラスには割り当て ID が含まれており、この ID を使用することで、そのアドレスをインスタンスに関連付けることができます。その際は、EC2Client の AssociateAddress 関数の呼び出しで、割り当て ID とインスタンス ID を AssociateAddressRequest で指定して渡します。

含まれるもの:

#include <aws/ec2/EC2Client.h> #include <aws/ec2/model/AllocateAddressRequest.h> #include <aws/ec2/model/AssociateAddressRequest.h> #include <iostream>

コード

Aws::EC2::EC2Client ec2Client(clientConfiguration); Aws::EC2::Model::AllocateAddressRequest request; request.SetDomain(Aws::EC2::Model::DomainType::vpc); const Aws::EC2::Model::AllocateAddressOutcome outcome = ec2Client.AllocateAddress(request); if (!outcome.IsSuccess()) { std::cerr << "Failed to allocate Elastic IP address:" << outcome.GetError().GetMessage() << std::endl; return false; } const Aws::EC2::Model::AllocateAddressResponse &response = outcome.GetResult(); allocationID = response.GetAllocationId(); publicIPAddress = response.GetPublicIp(); Aws::EC2::Model::AssociateAddressRequest associate_request; associate_request.SetInstanceId(instanceId); associate_request.SetAllocationId(allocationID); const Aws::EC2::Model::AssociateAddressOutcome associate_outcome = ec2Client.AssociateAddress(associate_request); if (!associate_outcome.IsSuccess()) { std::cerr << "Failed to associate Elastic IP address " << allocationID << " with instance " << instanceId << ":" << associate_outcome.GetError().GetMessage() << std::endl; return false; } std::cout << "Successfully associated Elastic IP address " << allocationID << " with instance " << instanceId << std::endl;

完全な例をご覧ください。

Elastic IP アドレスの記述

Elastic IP アドレスを一覧表示するには、EC2Client の DescribeAddresses 関数を呼び出します。返される結果オブジェクトには DescribeAddressesResponse が含まれています。このオブジェクトを使用して、アカウントの Elastic IP アドレスを表す Address オブジェクトのリストを取得できます。

含まれるもの:

#include <aws/ec2/EC2Client.h> #include <aws/ec2/model/DescribeAddressesRequest.h> #include <aws/ec2/model/DescribeAddressesResponse.h> #include <iomanip> #include <iostream>

コード

Aws::EC2::EC2Client ec2Client(clientConfiguration); Aws::EC2::Model::DescribeAddressesRequest request; Aws::EC2::Model::DescribeAddressesOutcome outcome = ec2Client.DescribeAddresses(request); if (outcome.IsSuccess()) { std::cout << std::left << std::setw(20) << "InstanceId" << std::setw(15) << "Public IP" << std::setw(10) << "Domain" << std::setw(30) << "Allocation ID" << std::setw(25) << "NIC ID" << std::endl; const Aws::Vector<Aws::EC2::Model::Address> &addresses = outcome.GetResult().GetAddresses(); for (const auto &address: addresses) { Aws::String domainString = Aws::EC2::Model::DomainTypeMapper::GetNameForDomainType( address.GetDomain()); std::cout << std::left << std::setw(20) << address.GetInstanceId() << std::setw(15) << address.GetPublicIp() << std::setw(10) << domainString << std::setw(30) << address.GetAllocationId() << std::setw(25) << address.GetNetworkInterfaceId() << std::endl; } } else { std::cerr << "Failed to describe Elastic IP addresses:" << outcome.GetError().GetMessage() << std::endl; }

完全な例をご覧ください。

Elastic IP アドレスを解放する

Elastic IP アドレスを解放するには、EC2Client の ReleaseAddress 関数を呼び出して、解放する Elastic IP アドレスの割り当て ID を含む ReleaseAddressRequest を渡します。

含まれるもの:

#include <aws/ec2/EC2Client.h> #include <aws/ec2/model/ReleaseAddressRequest.h> #include <iostream>

コード

Aws::EC2::EC2Client ec2(clientConfiguration); Aws::EC2::Model::ReleaseAddressRequest request; request.SetAllocationId(allocationID); Aws::EC2::Model::ReleaseAddressOutcome outcome = ec2.ReleaseAddress(request); if (!outcome.IsSuccess()) { std::cerr << "Failed to release Elastic IP address " << allocationID << ":" << outcome.GetError().GetMessage() << std::endl; } else { std::cout << "Successfully released Elastic IP address " << allocationID << std::endl; }

Elastic IP アドレスを解放すると、その IP アドレスは AWS IP アドレスプールに解放され、後で使用できないことがあります。DNS レコード、およびそのアドレスと通信するすべてのサーバーまたはデバイスを更新してください。解放済みの Elastic IP アドレスを解放しようとした場合に、そのアドレスが既に別の AWS アカウントに割り当てられていると AuthFailure エラーが発生します。

デフォルト VPC を使用している場合、Elastic IP アドレスを解放すると、関連付けられているインスタンスから自動的に関連付けが解除されます。Elastic IP アドレスを解放せずに関連付けのみを解除するには、EC2Client の DisassociateAddress 関数を使用します。

デフォルト以外の VPC を使用している場合は、開放しようとする前に必ず DisassociateAddress を使用して Elastic IP アドレスの関連付けを解除する必要があります。そうしないと、Amazon EC2 からエラー (InvalidIPAddress.InUse) が返されます。

完全な例をご覧ください。

詳細情報