Nota

Distribuisci l'istanza di computazione e la VCN utilizzando Pulumi in Oracle Cloud Infrastructure

Introduzione

In questa esercitazione verranno distribuite l'istanza di computazione e le reti cloud virtuali (VCN) utilizzando Pulumi. Con la semplicità di Pulumi e l'infrastruttura solida di Oracle Cloud Infrastructure (OCI), imparerai ad automatizzare facilmente i processi di implementazione. Imparerai come distribuire e gestire le risorse OCI con facilità, sbloccando nuove possibilità nella distribuzione cloud.

Obiettivo

Prerequisiti

Task 1: Creare una VCN

Distribuisci una VCN utilizzando Pulumi.

  1. Crea una nuova cartella per il progetto Pulumi.

    1. Aprire il terminale o il prompt dei comandi.

    2. Accedere alla cartella in cui si desidera creare il progetto Pulumi. È possibile utilizzare il comando cd per spostarsi nella directory.

    3. Creare una nuova directory per il progetto.

      Ad esempio:

      mkdir my-oci-project
      cd my-oci-project
      
  2. Eseguire il comando riportato di seguito per creare un nuovo progetto Pulumi utilizzando il modello Python OCI. Qui si rae utilizzando python come il langauge di programmazione per pulumi, ma è possibile utilizzare uno qualsiasi dei linguaggi di programmazione supportati di vostra scelta.

    pulumi new oci-python
    
  3. Pulumi ti chiederà di configurare il tuo progetto. Immettere le informazioni necessarie, ad esempio il nome del progetto, la descrizione del progetto e il nome dello stack, quindi fare clic su Invio.

    Ad esempio:

    Project name: my-oci-project
    Project description: This is an example of OCI Compute and VCN deployment
    Stack name: Dev
    
  4. Copiare e personalizzare il codice.

    1. Pulumi creerà un file Python di base denominato __main__.py nella directory del progetto.

    2. Aprire questo file utilizzando un editor di testo o IDE VS Code.

    3. Scrivere il codice dell'infrastruttura OCI utilizzando l'SDK Python di Pulumi e definire la VCN, le subnet, i gruppi di sicurezza e così via. Ad esempio, copiare il codice Python fornito in un nuovo file denominato __main__.py e personalizzare il codice sostituendo i valori dei segnaposto con gli ID e i nomi visualizzati effettivi del compartimento OCI. Queste modifiche garantiscono che le risorse vengano create nel compartimento corretto e abbiano nomi significativi.

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

    Questo codice esegue il provisioning di una VCN in OCI insieme alle risorse associate. Crea un gateway Internet, allega una tabella di instradamento per l'instradamento e imposta una lista di sicurezza per il controllo del traffico di rete. Inoltre, crea una subnet pubblica e privata all'interno della VCN, ognuna con configurazioni di rete specifiche come i blocchi CIDR e le etichette DNS. Garantisce che la subnet privata proibisca l'accesso a Internet e l'assegnazione IP pubblica alle istanze, migliorando la sicurezza della rete.

  5. Distribuire un codice VCN.

    1. Eseguire il comando riportato di seguito per distribuire una risorsa VCN.

      pulumi up
      
    2. Pulumi rileverà le risorse definite nel tuo codice e ti chiederà di confermare la distribuzione. Rivedere le modifiche e, quando richiesto, immettere yes per continuare.

  6. Una volta completata la distribuzione, verifica che il provisioning della VCN e di altre risorse sia stato eseguito in OCI. Puoi controllare la console OCI o utilizzare l'interfaccia della riga di comando di Oracle Cloud Infrastructure (OCI CLI) per elencare le risorse nel tuo compartimento.

Task 2: creare un'istanza di calcolo

Espandiamo la distribuzione OCI aggiungendo istanze di OCI Compute alla VCN esistente utilizzando Pulumi.

  1. Per accedere al progetto Pulumi, vai alla directory contenente il tuo progetto Pulumi e apri il file __main__.py.

  2. Copiare il codice seguente e incollarlo nel file __main__.py da aggiornare dopo il codice di distribuzione della VCN esistente.

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

    Sostituire ocid1.compartment.oc1.xxxxxxx con l'ID compartimento, VM.Standard.E4.Flex con la forma dell'istanza desiderata, ocid1.image.oc1.iad.xxxxxxx con l'ID immagine desiderato e YOUR_SSH_PUBLIC_KEY con la chiave pubblica SSH.

  3. Salvare le modifiche in __main__.py e distribuire lo stack aggiornato utilizzando l'interfaccia della riga di comando Pulumi.

    pulumi up
    
  4. Dopo la distribuzione, verificare che il provisioning dell'istanza di computazione sia stato eseguito correttamente all'interno della VCN. È possibile controllare la console OCI o utilizzare l'interfaccia CLI OCI per elencare l'istanza nel compartimento.

  5. Ora puoi accedere all'istanza di OCI Compute tramite SSH. Assicurarsi di disporre dei gruppi e delle regole di sicurezza necessari configurati per l'accesso.

    Pulumi_OCI_Instance_Output

Conferma

Altre risorse di apprendimento

Esplora altri laboratori su docs.oracle.com/learn o accedi a più contenuti gratuiti sulla formazione su Oracle Learning YouTube channel. Inoltre, visita education.oracle.com/learning-explorer per diventare Oracle Learning Explorer.

Per la documentazione del prodotto, visitare Oracle Help Center.