Terraform
IBM Cloud Schematics ワークスペースに関するよくある質問への回答は、以下のセクションに分類されています。
IBM Cloud Schematics は複数の Terraform プロバイダー・バージョンをサポートしていますか?
はい、IBM Cloud Schematics は複数の Terraform プロバイダー・バージョンをサポートしています。 Terraformプロバイダブロックをプロバイダのバージョンとともに追加する必要があります。 デフォルトでは、プロバイダーは最新バージョン 1.21.0
を実行し、 1.20.1
、 1.20.0
、 1.19.0
、 1.18.0
など過去4つのバージョンもサポートしています。
複数プロバイダー構成の例:
terraform{
required_providers{
ibm = ">= 1.21.0" // Error !! version unavailable.
ibm = ">= 1.20.0" // Execute against latest version.
ibm = "== 1.20.1" // Executes version v1.20.1.
}
}
現在は、バージョン 1.21.0 がリリースされています。 詳しくは、 プロバイダー・バージョン を参照してください。
Terraform のバージョンを更新するにはどうすればよいですか
IBM Cloud Schematics では、Terraform の旧バージョンが非推奨となります。 詳しくは、IBM Cloud Schematics での旧バージョンの Terraform プロセスの非推奨を参照してください。
IBM Cloud Schematics は、 IBM Cloud Provider Plug-in for Terraform v1.2、 v1.3 テンプレートを使用したワークスペースの作成を 2024 年 4 月第 2 週から非推奨にします。
トピックを追うことで、Terraformのバージョンをアップグレードできます
コマンド・ラインを使用して Git リポジトリーからコードを pull latest
するにはどうすればよいですか?
コマンド・ラインを使用して IBM Cloud® Schematics ワークスペースを更新するには、必要なフィールド name
が必要です。
ibmcloud schematics workspace update --id <workspace-id> --file <updatefile.json>
コマンドを実行する必要があります。 サンプル updatefile.json
には、値を持つ名前フィールドが含まれています。
{
"name":"testworkspace"
}
ランタイムではどのようなツールおよびユーティリティーが使用されますか?
Schematics ランタイムは、Universal Base Image( )を使用して構築されており、 に付属するランタイム は、Terraformのプロビジョニングと のアクションに使用できます。 UBI-8 UBI-8 utilities/softwares
Ansible 詳しくは、 Schematics ランタイムで使用される ツールおよびユーティリティー のリストを参照してください。
CLI を使用してワークスペースを作成する際の Git トークンの問題を修正するにはどうすればよいですか
schematics workspace new --file schematic-file.json -g xxxx
コマンドを使用すると、コマンドにトークンが指定されていないため、 Access token creation failed status
がスローされます。
コマンド・ラインを使用して操作を実行する前に、 認証 を確認する必要があります。 次に、 schematics workspace new --file schematic-file.json --github-token xxxx
コマンドを使用してワークスペースを作成します。 詳しくは、 ibmcloud schematics workspace new
コマンドを参照してください。
ワークスペースの作成または更新時に許可の問題を修正するにはどうすればよいですか?
ワークスペースを更新する際に、役割やアクセス権限が不十分である場合に認証の問題が発生します。 詳細は 、「ユーザーアクセス権の管理 」を参照してください。
テスト ID で Schematics サービスを使用する方法
テストIDは、グローバルカタログまたはリソースコントローラ関連のAPIコールを設定するための有効な IBM ID
と見なされます。 アクセスできない場合は、 サポート・サービス窓口 に問い合わせてください。
Git リポジトリー・フォルダーのクローン作成を制限する方法
デフォルトでは、UI を使用してワークスペースを作成する場合、 Schematics は、デフォルトで完全な Git リポジトリーとすべてのサブディレクトリーを複製します。 Use full repository
フラグを選択解除して、複製されるフォルダーを制限し、ダウンロードのパフォーマンスを向上させます。
Schematics では、 sub directories
を Git リポジトリーにダウンロードするために、 ワークスペースの作成 および ワークスペースの更新 API に compact
フラグが導入されました。 コンパクトフラグがtrueに設定されている場合、 sub directories
を再帰的にダウンロードして保存します。そうでない場合は、ワークスペース作成時にリポジトリ全体をダウンロードして保存し続けます。
get workspace API
を起動してコンパクトフラグの値を表示すると、応答を得ることができます。 template_repo.url
フィールドが渡された場合のみ、コンパクトフラグを付与することができます。 更新時に、このフィールドが渡されず、 URL が渡された場合、ダウンロードはコンパクトになります。
ペイロードでのコンパクトの使用は .template_data[0].compact = true/false
です。 詳しくは、 Schematics ワークスペースのコンパクト・ダウンロード を参照してください。
削除が失敗したときにワークスペースを削除する方法
Schematicsの外部でリソースが削除された場合、ワークスペースの削除操作ではそれが resource no longer exists
として表示されます。
ワークスペースを削除する必要がありますが、リソースを破棄して利用できなくしてはいけません。 詳しくは、ワークスペースの削除 を参照してください。
資格情報またはシークレットを使用して Helm チャートをデプロイする最善の方法は何ですか?
最良の方法は、IBM Cloud カタログを使用して Helm チャートを管理する方法です。チャートでは、カタログ内で資格情報を保持し、それに保護マークを付けることができます。 詳しくは、 Helmに関連するカタログのリスト を参照してください。
保守アクティビティーが原因で発生するジョブ障害に対処するにはどうすればよいですか?
保守による予期しない影響により、Schematics ワークスペースで実行中のアクティビティーが失敗します。 このようなワークスペースと進行中の活動は、 Failed
としてマークされます。 その後、ユーザーはアクティビティーを再実行できます。 詳しくは、 ワークスペースの状態遷移図 を参照してください。
Git リリース・タグをどのように設定しますか?
2021/11/08 12:34:06 ----- New Action -----
2021/11/08 12:34:06 Request: RepoURL=https://github.ibm.com/wh-hp-insights/hi-cloud-automation, workspaceSource=Schematics, Branch=2021.10, Release=, Folder=terraform-v2/workspace-hi-qa-automation-app
2021/11/08 12:34:06 Related Activity: action=UPDATE_WORKSPACE,processedBy=sandbox-6bcf8bffcd-rxbww_2478
2021/11/08 12:34:06 Getting download command
2021/11/08 12:34:11 Fatal, could not download repo, Failed to clone git repository, couldn't find remote ref "refs/heads/2021.10" (most likely invalid branch name is passed)
2021/11/08 12:34:12 Problems found with the Repository. Please Rectify and Retry
Release
パラメーターが空で、Branch
がリリース・タグで設定されている場合。
Schematics release
タグはサポートしていません。 リポジトリからのリリースタグなのかブランチなのかを特定するのが難しいからです。。 Git URL Schematics API を使用して release
タグを設定する必要があります。
無効なワークスペース ID を使用すると 404 エラーではなく 403 エラーが表示されるのはなぜですか?
curl -X GET https://schematics.cloud.ibm.com/v1/workspaces/badWOrkspaceId -H "Authorization: $IAM_TOKEN"
{"requestid":"3a3cbffe-e23a-4ccf-b764-042f7379c084","timestamp":"2021-11-11T17:00:07.169953698Z","messageid":"M1078","message":"Error while validating the location in the account. Verify you have permission to the location in the global catalog settings.","statuscode":403}
はい、APIに変更があり、まず場所を確認し、ワークスペースの適切な場所を取得できない場合は、404エラーではなく403エラーを返すようになっています。
Terraform デバッグ・ロギングを有効にする方法
サンプル・ペイロードに示されているように、ペイロードに Terraform ログ・デバッグ TF_LOG=debug
トレースを設定するための環境変数を設定できます。 詳しくは、 Schematics のワークスペースの更新 を参照してください。
{
"name": "sample",
"type": [
"terraform_v1.4"
],
"description": "terraform workspace",
"tags": [
],
"template_repo": {
"url": "<your repo>"
},
"template_data": [
{
"folder": ".",
"type": "terraform_v1.4",
"env_values":[
{
"TF_LOG":"debug"
}
]
}
]
}
クラウド・リソースをワークスペースにインポートする方法
コマンド行からインポートするには、 ibmcloud schematics workspace import --options value, -o value : Optional
コマンドとサンプル構文を使用します。 詳しくは、 Schematics ワークスペースのインポート を参照してください。
ibmcloud schematics workspaces import --id <workspace_id> --address <my terraform resource address> --resourceID <the CRN of the item to import> --options "-var IC_API_KEY=XXXXXXXX"
or
ibmcloud schematics workspaces import --id <workspace_id> --address <my terraform resource address> --resourceID <the CRN of the item to import> --options "--var-file=<path-to-var-file>"
ジョブ・ファイルをダウンロードするにはどうすればよいですか?
はい。Schematics ジョブ・ファイルはダウンロード可能です。 詳しくは、「Schematics ジョブ・ファイルのダウンロード」を参照してください。
Terraform リソースのタイムアウトの失敗を解決するにはどうすればよいですか?
Terraform ブロックに示されているように、サービスに応じてタイムアウト値を 5 分または 10 分に更新する必要があります。 または、 null value
を送信してデフォルト値を使用する必要があります。
variable "create_timeout"
{
type = String
description = "Timeout duration to create LogDNA instance in Schematics."
default = "15m"
}
TF_CLI_ARGS 環境変数を設定するにはどうすればよいですか?
いいえ、 Schematics ワークスペースコンソールで直接環境変数の値を設定することはできません。 代わりに、 Schematics API、または Schematics コマンド・ライン を使用して CURL を使用できます。
"env_values": [
{
"TF_LOG": "debug"
},
]
モジュールにプライベート Git リポジトリーを使用できますか?
はい、 Schematics は、プライベート・リポジトリーからの Terraform モジュールのダウンロードをサポートしています。 詳しくは、プライベート・リモート・ホストからモジュールをダウンロードするサポートを参照してください。
ワークスペース内のすべての変数を編集できますか?
Schematics コンソールから一度に編集できる変数は1つだけです。 コマンド行から ibmcloud schematics workspace update
コマンドを使用すると、ワークスペースのすべての変数を JSON 形式で編集できます。
KMS リソースのインポート時に鍵をインポートするにはどうすればよいですか?
はい。サンプル・コード・ブロックに示されているように、 ibm_kms_key
を使用して鍵を設定または管理できます。 詳しくは、 ibm_kms_key を参照してください。
resource "ibm_resource_instance" "kms_instance" {
name = "instance-name"
service = "kms"
plan = "tiered-pricing"
location = "us-south"
}
resource "ibm_kms_key" "test" {
instance_id = ibm_resource_instance.kms_instance.guid
key_name = "key-name"
standard_key = false
force_delete =true
}
resource "ibm_cos_bucket" "smart-us-south" {
bucket_name = "atest-bucket"
resource_instance_id = "cos-instance-id"
region_location = "us-south"
storage_class = "smart"
key_protect = ibm_kms_key.test.id
}
ワークスペースのリストコマンドを実行中に、 Schematics APIのデバッグを支援するためにTRACEを有効にすることはできますか?
いいえ。現在、 IBMCLOUD_TRACE=true ibmcloud schematics workspace list
コマンドの実行中は Schematics はこの機能をサポートしません。
ワークスペースのリストでのエラーを解決するにはどうすればよいですか?
ワークスペースをリストまたは取得するときに、以下のエラーを受け取ることがあります。 Error while retrieving Schematics Instance for the given account
Error:
Bad status code [400] returned when getting workspace from Schematics: {"requestid":"fe5f0d6d-1d43-4643-a689-35d090463ce8","timestamp":"2022-01-25T20:23:54.727208017Z","messageid":"M1070","message":"Error while retrieving Schematics Instance for the given account.","statuscode":400}
指定された場所にあるワークスペースでインスタンスを取得するためのアクセス権が不十分である可能性があります。 アカウントに提供されている権限と、インスタンスを作成する必要がある場所を確認してください。 詳しくは、 情報の保管場所 を参照してください。
(IBM) GitLab リポジトリーはどのように使用できますか?
はい、 Schematics を使用することで、 IBM および GitLab リポジトリにアクセスする権限を得ることができます。
-
プライベート( IBM ) GitLab リポジトリ
git.cloud.ibm.com
アクセストークンが不要な場合は、IAMトークンを使用します。 -
プライベート・リポジトリーのブランチ名を検証するためにパブリック GitLab
gitlab.com
、read_repository
、およびread_api
アクセス権限が必要な場合。
GitLab リポジトリの詳細を設定するには、サンプルの Terraform コードブロックを使用できます。
"template_repo": {
"url": "<gitlab_source_repo_url>",
"branch": ""
},
Schematicsで IAM アクセス・グループを管理できますか?
はい。Schematics は、完全な IBM Cloud プロバイダー・リソース・セットをサポートしています。 IAM アクセス・グループの機能について詳しくは、 ibm_iam_access_group を参照してください。
別のアカウントのリソースを操作するにはどうすればよいですか?
はい、 IBM Cloud ソース・アカウントで Schematics ワークスペースを作成できます。 次に、ターゲット・アカウント内のリソースを提供する Terraform を実行して、CLI を使用してプロビジョンし、ターゲット・アカウント・サービス ID と認証、適切なアカウント間許可、または API キーを使用して API 呼び出しを行います。 詳しくは、 他のアカウントのリソースの管理 を参照してください。
North America
の場所は何を示していますか?
Schematics ワークスペースの作成時に、北米は常に us-south
、 us-east
の両方の場所を示します。 詳しくは、 どこで Schematics ワークスペースを作成できますか?、および どこに情報が保管されますか? を参照してください。
Schematicsで使用されているポートと IP アドレスは何ですか?
Schematics 関連リソースで指定されたポートと通信します。 例えば、VPC関連のポートについては、 VPC: 他のネットワークファイアウォールで必要なポートとIPアドレスを開く を参照してください。
Schematics と個々のリソースダッシュボードは、どのような場合に使い分ければよいのでしょうか?
IBM Cloud Schematics を使用すると、 IBM Cloud でインフラストラクチャコードを実行して、クラウドリソースのライフサイクルを管理することができます。 リソースをプロビジョンした後は、個々のリソースのダッシュボードを使用して、リソースの操作や対話を行います。 例えば、 IBM Cloud Schematics で仮想プライベートクラウド(VPC)に仮想サーバーインスタンスをプロビジョニングする場合。 VPC コンソール、API、またはコマンド・ラインを使用して、仮想サーバー・インスタンスを
stop
、 reboot
、および power on
することができます。 ただし、仮想サーバーインスタンスを削除するには、 IBM Cloud Schematics をご利用いただけます。
Git リポジトリーに対する変更は Schematicsでリフレッシュされますか?
いいえ、 GitHub, で Terraform テンプレートのコードを変更しても、 IBM Cloud Schematics で実行プランを作成する際に、これらの変更が自動的に反映されることはありません。 GitHub リポジトリから現在の変更をプルするには、実行計画を作成する前に、ワークスペースの settings
ページから Pull latest
オプションをクリックしてください。
Terraform 状態ファイルはどこに保管されますか?
Schematics を適用するアクションを実行してクラウドリソースのプロビジョニングに成功すると、リソースの状態がTerraform状態ファイル(terraform.tfstate
)に保存されます。 Schematics は、この状態ファイルを唯一の真実の情報源として使用し、お客様のアカウントに存在するリソースを決定します。 ステートファイルは、Terraform構成ファイルで指定したリソースを、プロビジョニングしたクラウドリソースにマッピングします。
ワークスペースの削除時にリソースは削除されますか?
IBM Cloud Schematics からワークスペースを削除しても、クラウドリソースは削除されません。 リソースを削除する前にワークスペースを削除すると、個々のリソースダッシュボードからすべてのクラウドリソースを手動で削除する必要があります。
クラウドリソースの削除は元に戻せません。 リソースを削除する前に、すべてのデータをバックアップしたことを確認してください。 リソース定義を削除するか、Terraform 構成ファイル内のリソースをコメント化すると、リソースは削除 (削除) されます。 プラン・ログ・ファイルを調べて、すべてのリソースが削除に含まれていることを確認します。
ワークスペースの環境変数を設定できますか?
CLI および API を使用して、ワークスペースの env values
を設定できます。 詳しくは、 env_values
の使用法 を参照してください。
サンプル・ペイロード
{
"name": "newName",
"template_data": [
{
"type": "<same_as_before>",
"env_values": [
{
"env_key1": "dummy_text"
},
{
"env_key2": "dummy_text"
}
],
"env_values_metadata": [
{
"name": "env_values_1",
"hidden": false,
"secure": false
},
{
"name": "env_values_2",
"hidden": false,
"secure": false
}
]
}
]
}
ドリフト検出は自動的に実行されますか?
いいえ、 IBM Cloud Schematics では漂流検知は自動検知方法ではありません。 詳しくは、 Schematics を参照してください。
ドリフト検出を開始するにはどうすればよいですか?
UI および CLI を使用してドリフト検出を開始できます。 詳しくは、 Schematics を参照してください。
ドリフト検出ジョブのステータスはどこで確認できますか?
ドリフト検出ジョブの結果を確認するには、ドリフト検出ジョブのログを確認する必要があります。 ジョブ・ログには、ドリフト検出の詳細が in progress
または completed
として示され、該当する状況 (failure
や success
など) が示されます。 詳しくは、 Schematics を参照してください。
実行中のジョブは interrupt
または terminate
できますか?
はい、ジョブ・タイプを使用して、Schematics のプロビジョニング・リソースまたは実行中のジョブを中断、強制停止、または強制終了することができます。 詳しくは、 ジョブ・タイプの停止 を参照してください。
Incorrect Location Input
エラーを訂正するにはどうすればよいですか?
エラー
{
"requestid": "3f59c342-cd2c-4703-aa10-9e8e7072a3ac",
"timestamp": "2022-06-28T20:02:58.529765308Z",
"messageid": "M1097",
"message": "Incorrect Location Input.",
"statuscode": 400
}
Schematics グローバル・エンドポイントは、デフォルトで us
環境に設定されます。 そのため、 リージョン・エンドポイント を使用して、ロケーションが eu-de
リージョンを指すようにする必要があります。
ワークスペース・リソースの表示方法
state list
CLI コマンドを使用して、 IBM Cloud Schematics UI と同じリソースを表示します。
CreateworkspaceWithContext failed Bad request
エラーを修正するにはどうすればよいですか?
エラー
CreateWorkspaceWithContext failed Bad request. Check that the information you entered in the payload is complete and formatted correctly in JSON.
デフォルトでは Schematicsのパブリックまたはプライベートエンドポイントのグローバル URL は、 us
の地域を指しています。 回避策として、Terraform コマンドの前に 環境変数キー を設定できます。
```sh
export IBMCLOUD_SCHEMATICS_API_ENDPOINT="https://eu-de.schematics.cloud.ibm.com"
```
エンドポイントを JSON ファイルに追加して、エンドポイント・サービスをパブリックまたはプライベートに分類することもできます。
プロバイダー宣言の例
{
"IBMCLOUD_SCHEMATICS_API_ENDPOINT":{
"public":{
"eu-de":"https://eu-de.schematics.cloud.ibm.com"
}
}
}
プロバイダー・ブロックの例
provider "ibm" {
endpoints_file_path= "endpoints.json"
}
状態ファイル内の機密値は暗号化されていますか?
Schematics は、保管時に Terraform 状態ファイルを暗号化し、TLS を使用して転送中にも暗号化します。 Terraform は、機密性の高い値を個別に暗号化しません。 詳しくは、状態ファイル内の sensitive-data を参照してください。
CLI を使用して定義されたワークスペース変数が 400 エラーをスローするのはなぜですか?
Schematics ワークスペース・リスト変数ストアの値は、常に HCL ストリングでなければなりません。 value
フィールドには、リスト、マップ、または複合変数の変数ストアのエスケープ・ストリングが含まれている必要があります。 詳しくは、 宣言された変数の Schematics への値の提供 を参照してください。
JSON
ファイルを使用して Terraform のバージョン (TF_VERSION
) を更新できますか?
現在、 TF_VERSION
を更新するための回避策は、変数ストアの更新中に TF_VERSION
を渡すことです。 Schematics は、 TF
ファイルの Terraform バージョン・ブロックで指定されている内容を自動検出します。 これがデフォルトの動作です。
詳しくは、 バージョンの設定と変更 を参照してください。
各ジョブ実行で新しい Terraform 状態ファイルを使用して開始できますか?
いいえ、新規ワークスペースを作成する必要があります。 詳しくは、「 ワークスペース・ジョブの実行」を参照してください。
既存の Terraform 状態ファイルをインポートできますか?
はい。 ibmcloud schematics workspace new で --state
フラグ・オプションを使用できます。
文字の最大可変長は何文字ですか?
Schematics ワークスペース変数がサポートする文字の最大長は 1 MB です。
インポートする最大状態ファイルは何ですか?
terraform.tfstate
ファイルは 16 MB 未満でなければなりません。 既存の Terraform 状態ファイルからワークスペースを作成する場合、 terraform.tfstate
ファイルは 16 MB 未満でなければなりません。 16 MB を超える状態ファイルは、 Schematicsではサポートされていません。 413 Request Entity Too Large error when creating a new workspace
とともにエラー・メッセージが表示されます。
API の使用時に認証エラーを修正するにはどうすればよいですか?
お客様の IBM Cloud アカウント用の IAM アクセス・トークンを作成する必要があります。 詳しくは、 トークン・パスワードの取得を参照してください。 認証エラーの例と解決策は以下の通りです。
Error: Request fails with status code: 400, BXNIMO137E: For the original authentication, client id 'default' was passed, refresh the token, client id 'bx' is used.
IAM API ドキュメントでは、 default token
の作成方法が説明されています。 IAM アクセス・トークンの有効期限が切れた場合は、refresh token
を使用して新しい IAM アクセス・トークンを取得できます。 この資料で説明されているデフォルト・クライアント
(基本許可ヘッダーなし) の場合。 refresh_token
は、新しいIAMアクセストークンの取得には使用できません。 IAM アクセス・トークンの有効期限が切れそうになったら、リストされているように API キーを使用して新しいアクセス・トークンを作成します。
-
access_token
とrefresh_token
を作成する必要があります。export IBMCLOUD_API_KEY=<ibmcloud-api_key> curl -X POST "https://iam.cloud.ibm.com/identity/token" -H "Content-Type: application/x-www-form-urlencoded" -d "grant_type=urn:ibm:params:oauth:grant-type:apikey&apikey=$IBMCLOUD_API_KEY" -u bx:bx
-
ステップ 1 で取得した
access_token
およびrefresh_token
を、ACCESS_TOKEN
およびREFRESH_TOKEN
の環境変数としてエクスポートします。export ACCESS_TOKEN=<access_token> export REFRESH_TOKEN=<refresh_token>
-
ワークスペースの作成
curl --request POST --url https://cloud.ibm.com/schematics/overview/v1/workspaces -H "Authorization: Bearer <access_token>" -d '{"name":"","type": ["terraform_v1.4"],"description": "","resource_group": "","tags": [],"template_repo": {"url": ""},"template_data": [{"folder": ".","type": "terraform_v1.4","variablestore": [{"name": "variable_name1","value": "variable_value1"},{"name": "variable_name2","value": "variable_value2"}]}]}'
Schematics ワークスペース ID を環境変数として取得する方法
以下のコードを使用して、 Schematics ワークスペース ID を環境変数として取得できます。 プランまたは適用を実行する前に、 IC_SCHEMATICS_WORKSPACE_ID
、 TF_VAR_IC_SCHEMATICS_WORKSPACE_ID
、 TF_VAR_IC_SCHEMATICS_WORKSPACE_RG_I
、 IC_IAM_TOKEN
、および IC_IAM_REFRESH_TOKEN
の各環境変数が Terraform スクリプトに自動的に設定されます。
data "external" "env" {
program = ["jq", "-n", "env"]
}
output "workspace_id" {
value = "${lookup(data.external.env.result, "TF_VAR_IC_SCHEMATICS_WORKSPACE_ID")}"
ワークスペースで使用可能なすべての環境変数を表示するには、 output "${jsonencode(data.external.env.result)}"
コードを使用します。
Schematicsオブジェクトを削除する際、ブローカー・コールによる401エラーを修正するにはどうすればよいですか?
Schematicsオブジェクト削除後、Schematicsサービスがアカウント内のオブジェクトの削除に失敗した場合。 リソースコントローラから削除するには、Schematics サポートチケット を発行する必要があります。