Observação:

Implantar Instância de Computação e VCN usando Pulumi no Oracle Cloud Infrastructure

Introdução

Neste tutorial, implantaremos instância de computação e Redes Virtuais na Nuvem (VCN) usando o Pulumi. Com a simplicidade da Pulumi e a infraestrutura robusta da Oracle Cloud Infrastructure (OCI), você aprenderá a automatizar os processos de implementação sem esforço. Você aprenderá a implementar e gerenciar recursos da OCI com facilidade, desbloqueando novas possibilidades na implementação na nuvem.

Objetivo

Pré-requisitos

Tarefa 1: Criar uma VCN

Implante uma VCN usando Pulumi.

  1. Crie um novo diretório para o projeto Pulumi.

    1. Abra o terminal ou o prompt de comando.

    2. Navegue até o diretório onde você deseja criar seu projeto Pulumi. Você pode usar o comando cd para alterar diretórios.

    3. Crie um novo diretório para seu projeto.

      Por exemplo:

      mkdir my-oci-project
      cd my-oci-project
      
  2. Execute o comando a seguir para criar um novo projeto Pulumi usando o modelo OCI Python. Aqui nós usamos python como o idioma de programação para pulumi, mas você pode usar qualquer um dos idiomas de programação suportados de sua escolha.

    pulumi new oci-python
    
  3. Pulumi irá pedir-lhe para configurar o seu projeto. Especifique as informações necessárias, como o nome do projeto, a descrição do projeto e o nome da pilha, e clique em Inserir.

    Por exemplo:

    Project name: my-oci-project
    Project description: This is an example of OCI Compute and VCN deployment
    Stack name: Dev
    
  4. Copie e personalize o código.

    1. O Pulumi criará um arquivo Python básico chamado __main__.py no diretório do seu projeto.

    2. Abra esse arquivo usando um editor de texto ou um Código IDE VS.

    3. Escreva seu código de infraestrutura da OCI usando o Python SDK da Pulumi e defina sua VCN, sub-redes, grupos de segurança e assim por diante. Por exemplo, copie o código Python fornecido em um novo arquivo chamado __main__.py e personalize o código substituindo os valores de espaço reservado pelos IDs de compartimento e nomes de exibição reais do OCI. Essas alterações garantem que seus recursos sejam criados no compartimento correto e tenham nomes significativos.

      """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")
      

    Esse código provisiona uma VCN no OCI com seus recursos associados. Ele cria um gateway de internet, anexa uma tabela de roteamento a ele para roteamento e configura uma lista de segurança para controlar o tráfego de rede. Além disso, ele cria uma sub-rede pública e privada dentro da VCN, cada uma com configurações de rede específicas, como blocos CIDR e labels de DNS. Ele garante que a sub-rede privada proíba o acesso à internet e a atribuição de IP público às instâncias, aprimorando a segurança da rede.

  5. Implante um código de VCN.

    1. Execute o comando a seguir para implantar um recurso da VCN.

      pulumi up
      
    2. Pulumi irá detectar os recursos definidos no seu código e pedir-lhe para confirmar a implantação. Verifique as alterações e, quando solicitado, digite yes para continuar.

  6. Quando a implantação estiver concluída, verifique se a sua VCN e outros recursos foram provisionados no OCI. Você pode verificar a Console do OCI ou usar a CLI (Interface de Linha de Comando) do Oracle Cloud Infrastructure para listar os recursos em seu compartimento.

Tarefa 2: Criar uma Instância de Computação

Vamos expandir a implantação do OCI adicionando instâncias do OCI Compute à sua VCN existente usando Pulumi.

  1. Para acessar o projeto Pulumi, navegue até o diretório que contém seu projeto Pulumi e abra o arquivo __main__.py.

  2. Copie o código a seguir e cole-o no arquivo __main__.py para atualizar após o código de implantação da VCN existente.

    # 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"])
    

    Substitua ocid1.compartment.oc1.xxxxxxx pelo ID do compartimento, VM.Standard.E4.Flex pela forma da instância desejada, ocid1.image.oc1.iad.xxxxxxx pelo ID da imagem desejada e YOUR_SSH_PUBLIC_KEY pela chave pública SSH.

  3. Salve suas alterações em __main__.py e implante sua pilha atualizada usando a interface de linha de comando Pulumi.

    pulumi up
    
  4. Após a implantação, verifique se sua instância de computação foi provisionada com sucesso dentro da VCN. Você pode verificar a Console do OCI ou usar a CLI do OCI para listar a instância em seu compartimento.

  5. Agora você pode acessar a instância do OCI Compute via SSH. Certifique-se de ter os grupos de segurança e as regras necessários configurados para acesso.

    Pulumi_OCI_Instance_Output

Confirmação

Mais Recursos de Aprendizagem

Explore outros laboratórios em docs.oracle.com/learn ou acesse mais conteúdo de aprendizado gratuito no canal Oracle Learning YouTube. Além disso, visite education.oracle.com/learning-explorer para se tornar um Oracle Learning Explorer.

Para obter a documentação do produto, visite o Oracle Help Center.