주:
- 이 사용지침서에서는 Oracle Cloud에 액세스해야 합니다. 무료 계정에 등록하려면 Oracle Cloud Infrastructure Free Tier 시작하기를 참조하십시오.
- Oracle Cloud Infrastructure 인증서, 테넌시 및 구획에 대한 예제 값을 사용합니다. 실습을 마칠 때는 이러한 값을 클라우드 환경과 관련된 값으로 대체하십시오.
Oracle Cloud Infrastructure 리소스를 Terraform 상태 파일로 임포트
소개
Terraform을 사용하여 Oracle Cloud Infrastructure(OCI) 리소스를 관리하면 많은 이점이 있습니다. 그 중 하나는 인프라 구축에 일관성과 재현성을 제공한다는 점입니다. 또 다른 점은 프로젝트 전반에서 Terraform 구성을 모듈화 및 재사용할 수 있어 인프라 구성을 쉽게 관리하고 확장할 수 있다는 것입니다. 또한 Terraform을 사용하면 인프라 프로비저닝 및 관리를 자동화하여 일관되고 반복 가능한 배포가 가능합니다. 또 다른 중요한 측면은 Terraform이 인프라의 현재 상태를 추적하는 상태 파일을 유지한다는 것입니다. 이 상태 파일은 변경 사항을 계획하고 적용하는 데 사용되므로 Terraform에서 원하는 상태를 얻기 위해 변경해야 할 사항을 결정할 수 있습니다.
그러나 Oracle Cloud Infrastructure(OCI)의 일부 리소스가 Terraform에서 관리되지 않는 상황이 있습니다. 이 문제는 일반적으로 상태 파일에 있는 Terraform을 사용하여 리소스를 프로비저닝한 다음 다른 사용자가 다른 리소스를 수동으로 생성하는 경우에 발생합니다. 나중에 Terraform에서 관리하려면 수동으로 생성된 리소스가 필요하다는 것을 알 수 있습니다.
다음 사항을 고려하십시오.
-
이 VCN을 관리하는 상태 파일과 Terraform 구성 파일이 있도록 Terraform을 사용하여 VCN을 생성합니다.
-
OCI 테넌시에 새 리소스(컴퓨트)를 수동으로 추가합니다.
이미 있는 Terraform 구성 및 상태 파일을 사용하여 새로 추가된 컴퓨트를 관리하려는 경우 Terraform 임포트 명령을 사용할 수 있지만 따라야 할 단계가 더 있으며 Terraform 구성 파일을 업데이트해야 합니다.
Terraform v1.5.0
이상에서는 블록 임포트가 지원됩니다. 이 접근 방식을 사용하면 현재 사용 중인 Terraform 코드는 변경되지 않습니다. 기존 Terraform 구성 파일에 통합하도록 선택할 수 있지만 반드시 필요한 것은 아닙니다. 목표는 OCI 리소스를 Terraform에서 관리되지 않는 Terraform 상태 파일로 가져오는 것입니다.
한 가지 중요한 측면은 가져오기 블록이 CI/CD 파이프라인에서 작동한다는 것입니다. 또한 상태를 수정하기 전에 가져오기 작업을 미리 볼 수 있습니다. 결국 모든 것은 당신과 사용 사례의 복잡성에 달려 있습니다.
목표
- 리소스를 수동으로 생성하고(OCI 컴퓨트 가상 머신) 기존 Terraform 상태 파일로 임포트하여 Terraform에서 추가로 관리합니다.
필요 조건
-
Terraform
v1.5.0
이상 -
Terraform을 통해 생성 및 관리되는 인프라 환경입니다. 이 자습서에서는 일부 서브넷, 보안 목록, 경로 테이블 등이 포함된 VCN이 있습니다.
작업 1: Terraform으로 생성된 기존 인프라 확인
-
terraform state list
명령을 실행하여 Terraform 구성 파일로 관리되는 OCI 리소스를 확인합니다.terraform state list module.network.data.oci_core_services.all_oci_services module.network.oci_core_internet_gateway.igw["igw"] module.network.oci_core_nat_gateway.ngw["ngw"] module.network.oci_core_route_table.route_table["rt_priv"] module.network.oci_core_route_table.route_table["rt_pub"] module.network.oci_core_security_list.sl["sl_priv"] module.network.oci_core_security_list.sl["sl_public"] module.network.oci_core_service_gateway.this["sgw"] module.network.oci_core_subnet.subnets["sn1_priv"] module.network.oci_core_subnet.subnets["sn1_pub"] module.network.oci_core_subnet.subnets["sn2_priv"] module.network.oci_core_subnet.subnets["sn3_priv"] module.network.oci_core_virtual_network.vcn["vcn1"]
보시다시피 VCN, 서브넷, 보안 목록 및 라우팅 테이블이 있습니다.
-
내 Terraform 구성 파일은 다음과 같습니다.
~/workORCL/_MY_OCI_INFRA/oci-vcn> ls -l total 120 -rwxr-xr-x@ 1 fvass staff 849 Jul 10 2023 main.tf drwxr-xr-x@ 3 fvass staff 96 May 25 2023 modules -rwxr-xr-x@ 1 fvass staff 387 May 25 2023 output.tf -rw-r--r-- 1 fvass staff 379 Apr 3 09:18 provider.auto.tfvars -rw-r--r-- 1 fvass staff 29040 Apr 3 11:00 terraform.tfstate -rw-r--r-- 1 fvass staff 182 Apr 3 11:00 terraform.tfstate.backup -rwxr-xr-x@ 1 fvass staff 6007 Apr 3 10:59 terraform.tfvars -rwxr-xr-x@ 1 fvass staff 2869 May 25 2023 variables.tf
작업 2: OCI 콘솔을 사용하여 OCI 컴퓨트 VM 생성
작업 1에서 다른 OCI 리소스가 생성되는 동일한 지역에 OCI 컴퓨트 VM을 생성합니다. 이 자습서에서는 작업 1(해당 서브넷 중 하나에 있을 필요는 없음)에 있는 서브넷 중 하나에 해당 서브넷을 만듭니다. 생성 후 추가 작업에서 필요한 컴퓨트 OCID(Oracle Cloud 식별자)를 가져옵니다.
주: 이 VM은 현재 Terraform에서 관리되지 않습니다.
작업 3: import_block.tf
파일 생성
Terraform 코드가 있는 동일한 폴더에 import_block.tf
이라는 파일을 생성합니다(다른 이름을 지정할 수 있음).
-
import_block.tf
.import { to = oci_core_instance.demo_inst_1 id = "ocid1.instance.oc1.iad.anuwcljswe6j4fqcqxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }
- id: 작업 2에서 생성된 컴퓨트의 OCID입니다.
- to: 리소스가 상태 파일에 포함할 인스턴스 주소입니다.
oci_core_instance
유형을 사용하여 컴퓨트 리소스를 임포트합니다. 리소스 이름은 demo_inst_1
입니다. terraform plan
명령을 실행하면 Terraform은 이 파일을 읽고 새 리소스를 기존 상태 파일로 가져와야 함을 인식합니다.
작업 4: terraform plan
명령 실행
다음 명령을 실행합니다. 이 인수 generate-config-out
는 작업 2에서 생성된 컴퓨트에 대한 Terraform 구성이 포함된 파일을 생성합니다.
terraform plan --generate-config-out=compute.tf
출력은 다음과 같습니다.
Plan: 1 to import, 0 to add, 0 to change, 0 to destroy.
╷
│ Warning: Config generation is experimental
│
│ Generating configuration during import is currently experimental, and the generated configuration format may change in future versions.
╵
─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
Terraform has generated configuration and written it to compute.tf. Please review the configuration and edit it as necessary before adding it to version control.
이제 compute.tf
파일이 있습니다.
~/workORCL/_MY_OCI_INFRA/oci-vcn> ls -ltr
total 144
-rwxr-xr-x@ 1 fvass staff 387 May 25 2023 output.tf
drwxr-xr-x@ 3 fvass staff 96 May 25 2023 modules
-rwxr-xr-x@ 1 fvass staff 2869 May 25 2023 variables.tf
-rw-r--r-- 1 fvass staff 379 Apr 3 09:18 provider.auto.tfvars
-rwxr-xr-x@ 1 fvass staff 6007 Apr 3 10:59 terraform.tfvars
-rw-r--r-- 1 fvass staff 182 Apr 3 11:00 terraform.tfstate.backup
-rw-r--r-- 1 fvass staff 29040 Apr 3 11:00 terraform.tfstate
-rwxr-xr-x@ 1 fvass staff 855 Apr 3 11:12 main.tf
-rw-r--r-- 1 fvass staff 142 Apr 3 11:12 import_block.tf
-rw-r--r-- 1 fvass staff 4421 Apr 3 11:17 compute.tf
작업 5: terraform apply
명령 실행
다음 명령을 실행하여 Terraform 상태 파일에 컴퓨트를 추가합니다.
terraform apply
출력은 다음과 같습니다.
Plan: 1 to import, 0 to add, 0 to change, 0 to destroy.
Do you want to perform these actions?
Terraform will perform the actions described above.
Only 'yes' will be accepted to approve.
이제 구성을 적용합니다.
작업 6: 상태 파일 확인
terraform state list
명령을 실행하고 oci_core_instance.demo_inst_1
가 있는지 확인합니다.
~/workORCL/_MY_OCI_INFRA/oci-vcn> terraform state list
oci_core_instance.demo_inst_1
module.network.data.oci_core_services.all_oci_services
module.network.oci_core_internet_gateway.igw["igw"]
module.network.oci_core_nat_gateway.ngw["ngw"]
module.network.oci_core_route_table.route_table["rt_priv"]
module.network.oci_core_route_table.route_table["rt_pub"]
module.network.oci_core_security_list.sl["sl_priv"]
module.network.oci_core_security_list.sl["sl_public"]
module.network.oci_core_service_gateway.this["sgw"]
module.network.oci_core_subnet.subnets["sn1_priv"]
module.network.oci_core_subnet.subnets["sn1_pub"]
module.network.oci_core_subnet.subnets["sn2_priv"]
module.network.oci_core_subnet.subnets["sn3_priv"]
module.network.oci_core_virtual_network.vcn["vcn1"]
작업 7: import_block.tf
파일 제거
이 시점에서 import_block.tf
파일을 안전하게 제거할 수 있습니다. Terraform에서는 무시됩니다.
작업 8: 컴퓨트 테스트
컴퓨트 구성을 변경할 수 있습니다. compute.tf
에서 memory_in_gbs
를 shape_config
에서 변경하고 terraform plan
를 실행하여 변경사항을 확인합니다.
출력은 다음과 같습니다.
Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
~ update in-place
Terraform will perform the following actions:
# oci_core_instance.demo_inst_1 will be updated in-place
~ resource "oci_core_instance" "demo_inst_1" {
id = "ocid1.instance.oc1.iad.anuwcljswe.........."
# (20 unchanged attributes hidden)
~ shape_config {
~ memory_in_gbs = 16 -> 32
# (8 unchanged attributes hidden)
}
# (7 unchanged blocks hidden)
}
Plan: 0 to add, 1 to change, 0 to destroy.
관련 링크
확인
- 작성자 - Francisc Vass
추가 학습 자원
docs.oracle.com/learn에서 다른 실습을 살펴보거나 Oracle Learning YouTube 채널에서 더 많은 무료 학습 콘텐츠에 액세스하십시오. 또한 education.oracle.com/learning-explorer를 방문하여 Oracle Learning Explorer가 되십시오.
제품 설명서는 Oracle Help Center를 참조하십시오.
Import Oracle Cloud Infrastructure Resources into a Terraform State File
F96420-01
April 2024