リポジトリでTerraformテンプレートとモジュールを使う
SchematicsとTerraformは、様々なリポジトリタイプからのTerraformテンプレートとモジュールのダウンロードをサポートしています:Terraform Registry、GitHub, GitLab, S3/COS バケット、IBM カタログ、Artifactory などです。 Terraform 資料の Module Sources を参照してください。
Schematicsを使用する場合、Terraform 計画または適用操作を実行する前の Terraform テンプレートおよびモジュールのダウンロードは、2 つのステップからなるプロセスです。 ワークスペースの作成時に、 Schematics は、テンプレートを含むリポジトリーと、サブフォルダー内の組み込みモジュールのみを複製します。 モジュールの source パラメーターを使用して参照されるモジュールは、ワークスペースの作成時にダウンロードされません。
プライベート・リポジトリー内のテンプレート/構成にアクセスするための資格情報は、ワークスペースの作成時に Schematics に渡す必要があります。
source パラメーターで参照されるモジュールは、計画または適用操作の terraform init フェーズ中にダウンロードされます。 terraform init コマンドは、テンプレート・ファイルを解析し、 source フィールドによって参照されるリポジトリーからモジュールをダウンロードします。 プライベート・リポジトリーにあるモジュールでは、追加の資格情報を Terraform
に渡す必要があります。 これらの資格情報は、 Schematicsで使用される資格情報とは別に定義され、渡されます。
プライベート Git リポジトリー、 IBM Cloud カタログ、またはその他のリポジトリーからモジュールをダウンロードするために、Terraform は、必要なアクセス ID とトークンを渡すための netrc 構成の使用をサポートしています。
| リポジトリー |
テンプレート パブリック・リポジトリー |
テンプレート 非公開リポジトリ |
モジュール パブリックリポジトリ |
モジュール プライベートリポジトリ |
コメント |
|---|---|---|---|---|---|
| GitHub | ある | Git トークン-1 | ある | Git トークン-2 | |
| GitLab | ある | Git トークン-1 | ある | Git トークン-2 | |
| IBM GitLab | ある | Git トークン-1 | ある | Git トークン-2 | |
| Terraform.io | いいえ | いいえ | ある | NA |
- ワークスペース作成時に定義Git トークン。
netrcを使用して定義Git トークン。
Schematicsを使用する場合、 __netrc__ 環境変数を使用して、渡される資格情報に対してモジュール資格情報の netrc サポートを構成できます。 __netrc__ 環境変数は、 hostname、 username 、および password 引数のリストを受け入れます。 環境変数の設定は、 Schematics
コマンド行 および APIs を使用する場合にのみサポートされます。 構文は、JSON ペイロード・ファイル内の env_values パラメーターを使用して提供されます。
__netrc__ は、hostname、username、および password 引数の順序を、構文にリストされている順序と同じだと期待しています。
__netrc__ のリストを使用した env_values の構文:
"env_values":[
{
"__netrc__":"[['example.com', 'user1', 'pass1']['example1.com', 'user2' , 'pass2']]"
}
]
テンプレートでのプライベート・モジュールの使用
Schematics は、JSON ファイルで構成された env_values に基づいて .netrc ファイルを内部で作成します。 以下は、コマンドラインとAPIを通じて、 Schematics ワークスペースを作成し、適用するための、すべてのファイルをクローンするための構文とサンプル testexample.json サンプルファイルです。
説明付きの構文:
{
"name": "<workspace_name>",
"shared_data": {
"region": "<region_name>"
},
"type": [
"<terraform_version>"
],
"description": "<description of the workspace>",
"template_repo": {
"url": "<your Git repository with the module>"
},
"template_data": [
{
"folder": ".",
"type": "<terraform_version>",
"env_values": [
{
"__netrc__":"[['<git repository>','<git username>','<git_password>']]"
}
]
}
]
}
ペイロードが netrc の testexample.json の例
{
"name": "testnetrcworkspaceexample",
"shared_data": {
"region": "us-south"
},
"type": [
"terraform_v1.4"
],
"description": "terraform workspace",
"template_repo": {
"url": "https://github.com/xxxx/test-template-private-module"
},
"template_data": [
{
"folder": ".",
"type": "terraform_v1.4",
"env_values": [
{
"__netrc__":"[['github.com','testuser','ghp_x0000000xxxxxxxx000000efZxxxxxxxV']]"
}
]
}
]
}
ワークスペースを作成する例
ibmcloud schematics workspace new --file testexample.json
ibmcloud schematics workspace get --id WORKSPACE_ID コマンドを実行してワークスペースの作成が成功したことを分析するか、ユーザー・インターフェースを使用して、モジュールからのすべてのファイルがプロビジョンするためにワークスペースで複製され、使用されたことを表示します。