Note:

Despliegue de una instancia informática y una VCN con Pulumi en Oracle Cloud Infrastructure

Introducción

En este tutorial, desplegaremos la instancia informática y las redes virtuales en la nube (VCN) con Pulumi. Con la simplicidad de Pulumi y la sólida infraestructura de Oracle Cloud Infrastructure (OCI), aprenderás a automatizar los procesos de despliegue sin esfuerzo. Aprenderá a desplegar y gestionar recursos de OCI con facilidad, desbloqueando nuevas posibilidades en el despliegue en la nube.

Objetivo

Requisitos

Tarea 1: Crear una VCN

Despliegue una VCN con Pulumi.

  1. Cree un nuevo directorio para el proyecto Pulumi.

    1. Abra el terminal o el símbolo del sistema.

    2. Navegue al directorio donde desea crear su proyecto Pulumi. Puede utilizar el comando cd para cambiar directorios.

    3. Cree un nuevo directorio para el proyecto.

      Por ejemplo:

      mkdir my-oci-project
      cd my-oci-project
      
  2. Ejecute el siguiente comando para crear un nuevo proyecto Pulumi con la plantilla de OCI Python. Aquí hacemos rae usando python como el lenguaje de programación para pulumi, pero puedes usar cualquiera de los lenguajes de programación compatibles de tu elección.

    pulumi new oci-python
    
  3. Pulumi te pedirá que configures tu proyecto. Introduzca la información necesaria, como el nombre del proyecto, la descripción del proyecto y el nombre de pila, y haga clic en Intro.

    Por ejemplo:

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

    1. Pulumi creará un archivo Python básico denominado __main__.py en el directorio del proyecto.

    2. Abra este archivo con un editor de texto o IDE VS Code.

    3. Escriba su código de infraestructura de OCI mediante el SDK de Python de Pulumi y defina su VCN, subredes, grupos de seguridad, etc. Por ejemplo, copie el código Python proporcionado en un nuevo archivo denominado __main__.py y personalice el código sustituyendo los valores de marcador de posición por los ID de compartimento de OCI y los nombres mostrados reales. Estos cambios garantizan que los recursos se creen en el compartimento correcto y que tengan nombres 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")
      

    Este código aprovisiona una VCN en OCI junto con sus recursos asociados. Crea un gateway de Internet, le asocia una tabla de rutas para el enrutamiento y configura una lista de seguridad para controlar el tráfico de red. Además, crea una subred pública y privada en la VCN, cada una con configuraciones de red específicas como bloques CIDR y etiquetas DNS. Garantiza que la subred privada prohíba el acceso a Internet y la asignación de IP pública a las instancias, lo que mejora la seguridad de la red.

  5. Despliegue un código de VCN.

    1. Ejecute el siguiente comando para desplegar un recurso de VCN.

      pulumi up
      
    2. Pulumi detectará los recursos definidos en el código y le solicitará que confirme el despliegue. Revise los cambios y, cuando se le solicite, introduzca yes para continuar.

  6. Una vez completado el despliegue, verifique que la VCN y otros recursos se hayan aprovisionado en OCI. Puede comprobar la consola de OCI o utilizar la interfaz de línea de comandos (CLI de OCI) de Oracle Cloud Infrastructure para mostrar los recursos del compartimento.

Tarea 2: Crear una instancia informática

Vamos a ampliar el despliegue de OCI agregando instancias de OCI Compute a su VCN existente mediante Pulumi.

  1. Para acceder al proyecto Pulumi, vaya al directorio que contiene el proyecto Pulumi y abra el archivo __main__.py.

  2. Copie el siguiente código y péguelo en el archivo __main__.py para actualizarlo después del código de despliegue de la 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"])
    

    Sustituya ocid1.compartment.oc1.xxxxxxx por el ID de compartimento, VM.Standard.E4.Flex por la unidad de instancia deseada, ocid1.image.oc1.iad.xxxxxxx por el ID de imagen deseado y YOUR_SSH_PUBLIC_KEY por la clave pública SSH.

  3. Guarde los cambios en __main__.py y despliegue la pila actualizada mediante la interfaz de línea de comandos Pulumi.

    pulumi up
    
  4. Después del despliegue, verifique que la instancia informática se ha aprovisionado correctamente en la VCN. Puede comprobar la consola de OCI o utilizar la CLI de OCI para mostrar la instancia en el compartimento.

  5. Ahora puede acceder a la instancia de OCI Compute a través de SSH. Asegúrese de que tiene configuradas las reglas y los grupos de seguridad necesarios para el acceso.

    Pulumi_OCI_Instance_Output

Confirmaciones

Más recursos de aprendizaje

Explore otros laboratorios en docs.oracle.com/learn o acceda a más contenido de aprendizaje gratuito en el canal YouTube de Oracle Learning. Además, visite education.oracle.com/learning-explorer para convertirse en Oracle Learning Explorer.

Para obtener documentación sobre el producto, visite Oracle Help Center.