リモート状態およびワークスペース間アクセス
IBM Cloud® は、Terraform の組み込み リモート状態 管理を提供します。 Terraform 状態ファイルは、実行と実行の間は自動的に保持され、 IBM Cloud® コマンドおよび操作によってアクセスできます。 IBM Cloud® リモート状態管理により、チームの作業およびワークスペースの共有操作が可能になります。組み込み状態のロックにより、同じ状態ファイルに対する同時操作が防止されます。
組み込みワークスペースのリモート状態管理は、いくつかの Schematics ユース・ケースをサポートします。
- ワークスペース間でのリソース情報の共有。 これにより、インフラストラクチャーをより小さなコンポーネントに分割し、 Schematics リモート状態データ・ソースを使用して、環境間で読み取り専用のリソース情報を渡すことができます。 データ・ソースによってリンクされた個別の環境では、インフラストラクチャーのさまざまな要素に対する責任を、読み取り専用リソースとしてワークスペース間で共有される情報を使用して、さまざまなチームに委任することができます。
- ワークスペース操作とアクション操作の 「アクション」 との統合。 ワークスペース・リソース情報は、手動でホスト・インベントリーを作成したり、インベントリー・スクリプトを使用したりすることなく、 Ansible 動的インベントリー として直接渡すことができます。
ワークスペースの状態および出力へのアクセス
ibm_schematics_output および ibm_schematics_state データ・ソースを使用して、アカウント内の他のワークスペースから、ワークスペースで管理するリソースに関する情報にアクセスできます。
IBM Cloud® は、 local 組み込み Terraform 状態サポートを使用し、Terraform バックエンド ・サポートを使用しません。 IBM Cloud® のリモート状態管理を有効にするために、 Terraform configs 内で追加の構成を行う必要はありません。 Schematics は Terraform remote_state データ・ソースを使用しません。代わりに、 ibm_schematics_output データ・ソースを使用して情報にアクセスします。
ibm_schematics_state データソースは remote_state データソースとどう違うのですか?
remote_state データソースを使用する場合は、ワークスペースに接続するバックエンドを構成する必要があります。 ibm_schematics_state データソースを使用すると、自動的に組み込みの Schematics バックエンドにアクセスでき、ワークスペース情報に直接アクセスできます。
他のワークスペースのリソース情報にアクセスするにはどうすればよいですか?
remote_state データ・ソースと同様、Terraform テンプレートで出力値として構成した情報にのみアクセスできます。 例えば、VPC をプロビジョンするために使用したワークスペースがあるとします。 この VPC ID にアクセスするには、Terraform 構成ファイルでこの ID を出力変数として定義しなければなりません。
ibm_schematics_output データ・ソースを使用するには、次のようにします。
-
入門チュートリアルの 例に従って、 Schematics ワークスペースを作成し、VPC 内で仮想サーバーをプロビジョニングします。 手順に従い、
vpc.tfTerraform 構成ファイルの最後で定義されている出力変数を確認します。もしすでに別のTerraform設定ファイルをワークスペースの1つで使っているのであれば、このワークスペースを演習に使うことができます。 この例で取り上げられている出力値を構成ファイルに追加し、後ほどワークスペース情報にアクセスできるようにします。
output sshcommand { value = "ssh root@ibm_is_floating_ip.fip1.address" } output vpc_id { value = ibm_is_vpc.vpc.id }この例では 2 つの出力値、つまり VPC で仮想サーバー・インスタンスにアクセスする
sshcommandとvpc_idが定義されています。 -
作成した VPC ワークスペースの ID を取得します。
コンソールを使用する場合:
- ワークスペース・ダッシュボード
から、VPC ワークスペースを選択します。
- **「設定」**タブを選択します。
- **「サマリー」**セクションでワークスペース ID を確認します。
CLI を使用する場合:
- アカウントで使用できるワークスペースをリスト表示します。
ibmcloud schematics workspace list - コマンド・ライン出力の ID 列でワークスペース ID を確認します。
Schematics
ibmcloud terraformコマンドを使用すると、 エイリアス 'terraform' が非推奨であるため、警告と非推奨メッセージが表示されます。 コマンドには'schematics'または'sch'を使う。 - ワークスペース・ダッシュボード
-
remotestate.tfデータ・ソースを使用してvpc.tfファイルの出力パラメーターにアクセスするため、ibm_schematics_outputという名前の Terraform 構成ファイルをもう 1 つ作成します。 このファイルのバージョン管理を行えるようにするには、この構成ファイルを GitHub リポジトリーまたは GitLab リポジトリーに格納します。data "ibm_schematics_workspace" "vpc" { workspace_id = "<schematics_workspace_ID>" } data "ibm_schematics_output" "vpc" { workspace_id = "<schematics_workspace_ID>" template_id = data.ibm_schematics_workspace.vpc.runtime_data.0.id } output "output_vars" { value = data.ibm_schematics_output.vpc.output_values } output "ssh_command" { value = data.ibm_schematics_output.vpc.output_values.sshcommand } output "vpc_id" { value = data.ibm_schematics_output.vpc.output_values.vpc_id }構成ファイルのコンポーネント 
構成ファイルの構成要素について data.ibm_schematics_workspace.workspace_idアクセスする出力値が定義されている VPC ワークスペースの ID を入力します。 このデータ・ソースは、 ibm_schematics_outputデータ・ソース内のワークスペースのテンプレート ID を取得するために必要です。data.ibm_schematics_output.workspace_idアクセスする出力値が定義されている VPC ワークスペースの ID を入力します。 data.ibm_schematics_output.template_idワークスペースの Terraform テンプレートを参照するには、 data.ibm_schematics_workspace.vpc.runtime_data.0.idを入力します。output.output_vars.valueibm_schematics_outputデータ・ソースのoutput_values出力パラメーターを使用してvpc.tfファイルに定義したすべての出力値にアクセスするには、Terraform 補間構文を使用します。output_values出力パラメーターは、すべての出力値をリストとして返します。output.sshcomand.valueおよびoutput.vpc_id.valueibm_schematics_outputデータ・ソースに出力値の ID を追加すると、output_valuesリスト内の特定の値にアクセスできます。 例えば、vpc_idにアクセスするには、単にdata.ibm_schematics_output.vpc.output_values.vpc_idを使用します。 -
ワークスペースの作成。GitHub または GitLab リポジトリー内の
remotestate.tfファイルを指します。 代わりにローカル・マシンからテープ・アーカイブ・ファイル (.tar) をアップロードする場合は、ibmcloud schematics workspace uploadコマンドを使用します。 -
Schematics で Terraform コードを実行します。 ログを調べると、Output セクションで VPC ワークスペースの出力値を確認できます。
出力例
... 2020/02/21 19:49:30 Terraform show | Outputs: 2020/02/21 19:49:30 Terraform show | 2020/02/21 19:49:30 Terraform show | Output_vars = { 2020/02/21 19:49:30 Terraform show | sshcommand = ssh root@169.61.225.111 2020/02/21 19:49:30 Terraform show | vpc_id = a1a11aa1-a111-a11a-a111-aa1aa11a1a1a 2020/02/21 19:49:30 Terraform show | } 2020/02/21 19:49:30 Terraform show | sshcommand = ssh root@169.61.225.111 2020/02/21 19:49:30 Terraform show | vpc_id = a1a11aa1-a111-a11a-a111-aa1aa11a1a1a