Terraform を使って以下のような構成の Oracle Cloud Infrastructure を構築してみました。
設定を以下の 4 つに分けて紹介します。
- パラメータ
- OCI プロバイダの設定
- インフラの設定
- インスタンスの設定
パラメータは terraform.auto.tfvars
、設定は 1 つのファイルにまとめて terraform.tf
など適当なファイル名を付けて同じディレクトリへ保存して下さい。
そのディレクトリで以下のようにすると環境が作られます。
terraform init terraform apply
参考
- Provider: Oracle Cloud Infrastructure - Terraform by HashiCorp
- terraform-provider-oci/docs/examples at master · terraform-providers/terraform-provider-oci · GitHub
パラメータ
tenancy_ocid="ocid1.tenancy.oc1..xxxxxx(略)xxxx" user_ocid="ocid1.user.oc1..xxxx(略)xxxxxxx" parrent_compartment_ocid="ocid1.compartment.oc1..xxxx(略)xxxxxxx" fingerprint="xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx" private_key_path="C:\\Users\\chito\\.oci\\oci_api_key.pem" region="us-phoenix-1" environment_name="test" environment_description="検証用の環境" domain_name="各自のドメイン" instance_shape="VM.Standard2.1" ssh_public_key="ssh-rsa xxxxxx(略)xxxxxx== rsa-key-20181124"
OCI プロバイダの設定
# OCIプロバイダのための変数 variable "region" {} variable "tenancy_ocid" {} variable "user_ocid" {} variable "fingerprint" {} variable "private_key_path" {} # OCI プロバイダの設定 provider "oci" { region = "${var.region}" tenancy_ocid = "${var.tenancy_ocid}" user_ocid = "${var.user_ocid}" fingerprint = "${var.fingerprint}" private_key_path = "${var.private_key_path}" }
インフラの設定
# ネットワークなどの基盤のための変数 variable "parrent_compartment_ocid" {} variable "environment_name" {} variable "environment_description" {} variable "domain_name" {} # 既存のコンパートメントの下に新しいコンパートメントを作成 resource "oci_identity_compartment" "target_compartment" { name = "${var.environment_name}" description = "${var.environment_description}" compartment_id = "${var.parrent_compartment_ocid}" } # 仮想クラウドネットワーク resource "oci_core_vcn" "target_vcn" { cidr_block = "10.0.0.0/16" compartment_id = "${oci_identity_compartment.target_compartment.id}" dns_label = "${var.environment_name}" } # インターネットゲートウェイ resource "oci_core_internet_gateway" "ig" { compartment_id = "${oci_identity_compartment.target_compartment.id}" vcn_id = "${oci_core_vcn.target_vcn.id}" } # デフォルトルートテーブルを修正 resource "oci_core_default_route_table" "default-route-table" { manage_default_resource_id = "${oci_core_vcn.target_vcn.default_route_table_id}" route_rules { destination = "0.0.0.0/0" destination_type = "CIDR_BLOCK" network_entity_id = "${oci_core_internet_gateway.ig.id}" } } # デフォルトDHCPオプションを修正 resource "oci_core_default_dhcp_options" "default-dhcp-options" { manage_default_resource_id = "${oci_core_vcn.target_vcn.default_dhcp_options_id}" options { type = "DomainNameServer" server_type = "VcnLocalPlusInternet" } options { type = "SearchDomain" search_domain_names = [ "${var.domain_name}"] } } # デフォルトセキュリティリストを修正 resource "oci_core_default_security_list" "default-security-list" { manage_default_resource_id = "${oci_core_vcn.target_vcn.default_security_list_id}" egress_security_rules { destination = "0.0.0.0/0" protocol = "6" tcp_options { "min" = 80 "max" = 80 } } egress_security_rules { destination = "0.0.0.0/0" protocol = "6" tcp_options { "min" = 443 "max" = 443 } } ingress_security_rules { protocol = "6" source = "0.0.0.0/0" tcp_options { "min" = 22 "max" = 22 } } ingress_security_rules { protocol = 1 source = "0.0.0.0/0" stateless = true icmp_options { "type" = 3 "code" = 4 } } } # AD1にサブネットを作る resource "oci_core_subnet" "ad_subnet" { compartment_id = "${oci_identity_compartment.target_compartment.id}" vcn_id = "${oci_core_vcn.target_vcn.id}" availability_domain = "${lookup(data.oci_identity_availability_domains.ads.availability_domains[0], "name")}" dns_label = "ad1" cidr_block = "10.0.1.0/24" } # 利用可能な Availability Domain の一覧を取得する data "oci_identity_availability_domains" "ads" { compartment_id = "${var.parrent_compartment_ocid}" }
インスタンスの設定
# インスタンスのための変数 variable "instance_shape" {} variable "ssh_public_key" {} # リージョン毎のOracle Linux 7.6 のイメージの OCID variable "instance_image_ocid" { type = "map" default = { // 各イメージのOCIDは https://docs.us-phoenix-1.oraclecloud.com/images/ を参照下さい // 今回は Oracle が提供している "Oracle-Linux-7.6-2018.11.19-0" イメージを使用します eu-frankfurt-1 = "ocid1.image.oc1.eu-frankfurt-1.aaaaaaaa2rvnnmdz6ewn4pozatb2l6sjtpqpbgiqrilfh3b4ee7salrwy3kq" us-ashburn-1 = "ocid1.image.oc1.iad.aaaaaaaa2mnepqp7wn3ej2axm2nkoxwwcdwf7uc246tcltg4li67z6mktdiq" uk-london-1 = "ocid1.image.oc1.uk-london-1.aaaaaaaaikjrglbnzkvlkiltzobfvtxmqctoho3tmdcwopnqnoolmwbsk3za" us-phoenix-1 = "ocid1.image.oc1.phx.aaaaaaaaaujbtv32uv4mizzbgnjkjlvbeaiqj5sgc6r5umfunebt7qpzdzmq" } } resource "oci_core_instance" "instance1" { count = "1" availability_domain = "${oci_core_subnet.ad_subnet.availability_domain}" compartment_id = "${oci_identity_compartment.target_compartment.id}" shape = "${var.instance_shape}" fault_domain = "FAULT-DOMAIN-1" create_vnic_details { subnet_id = "${oci_core_subnet.ad_subnet.id}" assign_public_ip = true } source_details { source_type = "image" source_id = "${var.instance_image_ocid[var.region]}" } metadata { ssh_authorized_keys = "${var.ssh_public_key}" } }