メインコンテンツへスキップ

プロバイダー設定

プロバイダーにより、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ブロックで常にプロバイダーのバージョンの制約を宣言してください。