Terraform は、自動化されたリソースオーケストレーションのためのオープンソースツールです。ROS は Terraform をマネージドサービスとしてホストします。Terraform テンプレートとスタックを作成し、ROS API 互換の操作を通じて Alibaba Cloud、Amazon Web Services (AWS)、および Microsoft Azure のリソースをオーケストレーションできます。
制限事項
Terraform は ROS の機能とリソースのサブセットをサポートしています。ROS で Terraform がサポートする機能とリソース をご参照ください。
開発方法
次のいずれかの方法を使用して、Terraform コードを記述およびテストします。
オンプレミス環境を使用します。
Terraform オンラインデバッグツール を使用します (Alibaba Cloud リソースのみ)。
(推奨) ROS コンソールで Terraform スタックを作成し、必要に応じて継続または更新します。「Terraform スタックの作成」、「スタックの作成の継続」、「スタックの更新」をご参照ください。
ROS で Terraform を使用するメリット
ROS は、Terraform CLI を超える次の機能を追加します。
統一されたコンソールエクスペリエンス
ROS コンソールは、ネイティブの ROS テンプレートと同じエクスペリエンスで Terraform テンプレートを管理し、すべてのリソース管理を一元化します。
ROS コンソールの [Create Stack] ページで、[Stack Name] を入力し、中国 (杭州) などの [Region] を選択し、Terraform テンプレートを読み込みます。
コンソールは、テンプレート変数を視覚的なフォームとしてレンダリングし、[VPC Configuration]、[vSwitch]、[Instance Type]、[Security Group] などのパラメーターに対してドロップダウンオプションとデフォルト値を提供します。
$ terraform plan Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols: + create # alicloud_vpc.default will be created + resource "alicloud_vpc" "default" { + cidr_block = "10.0.0.0/8" + vpc_name = (known after apply) } Plan: 6 to add, 0 to change, 0 to destroy.$ terraform apply alicloud_vpc.default: Creating... alicloud_vpc.default: Creation complete after 6 s [id=vpc-bp1...] alicloud_vswitch.default[0]: Creating... alicloud_vswitch.default[0]: Creation complete after 5 s [id=vsw-bp1...] Apply complete! Resources: 6 added, 0 changed, 0 destroyed.パラメーターとプロパティの動的なクエリと選択
有効なパラメーター値を動的にクエリします。
複数のプロパティにわたって単一のパラメーターを参照します。
選択可能な値を持つ GUI でパラメーターを表示します。「AssociationProperty と AssociationPropertyMetadata」をご参照ください。
パラメーターを設定する際、「Virtual Private Cloud (VPC)」や「Security Group」などのフィールドには、現在のリージョンで利用可能なリソースのドロップダウンリストが表示され、以前に選択したパラメーターによって動的にフィルタリングされます。
テンプレートのパラメーターセクションで、リージョンリソースをクエリするには
AssociationPropertyを、フィルター条件を追加するにはAssociationPropertyMetadataを指定すると、ROS コンソールにこれらのパラメーターの選択可能な値が表示されます。その後、リソース ID を手動で入力する代わりに、ドロップダウンリストから既存のリソースを選択できます。
テンプレートリソースの価格照会
デプロイ前に、ROS は Terraform テンプレートからリソースの推定価格を計算して表示し、予算計画を支援します。
[Price Details] ダイアログには、[Resource Type] (ECS や RDS インスタンスなど)、[Specifications]、[Region]、[Quantity]、[Billing Method] ごとに推定コストが一覧表示されます。合計 [Prepaid Monthly Fee] は上部に表示されます。
サービスのアクティベーションとロールのチェック
自動チェック: ROS は、デプロイ前にテンプレート内のサービスがアクティベートされているか、必要なロールが存在するかをチェックします。[Transit Router] などのサービスがアクティベートされていない場合、[Dependency Check] ダイアログが表示され、問題の数と、サービスのアクティベーションページへの [Activation Link] が表示されます。
ヒントとガイダンス:必要なサービスがアクティベートされていない場合、またはロールが不足している場合、ROS は設定を完了するためのガイダンスを提供します。
アクティベーションリンクをクリックすると、サービスページ ([Transit Router] など) にリダイレクトされ、[Service Agreement] に同意してアクティベートできます。
リスク検出
ROS は、セキュリティグループの削除など、操作を実行する前に潜在的なリスクを検出します。
スタックを削除する際、[Delete Stack] ダイアログには、依存関係を持つリソース (ECS インスタンスによって参照されているセキュリティグループなど) を一覧表示する [Risk Alert] が表示されます。続行するには、[Deletion Method] (リソースを保持またはリソースをリリース) を選択し、[Stack Name] を確認する必要があります。
テンプレートのバージョン管理と共有
ROS は Terraform テンプレートのバージョン管理を提供します。[Template Details] (ID、共有ステータス、タイムスタンプ) を表示し、[Template Version] セレクターでバージョンを切り替え、[Template Content] (main.tf ファイルの HCL コードなど) をオンラインで表示し、[Share Template] で共有するか、[Create Stack] でデプロイします。
タグとリソースグループの伝播
1 回の操作で、すべてのテンプレートリソースにタグとリソースグループを伝播できます。
シナリオ
Terraform スタックの作成
クラウドプラットフォーム (AWS、Azure) またはオンプレミス環境にまたがるリソースを一元的にオーケストレーションおよび管理するには、Terraform スタックを作成してください。「Terraform スタックの作成」をご参照ください。
Terraform テンプレートの作成
Alibaba Cloud からサードパーティのクラウドリソース (AWS、Azure) を管理するには、Terraform テンプレートで依存関係を持つリソースを定義してください。「Terraform テンプレートの作成」をご参照ください。
テンプレート構造
Terraform テンプレートでリソース、パラメーター、および依存関係を定義することで、Alibaba Cloud、AWS、および Azure のリソースをオーケストレーションできます。「Terraform テンプレートの構造」、「Alibaba Cloud Terraform とは」をご参照ください。
開発に関する推奨事項
ROS 向けに Terraform コードを開発する際は、次のベストプラクティスに従ってください。「Terraform コード開発の方法と推奨事項」をご参照ください。
変数定義を洗練してください。
プロバイダーバージョンを指定してください。
擬似パラメーターを使用してスタック情報を取得してください。
コンソールでのパラメーターと変数の入力モードを制御してください。
Aliyun::Terraform-v1.0 以降を使用してください。
Metadata を使用して、コンソールでのパラメーターと変数の表示を制御してください。
オンプレミスコードは、名前が .debug.tf で終わるファイルに保存してください。
.tf ファイルで Alibaba Cloud プロバイダー (alicloud) を宣言しないでください。
.tfvars ファイルではなく、ROS パラメーターを使用して変数値を渡してください。
テンプレートの例
「Terraform テンプレートの例」をご参照ください。