Azure Export for Terraform のしくみ
この記事では、Azure Export for Terraform ワークフローについて説明します。 この記事では、ツールのベスト プラクティス ガイダンス、現在の制限事項、およびそれらの制限事項を軽減する方法について説明します。
対話モード
既定では、Azure Export for Terraform は対話型モードで実行されます。 対話型モードで実行すると、使用可能なキーボード ショートカットがディスプレイの下部に表示されます。
タスク | キーボード ショートカット |
---|---|
ナビゲーション | |
リソース一覧で前の項目を選択します。 | 上方向キーまたは K キー |
リソース一覧で次の項目を選択します。 | 下方向キーまたは J キー |
リソース一覧の前のページに移動します。 | 左方向キーまたは h キーまたは Page Up キー |
リソース一覧の次のページに移動します。 | 右方向キーまたは l キーまたは Page Down キー |
リソース 一覧の先頭に移動します。 | g キーまたは Home キー |
リソース 一覧の最後に移動します。 | G キーまたは End キー |
スキップするリソースの選択 | |
リソースをスキップ (「スキップ」とマークされている場合はスキップ解除) | Delete |
フィルター操作 | |
リソース一覧のテキストでフィルターを定義します。 | / |
現在のフィルターをクリア | 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>
重要
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 内の特定のプロパティは書き込み専用であり、Azure Export for Terraform によって作成される生成されたコードには含まれません。 この問題は、HCL コードにエクスポートした後にプロパティを定義することで解決されます。
クロスプロパティ制約
AzureRM プロバイダーは、互いに競合する 2 つのプロパティを設定できます。 Azure Export for Terraform が競合するプロパティを読み取る場合、ユーザーが一方のみを構成した場合でも、両方のプロパティが同じ値に設定される可能性があります。 同じ生成された設定内に複数のクロスプロパティ制約が存在する場合、さらに複雑になります。 この問題を軽減するには、構成内でクロスプロパティの競合が存在する場所を知っておく必要があります。
リソース範囲外のインフラストラクチャ
Azure Export for Terraform を使用してリソース範囲をターゲットにしている場合、構成に必要なリソースが、指定された範囲外に存在する可能性があります。 1 つの例として、ロールの割り当てがあります。 ユーザーは、範囲外のリソースを識別する必要があります。
書き込み専用プロパティ
Azure Export では、その構成内で書き込み専用プロパティ (パスワードなど) を生成することはできません。新しいリソース セットを作成するには、書き込み専用プロパティについて知り、構成で定義する必要があります。
コーディング標準に一致させるためのコード変更
ユーザーがコーディング標準に従ってコードを変更する場合、いくつかの操作が必要です。 これらの手順は、ユーザーが非サンドボックス環境でコードを使用することを計画している場合にのみ必要です。
プロパティ定義リソース
Azure の特定のリソースは、親 Terraform リソースのプロパティまたは個々の Terraform リソースとして定義できます。 1 つの例としてサブネットがあります。 Azure Export for Terraform では、リソースは個々のリソースとして定義されますが、ベスト プラクティスは既存のコーディング構成と一致させることです。
明示的な依存関係
現在、Azure Export for Terraform では明示的な依存関係のみを宣言できます。 必要な暗黙的な依存関係を含むようにコードをリファクタリングするには、リソース間のリレーションシップのマッピングを知っておく必要があります。
ハードコードされた値
現在、Azure Export for Terraform では、ハードコーディングされた文字列が生成されます。 ベスト プラクティスとして、これらの値を変数にリファクタリングする必要があります。 また、--full-properties
フラグを使用してすべてのプロパティを公開すると、生成された構成に機密情報 (シークレットなど) が表示されます。推奨されるプラクティスを使用して、このコードの可視性を保護します。