

# AWS CLI を使用した IPAM の開始方法
<a name="getting-started-with-ipam-using-the-aws-cli"></a>

このチュートリアルでは、単一の AWS アカウントを使用して CLI で Amazon VPC IP Address Manager (IPAM) AWS をセットアップし使用するプロセスについて説明します。このチュートリアルを終えると、IPAM の作成、IP アドレスプール階層の作成、VPC への CIDR の割り当てが完了します。

## 前提条件
<a name="prerequisites"></a>

このチュートリアルを開始する前に、以下の要件を満たしていることを確認してください。
+ IPAM リソースを作成および管理するためのアクセスが許可された AWS アカウントがある。
+ AWS CLI がインストール済みで、適切な認証情報を使用して設定されている。AWS CLI のインストールについては、「[AWS CLI の最新バージョンのインストールまたは更新](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)」を参照してください。AWS CLI の設定については、「[設定の基本](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html)」を参照してください。
+ IP アドレス指定と CIDR 表記について基本的な理解がある。
+ Amazon VPC の概念に関する基本的な知識がある。
+ チュートリアルの所要時間は、約 30 分です。

## IPAM を作成する
<a name="create-an-ipam"></a>

最初のステップでは、運用リージョンを使用して IPAM を作成します。IPAM を使用すると、AWS ワークロードの IP アドレスを計画、追跡、モニタリングできます。

us-east-1 と us-west-2 にオペレーションリージョンがある IPAM を作成します。

```
aws ec2 create-ipam \
  --description "My IPAM" \
  --operating-regions RegionName=us-east-1 RegionName=us-west-2
```

このコマンドを使用すると、IPAM を作成し、その IPAM で指定リージョンの IP アドレスを管理できるようになります。運用リージョンとは、IPAM によって IP アドレス CIDR を管理できる AWSリージョンを意味します。

IPAM が作成済みであることを確認します。

```
aws ec2 describe-ipams
```

出力された IPAM ID をメモします。この ID は、後続のステップで必要となります。

IPAM の作成が完了し、使用可能になるまで待ちます (約 20 秒)。

```
sleep 20
```

## IPAM スコープ ID の取得
<a name="get-the-ipam-scope-id"></a>

IPAM を作成すると、AWS によって、プライベートスコープとパブリックスコープが自動作成されます。このチュートリアルでは、プライベートスコープを使用します。

IPAM の詳細を取得して、プライベートスコープ ID を抽出します。

```
aws ec2 describe-ipams --ipam-id ipam-0abcd1234
```

`ipam-0abcd1234` を、実際の IPAM ID に置き換えます。

出力内にある `PrivateDefaultScopeId` フィールドのプライベートスコープ ID を特定し、メモします。`ipam-scope-0abcd1234` のようになります。

## トップレベル IPv4 プールを作成する
<a name="create-a-top-level-ipv4-pool"></a>

次に、プライベートスコープ内に最上位プールを作成します。このプールは、階層内にある他のすべてのプールの親として機能します。

トップレベル IPv4 プールを作成します。

```
aws ec2 create-ipam-pool \
  --ipam-scope-id ipam-scope-0abcd1234 \
  --address-family ipv4 \
  --description "Top-level pool"
```

`ipam-scope-0abcd1234` を、実際のプライベートスコープ ID に置き換えます。

プールの作成が完了し、使用可能になるまで待ちます。

```
aws ec2 describe-ipam-pools --ipam-pool-ids ipam-pool-0abcd1234 --query 'IpamPools[0].State' --output text
```

`ipam-pool-0abcd1234` を、実際の最上位プール ID に置き換えます。状態が `create-complete` であることを確認し、次のステップに進みます。

プールが利用可能になったら、CIDR ブロックをプロビジョニングします。

```
aws ec2 provision-ipam-pool-cidr \
  --ipam-pool-id ipam-pool-0abcd1234 \
  --cidr 10.0.0.0/8
```

CIDR のプロビジョニングが完了するまで待ちます。

```
aws ec2 get-ipam-pool-cidrs --ipam-pool-id ipam-pool-0abcd1234 --query "IpamPoolCidrs[?Cidr=='10.0.0.0/8'].State" --output text
```

状態が `provisioned` であることを確認し、次のステップに進みます。

## リージョンの IPv4 プールを作成する
<a name="create-a-regional-ipv4-pool"></a>

次に、最上位プール内にリージョンプールを作成します。このプールは、特定の AWS リージョンに固有のものです。

リージョンの IPv4 プールを作成します。

