주:

Oracle Cloud Infrastructure에서 Pulumi를 사용하여 컴퓨트 인스턴스 및 VCN 배치

소개

이 사용지침서에서는 Pulumi를 사용하여 컴퓨트 인스턴스와 VCN(가상 클라우드 네트워크)을 배포합니다. Pulumi의 단순성과 Oracle Cloud Infrastructure(OCI)의 강력한 인프라를 통해 배포 프로세스를 간편하게 자동화하는 방법을 배울 수 있습니다. OCI 리소스를 손쉽게 배포 및 관리하여 클라우드 배포의 새로운 가능성을 실현하는 방법을 배웁니다.

목표

필요 조건

태스크 1: VCN 생성

Pulumi를 사용하여 VCN 배포

  1. Pulumi 프로젝트의 새 디렉토리를 생성합니다.

    1. 터미널 또는 명령 프롬프트를 엽니다.

    2. Pulumi 프로젝트를 만들 디렉토리로 이동합니다. cd 명령을 사용하여 디렉토리를 변경할 수 있습니다.

    3. 프로젝트에 대한 새 디렉토리를 생성합니다.

      예:

      mkdir my-oci-project
      cd my-oci-project
      
  2. 다음 명령을 실행하여 OCI Python 템플리트를 사용하여 새 Pulumi 프로젝트를 생성합니다. 여기서 우리는 python을 pulumi의 프로그래밍 언어로 사용하지만, 지원되는 프로그래밍 언어 중 원하는 것을 사용할 수 있습니다.

    pulumi new oci-python
    
  3. Pulumi가 프로젝트 구성을 요청합니다. 프로젝트 이름, 프로젝트 설명 및 스택 이름과 같은 필요한 정보를 입력하고 입력을 누릅니다.

    예:

    Project name: my-oci-project
    Project description: This is an example of OCI Compute and VCN deployment
    Stack name: Dev
    
  4. 코드를 복사하고 사용자 정의합니다.

    1. Pulumi는 프로젝트 디렉토리에 __main__.py라는 기본 Python 파일을 만듭니다.

    2. 텍스트 편집기 또는 IDE VS 코드를 사용하여 이 파일을 엽니다.

    3. Pulumi의 Python SDK를 사용하여 OCI 인프라 코드를 작성하고 VCN, 서브넷, 보안 그룹 등을 정의합니다. 예를 들어, 제공된 Python 코드를 __main__.py라는 새 파일로 복사하고 위치 표시자 값을 실제 OCI 구획 ID 및 표시 이름으로 바꾸어 코드를 사용자정의합니다. 이러한 변경사항은 리소스가 올바른 구획에 생성되고 의미 있는 이름을 가지도록 보장합니다.

      """A OCI Python Pulumi program"""
      
      import pulumi
      import pulumi_oci as oci
      from pulumi_oci import core
      from pulumi_oci import identity
      
      
      # Create a New VCN
      test_vcn = oci.core.Vcn("test_vcn",
         compartment_id="ocid1.compartment.oc1...xx...xxx",
         cidr_block="10.0.0.0/16",
         display_name="ocinetwork",
         dns_label="ocinetwork"
      )
      
      #Code block for InternetGateway
      test_internet_gateway = oci.core.InternetGateway("test_internet_gateway",
         compartment_id="ocid1.compartment.oc1...xx...xxx",
         vcn_id=test_vcn.id,
         enabled="true",
         display_name="internet_gateway")
      
      
      #Code block for route table and attach to IG
      test_route_table = oci.core.RouteTable("test_route_table",
         compartment_id="ocid1.compartment.oc1...xx...xxx",
         vcn_id=test_vcn.id,
         display_name="route_table_ig",
         route_rules=[oci.core.RouteTableRouteRuleArgs(
            network_entity_id=test_internet_gateway.id,
            destination="0.0.0.0/0",
            destination_type="CIDR_BLOCK",
         )])
      
      #Code block for security list
      security_list_resource = oci.core.SecurityList("securityListResource",
         compartment_id="ocid1.compartment.oc1...xx...xxx",
         vcn_id=test_vcn.id,
         display_name="sc_list",
         egress_security_rules=[oci.core.SecurityListEgressSecurityRuleArgs(
            destination="0.0.0.0/0",
            protocol="all",
            destination_type="CIDR_BLOCK",
            stateless=False,
         )],
      
         ingress_security_rules=[
            oci.core.SecurityListIngressSecurityRuleArgs(
                  protocol="6",
                  source="0.0.0.0/0",
                  description="Sor SSH",
                  tcp_options=oci.core.SecurityListIngressSecurityRuleTcpOptionsArgs(
                     max=22,
                     min=22,
                  ),
                  source_type="CIDR_BLOCK",
                  stateless=False,
            ),
            oci.core.SecurityListIngressSecurityRuleArgs(
                  protocol="1",
                  source="0.0.0.0/0",
                  description="ICMP",
                  icmp_options=oci.core.SecurityListIngressSecurityRuleIcmpOptionsArgs(
                     type=3,
                     code=4,
                  ),
                  source_type="CIDR_BLOCK",
                  stateless=False,
            )
         ]
      )
      
      # Create a Public Subnet
      test_public_subnet = oci.core.Subnet("test_public_subnet",
         cidr_block="10.0.0.0/24",
         compartment_id="ocid1.compartment.oc1...xx...xxx",
         vcn_id=test_vcn.id ,
         display_name="public_subnet",
         dns_label="publicsubnet",
         prohibit_internet_ingress="False",
         prohibit_public_ip_on_vnic="False",
         route_table_id=test_route_table.id,
         security_list_ids=[security_list_resource.id])
      
      # Create a Private Subnet
      test_Private_subnet = oci.core.Subnet("test_private_subnet",
         cidr_block="10.0.1.0/24",
         compartment_id="ocid1.compartment.oc1...xx...xxx",
         vcn_id=test_vcn.id ,
         display_name="private_subnet",
         dns_label="privatesubnet",
         prohibit_internet_ingress="true",
         prohibit_public_ip_on_vnic="true")
      

    이 코드는 관련 리소스와 함께 OCI의 VCN을 프로비저닝합니다. 인터넷 게이트웨이를 생성하고 경로 지정을 위해 경로 테이블을 연결하며 네트워크 트래픽 제어를 위한 보안 목록을 설정합니다. 또한 VCN 내에 공용 서브넷과 전용 서브넷을 모두 생성하며, 각각 CIDR 블록 및 DNS 레이블과 같은 특정 네트워크 구성을 사용합니다. 전용 서브넷이 인스턴스에 대한 인터넷 액세스 및 공용 IP 지정을 금지하도록 보장하여 네트워크 보안을 강화합니다.

  5. VCN 코드를 배치합니다.

    1. 다음 명령을 실행하여 VCN 리소스를 배치합니다.

      pulumi up
      
    2. Pulumi는 코드에 정의된 리소스를 감지하고 배포를 확인하라는 메시지를 표시합니다. 변경 사항을 검토하고 프롬프트가 표시되면 yes를 입력하여 계속합니다.

  6. 배치가 완료되면 VCN 및 기타 리소스가 OCI에서 프로비전되었는지 확인합니다. OCI 콘솔을 확인하거나 OCI CLI(Oracle Cloud Infrastructure Command Line Interface)를 사용하여 구획의 리소스를 나열할 수 있습니다.

