Terraform 모듈 구성

Oracle Cloud에서 단일 테넌트 SaaS 애플리케이션을 호스트하는 데 필요한 네트워킹 리소스는 Terraform 모듈에 정의되어 있습니다. 모듈을 다운로드하고 필요한 변수를 설정합니다.

Terraform 코드 다운로드

이 솔루션에 대한 Terraform 코드는 GitHub에서 제공됩니다.

  1. 왼쪽 탐색 창에서 코드 다운로드 를 누릅니다.
  2. Git 저장소 를 누릅니다.
  3. 로컬 컴퓨터에 저장소를 복제하거나 다운로드합니다.

Terraform 코드 정보

이 솔루션의 Terraform 코드는 각각 대상 토폴로지의 특정 구성 요소에 대한 리소스를 포함하는 여러 모듈로 구성됩니다.

Terraform 코드는 최상위 레벨의 다음 디렉토리 및 파일을 포함합니다.
  • chef: 이 디렉토리에는 경로 지정 게이트웨이를 설치 및 구성하기 위한 Chef 레시피가 포함됩니다.
  • examples: 이 디렉토리는 이 솔루션을 구현하는 데 필요한 Terraform 코드를 포함합니다. 이 디렉토리의 코드는 modules 디렉토리에 정의된 모듈을 사용합니다.
  • LICENSE.txt: 이 파일에는 샘플 코드에 대한 라이센스 용어 및 조건이 포함되어 있습니다.
  • modules: 이 디렉토리는 솔루션의 구성 요소를 제공하는 Terraform 모듈을 포함합니다.
  • README.md: 이 파일은 코드를 사용하는 코드 및 기본 지침에 대한 간단한 설명을 제공합니다.
  • test: 이 디렉토리에는 배치를 확인하는 데 사용할 수 있는 테스트 스크립트가 포함되어 있습니다.
examples/full-deployment 디렉토리에는 이 솔루션에 필요한 Terraform 모듈을 호출하는 코드가 포함되어 있습니다. 여기에는 다음 하위 디렉토리와 파일이 포함됩니다.
examples/full-deployment
├── common
│   ├── compartments
│   └── configuration
├── Makefile
├── management
│   ├── access
│   ├── network
│   ├── server_attachment
│   └── servers
├── peering
│   ├── network
│   └── routing
├── README.md
├── tenant
│   ├── network
│   └── servers
├── terraform.tfvars.sample
└── terragrunt.hcl
구성 디렉토리 또는 파일 구성에 정의된 리소스
common/configuration 없습니다.

이 디렉토리의 코드는 examples/network_calculator에서 Terraform 모듈을 사용하여 테넌트 vcn과 필요한 피어링 vcn 수, 각 VCN의 CIDR 크기 및 테넌트 vcn과 피어링 vcn 간의 매핑을 계산합니다. 계산 결과는 Vcn과 다른 네트워킹 리소스를 생성할 때 사용됩니다.

common/compartments
  • 관리 구획 입니다.
  • 피어링 Vcn에 대한 구획이 하나 이상 있습니다.
  • 각 테넌트에 대한 구획입니다.
management/access ISV VCN의 공용 서브넷에 연결된 Oracle Linux 컴퓨트 인스턴스입니다. 이 인스턴스는 토폴로지의 기본 서버입니다.
management/network
  • ISV VCN(관리 VCN 라고도 함)
  • ISV VCN에 대한 NAT 및 인터넷 게이트웨이입니다.
  • 다음 서브넷:
    • Management Server에 대한 전용 관리 서브넷입니다.
    • 기본 서버에 대한 공용 액세스 서브넷입니다.
    • 경로 지정 게이트웨이용 전용 피어링 서브넷
  • 인터넷 게이트웨이를 통해 공용 인터넷에 대한 트래픽 경로 지정 규칙을 사용하는 VCN의 기본 경로 테이블
  • NAT 게이트웨이를 통해 공용 인터넷에 바인딩된 트래픽을 경로 지정하는 규칙이 포함된 피어링 서브넷의 경로 테이블입니다.
  • 다음 규칙을 사용하는 액세스 서브넷에 대한 보안 목록입니다.
    • 모든 소스에서 인바운드 ICMP 트래픽을 허용합니다.
    • 모든 대상에 대해 아웃바운드 TCP 트래픽 바운드를 허용합니다.
  • 다음 규칙이 포함된 피어링 서브넷의 보안 목록입니다.
    • 모든 대상에 대해 아웃바운드 TCP 트래픽 바운드를 허용합니다.
    • 모든 소스에서 인바운드 ICMP 트래픽을 허용합니다.
    • 임의 소스에서 포트 5666까지 인바운드 TCP 트래픽을 허용합니다.
  • 다음 규칙이 포함된 관리 서브넷의 보안 목록입니다.
    • 액세스 서브넷에서 인바운드 ICMP 트래픽을 허용합니다.
    • 액세스 서브넷에서 포트 80으로의 인바운드 HTTP 트래픽을 허용합니다.
    • 모든 대상에 대해 아웃바운드 TCP 트래픽 바운드를 허용합니다.
