Oracle Cloud Infrastructureドキュメント

Terraform状態ファイル用のオブジェクト・ストアの使用

Oracle Cloud Infrastructure オブジェクト・ストレージ「Terraformの状態ファイル」を格納することができます。 これを行うには、Terraformバックエンド・タイプの1つを使用してバックエンドを構成する必要があります。

Terraformはさまざまなバックエンド・タイプをサポートしており、状態ファイルをTerraformにロードする方法を柔軟にすることができます。 詳細については、「Terraformバックエンドのタイプ」を参照してください。 私たちの目的のために、我々は次の2つのアプローチに取り組んでいます:

  • HTTPリモート状態バックエンドの使用
  • S3互換リモート・ステート・バックエンドの使用

HTTPバックエンドの使用

「HTTPバックエンド・タイプ」を使用すると、単純なRESTクライアントを使用して状態を格納できます。 HTTPバックエンド・タイプを使用すると、HTTP GETPOST、およびDELETE メソッドを使用して、簡単にフェッチ、更新、およびパージを行うことができます。

Oracle Cloud Infrastructure Terraform状態ファイルを保存するようにHTTPバックエンドを構成するには、次の手順を実行します:

事前認証済リクエストを作成

Oracle オブジェクト・ストレージで事前認証済リクエストを作成すると、資格証明を提供する必要なく、Oracle Cloud Infrastructure内のバケットまたはオブジェクトにアクセスできます。 これを行うには、Terraform状態ファイルを保存するオブジェクト・ストアに対する読み取り/書き込み権限を持つ事前認証済リクエストを作成する必要があります。 3つの方法のいずれかでそうすることができます: コンソール UIを使用するか、コマンドライン・インタフェース(CLI)を使用するか、REST APIを使用します。

ノート

事前認証済リクエストを作成する前に、状態ファイルがバケットに存在している必要があります。
このファイルは、既存の状態ファイルでも、初期状態の空のファイルでもかまいません。

ガイダンスについては、「事前認証済リクエストの使用」を参照してください。

既存の状態をアップロード

既存の状態ファイルがある場合、Curlを使用してファイルをアップロードして、以下に示すように、オブジェクト・ストアURLへのHTTP Putリクエストを作成できます:

curl -X PUT -H "Content-Type: text/plain" --data-binary "@path/to/local/tfstate" http://<prefix>/<my-access-uri>

HTTPをTerraformバックエンドとして構成

「HTTPバックエンド・タイプ」は単純なRESTクライアントを使用して状態を格納し、HTTP GETPOST、およびDELETE メソッドを使用して簡単にフェッチ、更新、パージを行うことができます。

Oracle Cloud InfrastructureのTerraform構成をアドレス指定するためのアクセスURIは、次の形式でなければなりません: https://objectstorage.us-phoenix-1.oraclecloud.com/my-access-uri (リージョンとアクセスURIはあなたに特有のものです)。

コードを参照するその他の構成ファイルと状態ファイル、および構成変数の要約については、「標準バックエンド: HTTP」を参照してください。

Terraformの構成例を次に示します。 URLのリージョンは、フェニックス・リージョン以外のリージョンにすることができます。

terraform {
   backend "http" {
     address = "https://objectstorage.us-phoenix-1.oraclecloud.com/<my-access-uri>" update_method = "PUT" }
}

Terraformの再初期化

最後に、次のようにTerraformを再初期化してからapply コマンドを実行する必要があります。

terraform init
terraform apply

これらのステップを完了すると、Terraformの状態ファイルを格納するためのバックエンドとしてOracle Cloud Infrastructureを使用できます。

S3互換のバックエンドの使用

S3互換のバックエンドを構成するには、ユーザーごとに構成されたS3認証キーを使用してアカウントを有効にする必要があります。

  1. コンソール「ナビゲーション・メニュー」を開き、ガバナンスと管理「アイデンティティ」に移動し、「ユーザー」に移動します。 「ユーザーの詳細」で、「顧客秘密キー」をクリックします。 ガイダンスは、Amazon S3互換性APIキーの操作」を参照してください。
  2. 資格証明ファイルのロケーションを設定します。 デフォルトのロケーションは~/.aws/credentialsです。 S3バックエンドshared_credentials_file optionを使用して別のロケーションを設定することができます。

    警告

    access_key属性とsecret_key属性を同一のTerraformバックエンド構成に設定しないでください。セキュリティ上のリスクが生じるためです。

  3. 資格証明ファイル内の[default]エントリを適切なオブジェクト・ストレージ資格証明で構成します。 ファイルには、任意の数の資格証明プロファイルを含めることができます。 別のプロファイル名を指定する場合は、Terraform構成ファイルのバックエンド profileオプションも更新する必要があります。

    次に、オブジェクト・ストレージ資格証明の例を示します:

    [default]
    aws_access_key_id=ocid1.credential.oc1..aaaaaaaasbmhehdmefolvqwtbdjgwfsxjsgxgipdbph7odn2brgurgsyztca
    aws_secret_access_key=mSTdaWhlbWj3ty4JZXlm0NUZV52xlImWjayJLJ6OH9A=

    ここで、aws_access_key_idaws_secret_access_keyは、コンソールから提供されるユーザー固有の値です。 この例で提供されているキー値は有効ではなく、例としてのみ提供されています。

  4. オブジェクト・ストレージendpointの値を次の形式で設定します:

    https://{namespace}.compat.objectstorage.{region}.oraclecloud.com

以下は、オブジェクト・ストレージ・バックエンド構成の完全な例です:

terraform {
  backend "s3" {
    bucket   = "terraform-state"
    key      = "terraform.tfstate"
    region   = "us-phoenix-1"
    endpoint = "https://acme.compat.objectstorage.us-phoenix-1.oraclecloud.com"

    skip_region_validation      = true
    skip_credentials_validation = true
    skip_requesting_account_id  = true
    skip_get_ec2_platforms      = true
    skip_metadata_api_check     = true
    force_path_style            = true
  }
}

ノート

S3バックエンド構成は、Terraformプロジェクト間で状態を共有できるようにするために、terraform_remote_stateデータソースにも使用できます。

バックエンドを構成したら、terraform initを実行して構成を完了する必要があります。 既存のterraform.tfstateファイルがすでに存在する場合、Terraformは現在の状態ファイルがリモート状態にアップロードするものであることを確認するように求めます。

詳細情報