VCN と Compute Instance を Terraform で構築
provider "oci" {
}
variable "compartment_ocid" {
default = "< your ocid >"
}
resource "oci_core_vcn" "mnrst_vcn" {
compartment_id = var.compartment_ocid
cidr_block = "172.16.0.0/16"
display_name = "mnrstVcn"
}
resource "oci_core_internet_gateway" "mnrst_igw" {
compartment_id = var.compartment_ocid
vcn_id = oci_core_vcn.mnrst_vcn.id
enabled = true
display_name = "mnrstIgw"
}
resource "oci_core_default_route_table" "mnrst_route_table" {
manage_default_resource_id = oci_core_vcn.mnrst_vcn.default_route_table_id
display_name = "mnrstRouteTable"
route_rules {
destination = "0.0.0.0/0"
destination_type = "CIDR_BLOCK"
network_entity_id = oci_core_internet_gateway.mnrst_igw.id
}
}
resource "oci_core_default_security_list" "mnrst_security_list" {
manage_default_resource_id = oci_core_vcn.mnrst_vcn.default_security_list_id
display_name = "mnrstSecurityList"
ingress_security_rules {
protocol = 6 # TCP
source = "${data.http.checkip.response_body}/32"
tcp_options {
max = 22
min = 22
}
}
egress_security_rules {
destination = "0.0.0.0/0"
protocol = "all"
}
}
resource "oci_core_subnet" "mnrst_subnet" {
cidr_block = "172.16.0.0/24"
compartment_id = var.compartment_ocid
vcn_id = oci_core_vcn.mnrst_vcn.id
display_name = "mnrstSubnet"
}
resource "oci_core_instance" "mnrst_instance" {
availability_domain = data.oci_identity_availability_domain.ad.name
compartment_id = var.compartment_ocid
shape = data.oci_core_images.instance_images.shape
display_name = "mnrstInstance"
source_details {
source_id = data.oci_core_images.instance_images.images[0].id
source_type = "image"
boot_volume_size_in_gbs = "100"
}
create_vnic_details {
subnet_id = oci_core_subnet.mnrst_subnet.id
display_name = "mnrstNic"
assign_public_ip = true
}
metadata = {
ssh_authorized_keys = file("~/.ssh/id_rsa.pub")
}
}
data "http" "checkip" {
url = "http://inet-ip.info/ip"
}
data "oci_identity_availability_domain" "ad" {
compartment_id = var.compartment_ocid
ad_number = 1
}
data "oci_core_images" "instance_images" {
compartment_id = var.compartment_ocid
operating_system = "Canonical Ubuntu"
operating_system_version = "22.04"
shape = "VM.Standard.E2.1.Micro"
}
output "instance_public_ip" {
value = oci_core_instance.mnrst_instance.public_ip
}
Terraform を実行して SSH 接続
terraform init
terraform plan
terraform apply -auto-approve
ssh ubuntu@$(terraform output instance_public_ip | jq -r .)
参考サイト
https://registry.terraform.io/providers/oracle/oci/latest/docs/resources/core_instance
https://github.com/oracle/terraform-provider-oci/blob/master/examples/compute/instance/instance.tf
タグ: OCI, Terraform