はじめに
terraform planとかterraform applyした時に出てくるassociate_public_ip_addressの差分をなくす方法

associate_public_ip_addressを設定している状態でインスタンスが停止してたりすると出てきます
結論
-
associate_public_ip_addressの設定は削除 - サブネットの設定に
map_public_ip_on_launch=Trueを追加
これでパブリックIPアドレスを付与しつつ、Terraformでの変更がいかなる場合も出なくなります。
参考までに2.のサブネットの設定はコンソール画面だとこうです
パブリックIPアドレスの付与
インスタンスにパブリックIPアドレスを付与する方法は大きく分けて以下の3つです。
- 自動割り当てIPの設定が有効になっているサブネットにインスタンスを立てる
- Terraformの
map_public_ip_on_launchで設定
- インスタンスの起動時のパブリック IP アドレス割り当てを有効にする
- Terraformの
associate_public_ip_addressで設定
- EIPをインスタンスに割り当てる
AWS公式:IPアドレス指定
設定の組み合わせによるパブリックIPアドレスの付与
上で説明した設定を有効にしたり、無効にしたりした時のIPアドレスの状態が以下の表です。
インスタンスの設定が優先されます
| No. | サブネットの設定 | インスタンスの設定 | パブリックIPアドレス付与される? |
|---|---|---|---|
| 1 | 有効 | 有効 | 付与される |
| 2 | 有効 | 無効 | 付与されない |
| 3 | 有効 | 設定なし(デフォルト) | 付与される |
| 4 | 無効 | 有効 | 付与される |
| 5 | 無効 | 無効 | 付与されない |
| 6 | 無効 | 設定なし(デフォルト) | 付与されない |
なぜ差分が出るのか?
タイトルのような差分が何故出てしまうのかというと、インスタンスを停止すると自動割り当てのパブリックIPアドレスが解放され、associate_public_ip_addressの設定状態と差分が出るからです
| No. | サブネットの設定 | インスタンスの設定 | パブリックIPアドレス付与される? | インスタンス停止状態のTerraform差分 |
|---|---|---|---|---|
| 1 | 有効 | 有効 | 付与される | 差分あり |
| 2 | 有効 | 無効 | 付与されない | 差分なし |
| 3 | 有効 | 設定なし(デフォルト) | 付与される | 差分なし |
| 4 | 無効 | 有効 | 付与される | 差分あり |
| 5 | 無効 | 無効 | 付与されない | 差分なし |
| 6 | 無効 | 設定なし(デフォルト) | 付与されない | 差分なし |
パブリックIPアドレスが付与されるかつインスタンス停止状態でもTerraformの差分が出ない設定の組み合わせが3.の組み合わせです。
EIP付与状態時の差分について
associate_public_ip_addressの設定を無効(FALSE)にするとEIPを付与した時に差分となってしまいます。
| No. | サブネットの設定 | インスタンスの設定 | EIP付与状態時のTerraform差分 |
|---|---|---|---|
| 1 | 有効 | 有効 | 差分なし |
| 2 | 有効 | 無効 | 差分あり |
| 3 | 有効 | 設定なし(デフォルト) | 差分なし |
| 4 | 無効 | 有効 | 差分なし |
| 5 | 無効 | 無効 | 差分あり |
| 6 | 無効 | 設定なし(デフォルト) | 差分なし |
そのため結論に書いたとおり
- インスタンスに
associate_public_ip_addressの設定はしない(デフォルト状態にする) - サブネットの設定は有効にする(
map_public_ip_on_launch=True)
としておくのが一番平和です。

