- OpenTofu言語
- プロバイダー
- プロバイダー設定
プロバイダー設定
プロバイダーにより、OpenTofuはクラウドプロバイダー、SaaSプロバイダー、その他のAPIと連携できます。
一部のプロバイダーでは、OpenTofuが使用できるようになる前に、エンドポイントURL、クラウドリージョン、その他の設定を使用してプロバイダーを設定する必要があります。このページでは、プロバイダーの設定方法について説明します。
さらに、すべてのOpenTofu設定では、OpenTofuがプロバイダーをインストールして使用できるように、必要なプロバイダーを宣言する必要があります。プロバイダー要件のページでは、OpenTofuがプロバイダーをインストールできるようにする方法について説明します。
プロバイダー設定
プロバイダー設定は、OpenTofu設定のルートモジュールに属します。(子モジュールはルートモジュールからプロバイダー設定を受け継ぎます。詳細については、モジュール`providers`メタ引数とモジュール開発:モジュール内のプロバイダーを参照してください。)
プロバイダー設定は、`provider`ブロックを使用して作成します。
provider "google" {
project = "acme-app"
region = "us-central1"
}
ブロックヘッダー(この例では`「google」`)で指定された名前は、設定するプロバイダーのローカル名です。このプロバイダーは既に`required_providers`ブロックに含まれている必要があります。
ブロックの本体(`{`と`}`の間)には、プロバイダーの設定引数が含まれています。このセクションのほとんどの引数はプロバイダー自体によって定義されます。この例では、`project`と`region`の両方が`google`プロバイダーに固有です。
これらの設定引数の値には式を使用できますが、設定が適用される前に既知の値のみを参照できます。つまり、入力変数は安全に参照できますが、リソースによってエクスポートされる属性は参照できません(設定で直接指定されたリソース引数の場合を除きます)。
プロバイダーのドキュメントには、期待される設定引数が一覧表示されているはずです。公開OpenTofuレジストリで配布されているプロバイダーの場合、バージョン管理されたドキュメントは、プロバイダーのヘッダーにある「ドキュメント」リンクから各プロバイダーのページで利用できます。
一部のプロバイダーは、シェル環境変数(またはVMインスタンスプロファイルなどの他の代替ソース)を一部の引数の値として使用できます。利用可能な場合は、これを使用して、バージョン管理されたOpenTofuコードから資格情報を除外することをお勧めします。
OpenTofu自体によって定義され、すべての`provider`ブロックで使用できる2つの「メタ引数」もあります。
OpenTofu言語の他の多くのオブジェクトとは異なり、内容が空の場合、`provider`ブロックは省略できます。OpenTofuは、明示的に設定されていないプロバイダーに対して空のデフォルト設定を想定します。
`alias`:複数プロバイダー設定
同じプロバイダーに対して複数の設定をオプションで定義し、リソースごとまたはモジュールごとに使用する設定を選択できます。これを行う主な理由は、クラウドプラットフォームの複数のリージョンをサポートするためです。その他の例としては、複数のDockerホスト、複数のConsulホストなどをターゲットにすることが挙げられます。
特定のプロバイダーに対して複数の設定を作成するには、同じプロバイダー名を持つ複数の`provider`ブロックを含めます。デフォルト以外の追加設定ごとに、`alias`メタ引数を使用して追加の名前セグメントを指定します。例:
# The default provider configuration; resources that begin with `aws_` will use
# it as the default, and it can be referenced as `aws`.
provider "aws" {
region = "us-east-1"
}
# Additional provider configuration for west coast region; resources can
# reference this as `aws.west`.
provider "aws" {
alias = "west"
region = "us-west-2"
}
親モジュールから代替プロバイダー設定を受け取るためにモジュール内で設定エイリアスを宣言するには、そのプロバイダーの`required_providers`エントリに`configuration_aliases`引数を追加します。次の例では、`mycloud`と`mycloud.alternate`のプロバイダー設定名を両方とも、包含するモジュール内で宣言しています。
terraform {
required_providers {
mycloud = {
source = "mycorp/mycloud"
version = "~> 1.0"
configuration_aliases = [ mycloud.alternate ]
}
}
}
デフォルトのプロバイダー設定
`alias`引数のない`provider`ブロックは、そのプロバイダーの*デフォルト*設定です。`provider`メタ引数を設定しないリソースは、リソースタイプの最初の単語に一致するデフォルトのプロバイダー設定を使用します。(たとえば、`aws_instance`リソースは、特に指定がない限り、デフォルトの`aws`プロバイダー設定を使用します。)
プロバイダーのすべての明示的な設定にエイリアスがある場合、OpenTofuは暗黙の空の設定をそのプロバイダーのデフォルト設定として使用します。(プロバイダーに必要な設定引数がある場合、リソースが空の設定をデフォルトにすると、OpenTofuはエラーを発生させます。)
代替プロバイダー設定を参照する
OpenTofuがプロバイダー設定の名前を必要とする場合、`<プロバイダー名>.<エイリアス>`形式の参照を期待します。上記の例では、`aws.west`は`us-west-2`リージョンを持つプロバイダーを参照します。
これらの参照は特別な式です。他の名前付きエンティティ(たとえば、`var.image_id`)への参照と同様に、文字列ではなく、引用符で囲む必要はありません。ただし、`resource`、`data`、`module`ブロックの特定のメタ引数でのみ有効であり、任意の式で使用することはできません。
代替プロバイダー設定を選択する
デフォルトでは、リソースはリソースタイプの最初の単語から推測される(`alias`引数のない)デフォルトのプロバイダー設定を使用します。
リソースまたはデータソースに代替プロバイダー設定を使用するには、その`provider`メタ引数を`<プロバイダー名>.<エイリアス>`参照に設定します。
resource "aws_instance" "foo" {
provider = aws.west
# ...
}
子モジュールに対して代替プロバイダー設定を選択するには、そのproviders
メタ引数を使用して、どのプロバイダー設定をモジュール内のどのローカルプロバイダー名にマッピングするべきかを指定します。
module "aws_vpc" {
source = "./aws_vpc"
providers = {
aws = aws.west
}
}
モジュールには、プロバイダーを渡す際にいくつかの特別な要件があります。詳細はモジュールのproviders
メタ引数を参照してください。ほとんどの場合、プロバイダー設定を定義する必要があるのはルートモジュールだけで、すべての子モジュールは親モジュールからプロバイダー設定を取得します。
version
(非推奨)
version
メタ引数はプロバイダーのバージョンの制約を指定し、required_providers
ブロックのversion
引数と同様に機能します。プロバイダー設定のバージョンの制約は、required_providers
にそのプロバイダーに対する制約が含まれていない場合にのみ使用されます。
required_providers
ブロックで常にプロバイダーのバージョンの制約を宣言してください。