management/server_attachment
  • 다음 규칙을 사용하여 관리 서브넷에 연결된 경로 테이블입니다.
    • NAT 게이트웨이를 통해 공용 인터넷에 바인딩된 트래픽 경로를 지정합니다.
    • 각 테넌트 Vcn에 대해 바인드된 트래픽을 적절한 경로 지정 게이트웨이 인스턴스로 경로 지정합니다.
  • 다음 규칙을 사용하여 액세스 서브넷에 연결된 경로 테이블입니다.
    • 인터넷 게이트웨이를 통해 공용 인터넷에 바인딩된 트래픽 경로를 지정합니다.
    • 각 테넌트 Vcn에 대해 바인드된 트래픽을 적절한 경로 지정 게이트웨이 인스턴스로 경로 지정합니다.
management/servers ISV VCN의 관리 서브넷에 연결된 Oracle Linux 컴퓨트 인스턴스입니다.

Management Server를 사용하여 Nagios Core 등의 기반 구조 모니터링 응용 프로그램을 설치하고 실행할 수 있습니다.

peering/network
  • 경로 지정 게이트웨이를 호스트하는 컴퓨트 인스턴스로 구성된 동적 그룹입니다.
  • 이 구성에 정의된 동적 그룹이 구획의 Vnic 및 전용 주소를 사용할 수 있도록 허용하는 정책입니다.
  • 각 VCN의 서브넷을 사용하는 2개의 피어링 vcn입니다.
  • 각 VCN에 대한 LPG(로컬 피어링 게이트웨이) 입니다.
  • 모든 인바운드 ICMP 트래픽과 모든 아웃바운드 TCP 트래픽을 허용하는 규칙이 포함된 각 서브넷에 대한 보안 목록입니다.
  • 적합한 피어링 VCN의 LPG를 통해 각 테넌트 VCN에 대한 트래픽 바인드된 경로를 지정하는 규칙을 사용하는 각 서브넷에 대한 경로 테이블입니다.
peering/routing
  • 2개의 경로 지정 게이트웨이:
    • 하나의 게이트웨이는 여러 결함 도메인에 있는 컴퓨트 인스턴스 쌍으로, 높은 가용성을 위해 Pacemaker가 설치되어 있습니다. 각 컴퓨트 인스턴스에는 2개의 보조 VNIC가 있으며 첫번째 보조 VNIC에 부동 IP 주소가 연결됩니다. 이 게이트웨이는 경로 지정 게이트웨이에 대한 HA 페일오버를 시연하기 위한 것입니다.
    • 다른 게이트웨이는 단일 컴퓨트 인스턴스입니다.
  • 다음 규칙이 포함된 네트워크 보안 그룹입니다.
    • 그룹 내 모든 TCP 트래픽을 포트 3121, 2224, 21064로 허용합니다.
    • 그룹 내의 모든 UDP 트래픽을 포트 4505로 허용합니다.
tenant/network 각 테넌트에 대한 리소스는 다음과 같습니다.
  • 테넌트 VCN 입니다.
  • 테넌트 VCN에 대한 NAT 및 인터넷 게이트웨이입니다.
  • 두 개의 서브넷(공용 및 기타 전용) 입니다.
  • VCN에 대한 LPG입니다.
  • 다음 규칙을 사용하는 공용 서브넷에 대한 경로 테이블입니다.
    • 인터넷 게이트웨이를 통해 공용 인터넷에 바인딩된 트래픽 경로를 지정합니다.
    • Ldg를 통해 피어링 서브넷에 바인딩된 트래픽 경로를 지정합니다.
    • Lg를 통해 관리 서브넷에 바인딩된 트래픽 경로를 지정합니다.
  • 다음 규칙을 사용하는 전용 서브넷의 경로 테이블입니다.
    • NAT 게이트웨이를 통해 공용 인터넷에 바인딩된 트래픽 경로를 지정합니다.
    • Ldg를 통해 피어링 서브넷에 바인딩된 트래픽 경로를 지정합니다.
    • Lg를 통해 관리 서브넷에 바인딩된 트래픽 경로를 지정합니다.
  • 다음 규칙을 사용하는 공용 서브넷의 보안 목록입니다.
    • 모든 대상에서 인바운드 ICMP 트래픽을 허용합니다.
    • 모든 대상에 대한 아웃바운드 TCP 트래픽을 허용합니다.
  • 다음 규칙을 사용하는 전용 서브넷의 보안 목록입니다.
    • 모든 대상에서 인바운드 ICMP 트래픽을 허용합니다.
    • 모든 대상에 대한 아웃바운드 TCP 트래픽을 허용합니다.
    • 인바운드 TCP 트래픽을 포트 5666에 허용합니다.