작업 2: 컴퓨트 인스턴스 생성

Pulumi를 사용하여 기존 VCN에 OCI 컴퓨팅 인스턴스를 추가하여 OCI 배포를 확장해 보겠습니다.

  1. Pulumi 프로젝트에 액세스하려면 Pulumi 프로젝트가 포함된 디렉토리로 이동하고 __main__.py 파일을 엽니다.

  2. 다음 코드를 복사하여 __main__.py 파일에 붙여넣어 기존 VCN 배치 코드 이후에 업데이트합니다.

    # Create a Compute Instance
    compartment_id = "ocid1.compartment.oc1..xxxxxx"
    test_availability_domains = oci.identity.get_availability_domains(compartment_id="ocid1.compartment.oc1.xxx")
    public_ssh_key = "Copy and Paste the Public SSH Key"
    
    instance = oci.core.Instance("my-vm-instance",
       # Replace with your desired availability domain.
       availability_domain=test_availability_domains.availability_domains[0].name,
       # Replace with your compartment ID.
       compartment_id="ocid1.compartment.oc1..xxxxxxxx",
       # Using VM.Standard.E4.Flex shape.
       shape="VM.Standard.E4.Flex",
       # Replace with your subnet ID.
       create_vnic_details=oci.core.InstanceCreateVnicDetailsArgs(
          assign_private_dns_record=True,
          assign_public_ip="true",
          display_name="pulumideminst",
          subnet_id=test_public_subnet.id,
       ),
       # Metadata for the instance, including SSH keys for access.
       metadata={
          "ssh_authorized_keys": public_ssh_key
          #"ssh_authorized_keys": std.file_output(input=public_ssh_key).apply(lambda invoke: invoke.result)
       },
       # Use an Oracle-provided image or your own custom image.
       source_details=oci.core.InstanceSourceDetailsArgs(
          source_type="image",
          # Replace with the image OCID.
          source_id="ocid1.image.oc1.iad.aaaaaaaalbjc2slze7i3rbpho3p4ict6u4k2l6r2r3igvvkopbfd4xt2wwla",
       ),
       # Specifying the OCPU and memory configurations.
       shape_config=oci.core.InstanceShapeConfigArgs(
          ocpus=2.0,    # Number of OCPUs.
          memory_in_gbs=8.0,  # Amount of RAM in GBs.
       ),
       # Additional arguments like display name, can be specified here.
       display_name="pulumidemo_instance",)
    
    # Exporting the public IP of the instance.
    pulumi.export('instance_public_ip', instance.public_ip),
    pulumi.export('create_shape', instance.shape)
    pulumi.export('create_vnic', instance.create_vnic_details)
    pulumi.export('create_vnic', instance.create_vnic_details["display_name"])
    

    ocid1.compartment.oc1.xxxxxxx을 구획 ID, VM.Standard.E4.Flex을 원하는 인스턴스 구성으로, ocid1.image.oc1.iad.xxxxxxx을 원하는 이미지 ID로, YOUR_SSH_PUBLIC_KEY을 SSH 공용 키로 바꿉니다.

  3. __main__.py에 대한 변경사항을 저장하고 Pulumi 명령행 인터페이스를 사용하여 업데이트된 스택을 배치합니다.

    pulumi up
    
  4. 배치 후 컴퓨트 인스턴스가 VCN 내에서 성공적으로 프로비전되었는지 확인하십시오. OCI 콘솔을 확인하거나 OCI CLI를 사용하여 구획에 인스턴스를 나열할 수 있습니다.

  5. 이제 SSH를 통해 OCI 컴퓨팅 인스턴스에 액세스할 수 있습니다. 필요한 보안 그룹 및 규칙이 액세스용으로 구성되어 있는지 확인합니다.

    Pulumi_OCI_Instance_Output

확인

추가 학습 자원

docs.oracle.com/learn에서 다른 실습을 살펴보거나 Oracle Learning YouTube 채널에서 더 많은 무료 학습 콘텐츠에 액세스하십시오. 또한 education.oracle.com/learning-explorer를 방문하여 Oracle Learning Explorer가 되십시오.

제품 설명서는 Oracle Help Center를 참조하십시오.