【読書メモ】【7章】詳解 Terraform 第3版 ―Infrastructure as Codeを実現する

技術書

 

↓の本の「7章 複数のプロバイダを使う」のメモを残します。


 

前章のメモ

 

1つのプロバイダを使う

プロバイダとは?

 

Terraformにはコアとプロバイダの2つから構成されている。

  1. コア
    基本的なTerraformの機能やコマンドを提供している。
    プロバイダへの橋渡し的なイメージ。
  2. プロバイダ
    Terraformが他のサービスと連携するためのプラグイン。
    AWSなら aws_ といった、固有のプレフィックスを持つ。

 

プロバイダをインストールする流れ

 

  1. 使用するプロバイダーを定義
  2. terraform initコマンドでプロバイダーをインストール

 

「1.  使用するプロバイダーを定義」についてもう少し見ていきます。

オフィシャルのプロバイダーであれば、

みたいにproviderブロックを使うのが一番簡単です。

 

ただ、

  • プロバイダーのバージョンを指定したい
  • オフィシャルではないプロバイダーを使いたい

といった要件に応えることはできない。

 

より詳細にプロバイダーを指定するにはterraformブロックのrequired_providersを使う。

<LOCAL_NAME> providerブロックで指定するための一意なローカルな名前
AWSならawsなど推奨ローカル名を使うことが多い。
source プロバイダのソースを指定。
AWSであれば、“hashicorp/aws” を指定する
<HOSTNAME> プロバイダを提供しているTerraformレジストリのホスト名。
デフォルトがパブリックなTerraformレジストリなので、省略されることが多い。
<NAMESPACE> 組織のネームスペース。
<TYPE> プロバイダが管理するプラットフォーム名
通常はこのTYPEが推奨ローカル名になる。
version プロバイダのバージョンを指定する。
特定のバージョンを指定したり、”~> 5.0″ のように範囲指定もできる

 

では、required_providersを使わず、providerブロックのみの場合はどうなっているのでしょうか?

  • HOSTNAMEがパブリックなTerraformレジストリ、NAMESPACEがhashicorp、TYPEが指定したprovider名としてプロバイダをダウンロード。
    • つまり、providerブロックでhogeとしたときのsourceは、
      registry.terraform.io/hashicorp/hoge となる。
  • バージョンは指定できず、最新バージョンをインストール。

 

常に最新バージョンを使用すると、バージョンアップによる影響を把握しきれません。
運用中の環境でデプロイが失敗してしまうリスクがあるため、バージョンを指定できるrequired_providersを常に使うようにしましょう。

 

プロバイダをどう使うか

 

providerブロックで指定できる項目はいくつもあり、それらはコード全体に適用できます。

AWSであれば、操作するリージョンやリソースにつけるタグなどがあります。

詳細は公式のドキュメントを見てみましょう。

 

同じプロバイダのコピーを複数使う

複数のリージョンを使う

 

複数のリージョンを使うにはproviderブロックでaliasを使う。

モジュールではprovoidersブロックを使用する。
ブロック内のキーはモジュール内のローカルなプロバイダ名と一致する必要があるため、モジュールでもrequired_providersを定義しておいた方がいい

 

CloudFrontようにバージニア北部へACMを作成する必要がある場合などはaliasがとても便利。

↓の記事でやってみました

 

1つのモジュール=1つのリージョンが理想であったり、複数リージョンの管理が大変になるなどコードとは別のところで考慮することはある。

 

複数のAWSアカウントを使う

 

複数アカウントを使う理由

  1. 分離
    • 環境ごとにアカウントを作ることである環境での障害が他へ影響しないよう
  2. 認証と認可
    • 環境ごとのアクセス制限や権限の付与が容易
  3. 監査
    • アカウントごとのコストの計測やセキュリティレベルの把握が容易

 

Terraform コードではproviderブロックでaliasとassume_roleを使用して実装できる

 

複数のプロバイダを使えるモジュールを使う

 

再利用可能なモジュールでproviderブロックを使用するべきではありません。

  1. providerブロックの豊富なパラメータをモジュールで定義することになる
  2. 複数のモジュール間でproviderの設定を合わせるのが困難
  3. providerブロックごとにプロセスが起動して重くなる

 

では、モジュールで複数プロバイダを扱うにはどうしたらよいでしょうか?

requires_providersブロック内でconfiguration_aliases設定エイリアス)を使う。

 

設定エイリアスを定義すると、必須の入力変数になる

 

異なる複数プロバイダを使う

 

複数のproviderブロックを使って各プロバイダを定義する。

ただ、リージョンやアカウント同様、1モジュール=1プロバイダが理想

 

次章のメモ

 


コメント

タイトルとURLをコピーしました