この記事では、 Azure Export for Terraform ワークフローについて説明します。 この記事では、ツールのベスト プラクティス ガイダンス、現在の制限事項、およびそれらの制限を軽減する方法について説明します。
対話型モード
既定では、Azure Export for Terraform は対話型モードで実行されます。 対話型モードで実行すると、使用可能なキーボード ショートカットがディスプレイの下部に表示されます。
課題 | キーボード ショートカット |
---|---|
ナビゲーション | |
リソース一覧で前の項目を選択します。 | 上方向キーまたは K キー |
リソース一覧で次の項目を選択します。 | 下方向キーまたは J キー |
リソース一覧の前のページに移動します。 | 左方向キーまたは h キーまたは Page Up キー |
リソース一覧の次のページに移動します。 | 右方向キーまたは l キーまたは Page Down キー |
リソース 一覧の先頭に移動します。 | g -または- ホーム |
リソース 一覧の末尾に移動します。 | G -または- 終了 |
スキップするリソースの選択 | |
リソースをスキップする ("Skip" とマークされている場合はスキップ解除) | 削除 |
フィルター操作 | |
リソース 一覧のテキストでフィルターを定義します。 | / |
現在のフィルターをクリアする | Esc キー |
保存操作 | |
リソース リストのマッピング ファイルを保存します。 出力ファイルはスキップによって影響を受けます (ただし、フィルター処理は行われません)。 | s |
リソースを状態にエクスポートし ( --hcl-only が指定されていない場合)、構成を生成します。 |
w |
ユーザー エクスペリエンス | |
現在のリソースの推奨事項を表示します。 | r |
リソース エクスポート エラーを表示します (存在する場合)。 | e |
ヘルプを表示します。 | ? |
辞める | |
対話モードを終了します。 | q |
リソースごとに、Azure Export for Terraform は対応する Terraform リソースの種類を認識しようとします。 一致が見つかると、行は次のインジケーターでマークされます: 💡。
リソースを解決できない場合は、Terraform リソース アドレスを次の形式で入力する必要があります: <resource type>.<resource name>
。 たとえば、 azurerm_linux_virtual_machine.test
は Terraform リソースの種類のazurerm_linux_virtual_machineを参照し、 test
は構成ファイルで使用される仮想マシンの名前を参照します。
選択したリソースで使用可能なリソースの種類を確認するには、 r キーを押します。
場合によっては、対応する Terraform リソースがない Azure リソースがあります。たとえば、リソースに Terraform のサポートがない場合などです。 一部のリソースは、仮想マシンのプロビジョニング時に作成される OS ディスク リソースなど、別のリソースのプロビジョニングの副作用として作成される場合もあります。 このような場合は、何も割り当てずにリソースをスキップできます。
インポートするすべてのリソースを確認したら、 w キーを押して Terraform 構成の生成を開始し、( --hcl-only
が選択されていない場合は) Terraform 状態にインポートします。
非対話型モード
既定では、Azure Export for Terraform は対話型モードで実行されます。 ツールを非対話型モードで実行するように指定するには、 --non-interactive
フラグを指定します。
aztfexport [command] --non-interactive <scope>
Von Bedeutung
Azure Export for Terraform を実行しているディレクトリが空でない場合は、--overwrite
フラグを使用するために --hcl-only
フラグを追加する必要があります。
コア ワークフローのベスト プラクティス
基本的なレベルでは、Azure Export のすべてのユーザーは、次の 2 つのオプションの間で決定に直面します。
次のサブセクションでは、シナリオに基づいて実行するオプションに関するガイダンスを提供します。
インフラストラクチャの管理
構成されたリソースが環境内で必要な方法で動作することを確認していない場合は、状態にエクスポートする必要がない場合があります。
terraform init plan apply
ワークフローを使用して Terraform のリソースのセットを管理する必要がある場合は、状態へのエクスポートが不可欠です。
リソースをまだ管理する必要がない場合は、 --hcl-only
フラグを渡すことをお勧めします。
既存のインフラストラクチャ
既存の Terraform 環境にエクスポートするシナリオでは、特に既存の環境に追加する前に、 --hcl-only
を 同等の Terraform プラン と考えると役立つ場合があります。
terraform apply
コマンドは、リソースのエクスポートと同じで、その間に構成が既存の状態に結び付けられます。 このシナリオでは、マッピング ファイルを使用すると、リソースを一覧表示およびマップするための実行時間が節約されます。
インフラストラクチャの検出
環境内に存在するリソースがわからない場合は、 --generate-mapping-file
フラグを指定して確認できます。 このテーマの詳細については、「 Azure Export for Terraform を使用したカスタマイズされたリソースの選択と名前付けの調査」を参照してください。
制限事項
Azure Export for Terraform は、Azure インフラストラクチャを Terraform のコードと状態に変換しようとする複雑なツールです。 現在の既知の制限事項については、次のサブセクションで説明します。
クロスプロパティ制約
AzureRM プロバイダーは、互いに競合する 2 つのプロパティを設定できます。 Azure Export for Terraform が競合するプロパティを読み取ると、ユーザーが構成するだけでも、両方のプロパティが同じ値に設定される可能性があります。 同じ生成された構成内に複数のクロスプロパティ制約が存在する場合、さらに複雑になります。 この問題を軽減するには、構成内でクロスプロパティの競合が存在する場所を知っている必要があります。
リソーススコープ外のインフラストラクチャ
Terraform 用 Azure Export を使用してリソース スコープをターゲットにしている場合、構成に必要なリソースが、指定されたスコープの外部に存在する可能性があります。 1 つの例として、ロールの割り当てがあります。 ユーザーは、スコープ外のリソースを識別する必要があります。
書き込み専用プロパティ
Azure Export では、その構成内で書き込み専用プロパティ (パスワードなど) を生成することはできません。新しいリソース セットを作成するには、書き込み専用プロパティについて知り、構成で定義する必要があります。
コーディング標準に一致するようにコードを変更する
ユーザーがコーディング標準に従ってコードを変更する場合は、いくつかの必要な操作があります。 これらの手順は、ユーザーが非サンドボックス環境でコードを使用することを計画している場合にのみ必要です。
プロパティ定義リソース
Azure の特定のリソースは、親 Terraform リソースのプロパティまたは個々の Terraform リソースとして定義できます。 1 つの例として、サブネットがあります。 Azure Export for Terraform では、リソースは個々のリソースとして定義されますが、既存のコーディング構成と一致することをお勧めします。
明示的な依存関係
現在、Azure Export for Terraform では明示的な依存関係のみを宣言できます。 必要な暗黙的な依存関係を含むようにコードをリファクタリングするには、リソース間のリレーションシップのマッピングを知っている必要があります。
ハードコードされた値
現在、Azure Export for Terraform では、ハードコーディングされた文字列が生成されます。 ベスト プラクティスとして、これらの値を変数にリファクタリングする必要があります。 また、 --full-properties
フラグを使用してすべてのプロパティを公開すると、生成された構成で機密情報 (シークレットなど) を確認できます。推奨されるプラクティスを使用して、このコードの可視性を保護します。