tenant/servers 각 테넌트 구획의 Oracle Linux 컴퓨트 인스턴스입니다.

이 인스턴스를 사용하여 기반 구조 모니터링 에이전트를 설치하고 실행할 수 있습니다. 예를 들어, ISV VCN의 관리 서버에 Nagios 코어를 설치하는 경우 각 테넌트 구획의 컴퓨트 인스턴스에 Nagios 에이전트를 설치할 수 있습니다. 에이전트는 구획의 서버를 모니터링하여 Nagios 모니터링 서버로 측정항목을 전송할 수 있습니다.

terraform.tfvars.sample Terraform 변수 파일에 대한 템플리트입니다.
terragrunt.hcl Terragrunt 구성입니다.

Terraform 변수 설정

Terraform가 Oracle Cloud Infrastructure 테넌시에 연결하는 데 필요한 매개변수, 컴퓨트 인스턴스에 대한 SSH 키 및 경로 지정 클러스터에 대한 비밀번호를 지정합니다.

  1. examples/full-deployment/terraform.tfvars.sampleexamples/full-deployment/terraform.tfvars에 복사합니다.
  2. 일반 텍스트 편집기에서 examples/full-deployment/terraform.tfvars을 열고 다음과 같이 변수 값을 설정합니다.
    변수 설명
    tenancy_ocid 테넌시의 OCID입니다.

    Oracle Cloud Infrastructure 웹 콘솔에서 테넌시의 OCID를 찾을 수 있습니다. 서비스 메뉴에서 관리 를 선택한 다음 테넌시 세부정보 를 누릅니다.

    user_ocid Terraform에서 Oracle Cloud Infrastructure을 사용하여 인증하는 데 사용할 사용자의 OCID입니다.

    사용자의 OCID를 찾으려면 서비스 메뉴에서 id를 선택한 다음 사용자 를 선택합니다. 목록에서 사용자 이름을 찾아 OCID를 복사합니다.

    fingerprint 업로드한 API 서명 키의 지문입니다.
    private_key_path 전용 API 서명 키를 포함하는 파일의 전체 경로 및 이름입니다.
    영역 리소스를 생성할 영역의 ID입니다.

    예를 들어, US East(Ashburn) 영역의 ID는 us-ashburn-1 입니다.

    지역 및 가용성 도메인 을 참조하십시오.

    compartment_ocid 리소스를 생성할 구획의 OCID입니다.

    지정한 구획은 토폴로지에 대한 상위 구획이 됩니다.

    구획의 OCID를 찾으려면 서비스 메뉴에서 id를 선택한 다음 구획 을 선택합니다. 목록에 필요한 구획을 찾아 OCID를 복사합니다.

    bastion_ssh_public_key_file 기본 서버에 대한 SSH 공용 키를 포함하는 파일의 전체 경로 및 이름입니다.
    bastion_ssh_private_key_file 기본 서버에 대한 SSH 전용 키를 포함하는 파일의 전체 경로 및 이름입니다.
    remote_ssh_public_key_file 토폴로지의 전용 컴퓨트 인스턴스에 대한 SSH 공용 키를 포함하는 파일의 전체 경로 및 이름입니다.
    remote_ssh_private_key_file 토폴로지의 전용 컴퓨트 인스턴스에 대한 SSH 전용 키를 포함하는 파일의 전체 경로 및 이름입니다.

    terraform.tfvars을 저장하고 닫습니다.

    다음은 완료된 terraform.tfvars 파일의 예입니다.

    tenancy_ocid = "ocid1.tenancy.oc1..aaaaaaaa2 (truncated)"
    user_ocid = "ocid1.user.oc1..aaaaaaaag (truncated)"
    fingerprint = "56:f6:8e:bf: (truncated)"
    private_key_path = "/home/joe/.oci/oci_api_key.pem"
    region = "us-ashburn-1"
    
    compartment_ocid = "ocid1.compartment.oc1..aaaaaaaam (truncated)"
    
    bastion_ssh_public_key_file = "/home/joe/.ssh/ida_rsa_bastion.pub"
    bastion_ssh_private_key_file = "/home/joe/.ssh/ida_rsa_bastion"
    remote_ssh_public_key_file = "/home/joe/.ssh/ida_rsa_remote.pub"
    remote_ssh_private_key_file = "/home/joe/.ssh/ida_rsa_remote"
  3. 환경 변수에서 경로 지정 클러스터에 대한 공유 암호를 설정합니다.
    export TF_VAR_hacluster_password="somePassword"

    암호는 8자 이상이어야 합니다. 대문자와 소문자, 숫자 및 특수 문자(영숫자 이외의 문자) 를 하나 이상 포함해야 합니다.