OCI Compute エフェメラル・パブリックIPを予約済パブリックIPに変更する方法

本ブログは、[オラクル・クラウドの個人ブログ](https://qiita.com/letian/items/10152a4fec813c1b7d98)の1つです。

# 初めに
OCIのパブリック・サブネットに、Computeインスタンスが作成される場合、デフォルトはエフェメラル・パブリックIPが割当てられます。エフェメラルIPとは、<font color="blue">インスタンスの存続期間</font>にかぎり一時的に存在します。（<font color="orange">AWS</font>と違って、インスタンスを再起動してもエフェメラルIPが変わりません。）

「エフェメラルIPを予約済IPに変更したいけど、できますか？」という質問を持つ方がいらっしゃると思いますが、回答はどうでしょうか？

オラクルの[ドキュメント](https://docs.oracle.com/ja-jp/iaas/Content/Network/Tasks/managingpublicIPs.htm)により、以下の記述があります。

「<font color="blue">特定のパブリックIP</font>を作成したら、そのタイプを<font color="blue">変更することはできません</font>。たとえば、アドレス203.0.113.2を持つエフェメラル・パブリックIPが割り当てられているインスタンスを起動した場合、このエフェメラル・パブリックIPを、アドレス203.0.113.2を持つ予約済パブリックIPに変換することはできません。」

確かに、上記の通り「特定のパブリックIP」の場合、そのまま予約済パブリックIPに変更ができません。ただ、<font color="blue">特定ではない場合、予約済パブリックIP（別のIP）に変更できます。</font>

例えば、予約済パブリックIPをインスタンスに付与したい場合、インスタンス作成時点、直接に予約済IPを付与できません。インスタンス作成後、エフェメラル・パブリックIPを予約済パブリックIPに変更するという手順になります。今回は、この変更方法をご紹介します。

ちなみに、エフェメラルと予約済の2種類のパブリックIPは、どちらも<font color=blue>無料</font>です。これは、他のクラウド・プロバイダーによりも大きな利点です。AWS、Azure、またはGCPを使用している場合は、パブリックIPの料金を支払う必要があります。

|クラウド・プロバイダー|OCI|AWS|Azure|GCP|
|:--|:---|:--|:---|:---|
|IPの名称|Public IP|Elastic IP|Static IP, Dynamic IP|External IP|
|料金|<font color=blue>無料</font>|[有料](https://aws.amazon.com/ec2/pricing/on-demand/#Elastic_IP_Addresses)|[有料](https://azure.microsoft.com/en-us/pricing/details/ip-addresses/)|[有料](https://cloud.google.com/vpc/pricing#ipaddress)|

__変更方法__
事前準備：エフェメラル・パブリックIPのあるComputeインスタンスを用意しておきます。

ステップ
[1. パブリックIPを予約する](#1-パブリックipを予約する)
[2. エフェメラル・パブリックIPを外す](#2-エフェメラルパブリックipを外す)
[3. 予約済みパブリックIPを指定する](#3-予約済みパブリックipを指定する)
[4. OCI-CLIでの実施方法](#4-oci-cliでの実施方法)

# 1. パブリックIPを予約する
Networking -> IP Management -> Public IPs -> Reserve Public IP Address
指定したCompartmentに、<font color="blue">パブリックIPの名前</font>を入力してから、予約を実施します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/584a0931-c483-181e-21b3-a840b24bf624.png", width="600">

# 2. エフェメラル・パブリックIPを外す
Compute -> Instances -> Instance Details -> Attached VNICs
Computeインスタンスの<font color="blue">VNIC</font>を指定します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/0079c357-9c4a-32b2-1001-f7d0e9f593fd.png", width="600">

VNIC Details -> Resources -> IPv4 Address -> Edit
IPv4アドレスの画面より、<font color="blue">編集</font>ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/b0f9d060-031c-85d6-92d4-7000189c79ed.png)

編集画面に入ったら、予約済パブリックIPの選択肢が、グレーの状態となり直接に変更できません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/7a1b693b-842b-67d5-7870-0808bf377f22.png)

それで、<font color="blue">"NO PUBLIC IP"</font>を指定し、変更を実施します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/e33e3111-ca55-73d2-4921-4ec4b70e9eec.png)

# 3. 予約済みパブリックIPを指定する
上記の変更処理が、すぐ適用されます。実施後、もう一度アドレスの編集画面を開きます。
今回は、予約済パブリックIPが<font color="blue">選択可能</font>の状態となります。それを選択し、ステップ１で予約したパブリックIPを指定してから、変更を実施します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/4d5618cf-790c-a062-0cfd-907787d82e47.png)

実施後、すぐ予約済みパブリックIPに変更されます。
新しいIPでインスタンスへの接続が、できる状態です。ここまで、変更処理は完了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/c0f9d4c5-ccb3-ebea-e355-28511f3a6869.png)

# 4. OCI-CLIでの実施方法
事前にIPアドレスのOCIDを取得します。

__a) 指定したプライベートIPのOCIDを取得__
例：`oci network private-ip list --ip-address <Private_IP> --subnet-id <Subnet_OCID>`

__b) パブリックIPを取得__
例：`oci network public-ip list -c <Compartment_OCID> --scope REGION --all`

このコマンドの出力には、エフェメラル・パブリックIPと予約済エフェメラルIPの両方を含めます。片方のみを取得したい場合、`--lifetime`をつけてください。

エフェメラル・パブリックIPの場合：`--lifetime EPHEMERAL`
予約済パブリックIPの場合：`--lifetime RESERVED`

__c) 自動に割り当てられたエフェメラル・パブリックIPを解除__
例：oci network public-ip <font color=blue>delete</font> --public-ip-id \<<strong>Ephemeral</strong>_Public_IP_OCID> 

__d) 予約済パブリックIPの割り当て__
例：oci network public-ip <font color=blue>update</font> --public-ip-id \<<strong>Reserved</strong>_Public_IP_OCID> --private-ip-id \<Private_IP_OCID>

__e) 割り当てた予約済パブリックIPの解除__
例：oci network public-ip <font color=blue>update</font> --public-ip-id \<<strong>Reserved</strong>_Public_IP_OCID> --private-ip-id <font color=blue>""</font>
※、プライベートIPを<strong>空白の文字列</strong>にすると、割り当てた予約済パブリックIPが解除されます。

以上です。

----
__関連記事__
[オラクル・クラウドの個人ブログ一覧](https://qiita.com/liu-wei/items/10152a4fec813c1b7d98)
[予約済パブリックIPでOCI Computeインスタンスの作成方法](https://qiita.com/letian/items/74a7190af4e3606a2abf)
[複数のパブリックIPを使用してOCI VMにアクセスする](https://qiita.com/liu-wei/items/54ac33d47947b94973a0)