```
aws ec2 create-ipam-pool \
  --ipam-scope-id ipam-scope-0abcd1234 \
  --source-ipam-pool-id ipam-pool-0abcd1234 \
  --locale us-east-1 \
  --address-family ipv4 \
  --description "Regional pool in us-east-1"
```

`ipam-scope-0abcd1234` を、実際のプライベートスコープ ID に、`ipam-pool-0abcd1234` を最上位プール ID に置き換えます。

リージョンプールの作成が完了し、使用可能になるまで待ちます。

```
aws ec2 describe-ipam-pools --ipam-pool-ids ipam-pool-1abcd1234 --query 'IpamPools[0].State' --output text
```

`ipam-pool-1abcd1234` を実際のリージョンプール ID に置き換えます。状態が `create-complete` であることを確認し、次のステップに進みます。

プールが利用可能になったら、CIDR ブロックをプロビジョニングします。

```
aws ec2 provision-ipam-pool-cidr \
  --ipam-pool-id ipam-pool-1abcd1234 \
  --cidr 10.0.0.0/16
```

CIDR のプロビジョニングが完了するまで待ちます。

```
aws ec2 get-ipam-pool-cidrs --ipam-pool-id ipam-pool-1abcd1234 --query "IpamPoolCidrs[?Cidr=='10.0.0.0/16'].State" --output text
```

状態が `provisioned` であることを確認し、次のステップに進みます。

## 開発 IPv4 プールを作成する
<a name="create-a-development-ipv4-pool"></a>

次に、リージョンプール内に開発プールを作成します。このプールは開発環境に使用します。

開発 IPv4 プールを作成します。

```
aws ec2 create-ipam-pool \
  --ipam-scope-id ipam-scope-0abcd1234 \
  --source-ipam-pool-id ipam-pool-1abcd1234 \
  --locale us-east-1 \
  --address-family ipv4 \
  --description "Development pool"
```

`ipam-scope-0abcd1234` を実際のプライベートスコープ ID に置き換え、`ipam-pool-1abcd1234` をリージョンプール ID に置き換えます。

注: 親プールのロケールと一致する `--locale` パラメータを指定することが重要です。

開発プールの作成が完了し、使用可能になるまで待ちます。

```
aws ec2 describe-ipam-pools --ipam-pool-ids ipam-pool-2abcd1234 --query 'IpamPools[0].State' --output text
```

`ipam-pool-2abcd1234` を実際の開発プール ID に置き換えます。状態が `create-complete` であることを確認し、次のステップに進みます。

プールが利用可能になったら、CIDR ブロックをプロビジョニングします。

```
aws ec2 provision-ipam-pool-cidr \
  --ipam-pool-id ipam-pool-2abcd1234 \
  --cidr 10.0.0.0/24
```

CIDR のプロビジョニングが完了するまで待ちます。

```
aws ec2 get-ipam-pool-cidrs --ipam-pool-id ipam-pool-2abcd1234 --query "IpamPoolCidrs[?Cidr=='10.0.0.0/24'].State" --output text
```

状態が `provisioned` であることを確認し、次のステップに進みます。

## IPAM プール CIDR が使用される VPC を作成する
<a name="create-a-vpc-using-an-ipam-pool-cidr"></a>

最後に、IPAM プールの CIDR が使用される VPC を作成します。ここでは、IPAM を使用して IP アドレス空間を AWS リソースに割り当てる方法を示します。

IPAM プールの CIDR が使用される VPC を作成します。

```
aws ec2 create-vpc \
  --ipv4-ipam-pool-id ipam-pool-2abcd1234 \
  --ipv4-netmask-length 26 \
  --tag-specifications 'ResourceType=vpc,Tags=[{Key=Name,Value=IPAM-VPC}]'
```

`ipam-pool-2abcd1234` を実際の開発プール ID に置き換えます。

`--ipv4-netmask-length 26` パラメータを指定して、このプールから /26 CIDR ブロック (64 個の IP アドレス) を割り当てます。このネットマスク長を選択するのは、プールの CIDR ブロック (/24) よりも少ないアドレス個数を指定するためです。

VPC が作成済みであることを確認します。

```
aws ec2 describe-vpcs --filters "Name=tag:Name,Values=IPAM-VPC"
```

## IPAM プールの割り当てを確認する
<a name="verify-the-ipam-pool-allocation"></a>

CIDR が IPAM プールから割り当てられたことを確認します。

```
aws ec2 get-ipam-pool-allocations \
  --ipam-pool-id ipam-pool-2abcd1234
```

`ipam-pool-2abcd1234` を実際の開発プール ID に置き換えます。

このコマンドにより、指定した IPAM プールからのすべての割り当て情報が表示されます。これには、先ほど作成した VPC も含まれています。

## トラブルシューティング
<a name="troubleshooting"></a>

IPAM の使用中によく発生する問題を次に示します。
+ **アクセス許可エラー**: IAM ユーザーまたはロールに、IPAM リソースの作成および管理に必要なアクセス許可があることを確認します。`ec2:CreateIpam`、`ec2:CreateIpamPool`、その他の関連するアクセス許可が必要になる場合があります。
+ **リソース制限の超過**: デフォルトの場合、アカウントごとに作成できる IPAM は 1 つのみです。IPAM を新規作成するには、既存の IPAM を削除する必要があります。あるいは、既存の IPAM を使用します。
+ **CIDR 割り当ての失敗**: CIDR をプールにプロビジョニングするときには、プロビジョニング対象の CIDR が他のプールに割り当て済みの CIDR と重複しないようにしてください。
+ **API リクエストのタイムアウト**:「RequestExpired」エラーが発生した場合は、ネットワークレイテンシーまたは時刻同期の問題が原因である可能性があります。コマンドを再実行してみてください。
+ **不正な状態エラー**:「IncorrectState」エラーが発生した場合は、適切な状態ではないリソースにオペレーションを実行しようとしている可能性があります。リソースの作成またはプロビジョニングが完了するまで待ち、次のステップに進んでください。
+ **割り当てサイズエラー**: 割り当てサイズに関する「InvalidParameterValue」エラーが発生した場合は、プールサイズ上、適切なネットマスク長をリクエストしていることを確認してください。例えば、/24 プールから /25 CIDR を割り当てることはできません。
+ **依存関係違反**: リソースをクリーンアップする際に、「DependencyViolation」エラーが発生する可能性があります。これは、リソースが相互に依存していることで生じます。リソースは、作成時の逆の順序で削除するようにし、CIDR をプロビジョニング解除した後にプールを削除してください。

## リソースをクリーンアップする
<a name="clean-up-resources"></a>

このチュートリアルを完了したら、不要な課金が発生しないよう、作成したリソースをクリーンアップする必要があります。

1. VPC の削除

   ```
   aws ec2 delete-vpc --vpc-id vpc-0abcd1234
   ```

1. 開発プールから CIDR のプロビジョニングを解除します。

   ```
   aws ec2 deprovision-ipam-pool-cidr --ipam-pool-id ipam-pool-2abcd1234 --cidr 10.0.0.0/24
   ```

1. 開発プールを削除します。

   ```
   aws ec2 delete-ipam-pool --ipam-pool-id ipam-pool-2abcd1234
   ```

1. リージョンプールから CIDR をプロビジョニング解除します。

   ```
   aws ec2 deprovision-ipam-pool-cidr --ipam-pool-id ipam-pool-1abcd1234 --cidr 10.0.0.0/16
   ```

1. リージョンプールを削除します。

   ```
   aws ec2 delete-ipam-pool --ipam-pool-id ipam-pool-1abcd1234
   ```

1. 最上位プールから CIDR をプロビジョニング解除します。

   ```
   aws ec2 deprovision-ipam-pool-cidr --ipam-pool-id ipam-pool-0abcd1234 --cidr 10.0.0.0/8
   ```

1. 最上位プールを削除します。

   ```
   aws ec2 delete-ipam-pool --ipam-pool-id ipam-pool-0abcd1234
   ```

1. IPAM を削除します。

   ```
   aws ec2 delete-ipam --ipam-id ipam-0abcd1234
   ```

すべての ID を実際のリソース ID に置き換えます。

**注記**  
これらのオペレーションの間、場合によっては、リソースの削除が完了するまで待機した後に、次のステップに進む必要があります。依存関係違反が発生した場合は、数秒待ってから再実行してみてください。

## 次のステップ
<a name="next-steps"></a>

CLI で IPAM AWS を作成し使用する方法を習得できたので、その他の高度な機能についても知識を深めましょう。
+ [IP アドレスのプロビジョニング計画](planning-ipam.md) – IP アドレス空間の効果的な計画について学ぶ
+ [リソースごとに CIDR の使用状況をモニタリングする](monitor-cidr-compliance-ipam.md) – IP アドレスの使用状況をモニタリングする方法を理解する
+ [AWS RAM を使用して IPAM プールを共有する](share-pool-ipam.md) – AWS アカウント間で IPAM プールを共有する方法について学ぶ
+ [IPAM を AWS Organizations 内のアカウントと統合する](enable-integ-ipam.md) – 組織全体で IPAM を活用する方法について知識を得る