Hinweis:

Compute-Instanz und VCN mit Pulumi in Oracle Cloud Infrastructure bereitstellen

Einführung

In diesem Tutorial stellen wir Compute-Instanzen und virtuelle Cloud-Netzwerke (VCN) mit Pulumi bereit. Mit der Einfachheit von Pulumi und der robusten Infrastruktur von Oracle Cloud Infrastructure (OCI) lernen Sie, Deployment-Prozesse mühelos zu automatisieren. Sie lernen, wie Sie OCI-Ressourcen einfach bereitstellen und verwalten und neue Möglichkeiten bei der Cloud-Bereitstellung erschließen.

Zielsetzung

Voraussetzungen

Aufgabe 1: VCN erstellen

VCN mit Pulumi bereitstellen.

  1. Erstellen Sie ein neues Verzeichnis für das Projekt Pulumi.

    1. Öffnen Sie das Terminal oder die Befehlszeile.

    2. Navigieren Sie zu dem Verzeichnis, in dem Sie Ihr Pulumi-Projekt erstellen möchten. Sie können den cd-Befehl verwenden, um Verzeichnisse zu ändern.

    3. Erstellen Sie ein neues Verzeichnis für Ihr Projekt.

      Beispiel:

      mkdir my-oci-project
      cd my-oci-project
      
  2. Führen Sie den folgenden Befehl aus, um ein neues Pulumi-Projekt mit der OCI-Python-Vorlage zu erstellen. Hier verwenden wir python als Programmiersprache für pulumi, aber Sie können eine der unterstützten Programmiersprachen Ihrer Wahl verwenden.

    pulumi new oci-python
    
  3. Pulumi wird Sie bitten, Ihr Projekt zu konfigurieren. Geben Sie die erforderlichen Informationen wie den Projektnamen, die Projektbeschreibung und den Stacknamen ein, und klicken Sie dann auf Eingabe.

    Beispiel:

    Project name: my-oci-project
    Project description: This is an example of OCI Compute and VCN deployment
    Stack name: Dev
    
  4. Kopieren Sie den Code, und passen Sie ihn an.

    1. Pulumi erstellt eine grundlegende Python-Datei mit dem Namen __main__.py in Ihrem Projektverzeichnis.

    2. Öffnen Sie diese Datei mit einem Texteditor oder IDE VS Code.

    3. Schreiben Sie Ihren OCI-Infrastrukturcode mit dem Python-SDK von Pulumi, und definieren Sie Ihr VCN, Ihre Subnetze, Sicherheitsgruppen usw. Beispiel: Kopieren Sie den angegebenen Python-Code in eine neue Datei namens __main__.py, und passen Sie den Code an, indem Sie die Platzhalterwerte durch Ihre tatsächlichen OCI-Compartment-IDs und Anzeigenamen ersetzen. Diese Änderungen stellen sicher, dass Ihre Ressourcen im richtigen Compartment erstellt werden und aussagekräftige Namen aufweisen.

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

    Dieser Code stellt ein VCN in OCI zusammen mit den zugehörigen Ressourcen bereit. Es erstellt ein Internetgateway, hängt ihm eine Routentabelle für das Routing an und richtet eine Sicherheitsliste zur Kontrolle des Netzwerktraffics ein. Darüber hinaus wird ein öffentliches und ein privates Subnetz im VCN mit jeweils spezifischen Netzwerkkonfigurationen wie CIDR-Blöcken und DNS-Labels erstellt. Dadurch wird sichergestellt, dass das private Subnetz den Internetzugriff und die öffentliche IP-Zuweisung zu Instanzen untersagt, wodurch die Netzwerksicherheit verbessert wird.

  5. VCN-Code bereitstellen.

    1. Führen Sie den folgenden Befehl aus, um eine VCN-Ressource bereitzustellen.

      pulumi up
      
    2. Pulumi erkennt die in Ihrem Code definierten Ressourcen und fordert Sie auf, die Bereitstellung zu bestätigen. Prüfen Sie die Änderungen. Wenn Sie dazu aufgefordert werden, geben Sie yes ein, um fortzufahren.

  6. Stellen Sie nach Abschluss des Deployments sicher, dass das VCN und andere Ressourcen in OCI bereitgestellt wurden. Sie können die OCI-Konsole prüfen oder die Oracle Cloud Infrastructure-Befehlszeilenschnittstelle (OCI-CLI) verwenden, um die Ressourcen in Ihrem Compartment aufzulisten.

Aufgabe 2: Compute-Instanz erstellen

Erweitern wir das OCI-Deployment, indem wir OCI Compute-Instanzen mit Pulumi zu Ihrem vorhandenen VCN hinzufügen.

  1. Um auf das Pulumi-Projekt zuzugreifen, navigieren Sie zu dem Verzeichnis, das Ihr Pulumi-Projekt enthält, und öffnen Sie die Datei __main__.py.

  2. Kopieren Sie den folgenden Code, und fügen Sie ihn in die Datei __main__.py ein, um ihn nach dem vorhandenen VCN-Deployment-Code zu aktualisieren.

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

    Ersetzen Sie ocid1.compartment.oc1.xxxxxxx durch die Compartment-ID, VM.Standard.E4.Flex durch die gewünschte Instanzausprägung, ocid1.image.oc1.iad.xxxxxxx durch die gewünschte Image-ID und YOUR_SSH_PUBLIC_KEY durch den SSH-Public Key.

  3. Speichern Sie die Änderungen an __main__.py, und stellen Sie den aktualisierten Stack mit der Pulumi-Befehlszeilenschnittstelle bereit.

    pulumi up
    
  4. Prüfen Sie nach dem Deployment, ob die Compute-Instanz erfolgreich im VCN bereitgestellt wurde. Sie können die OCI-Konsole prüfen oder die OCI-CLI verwenden, um die Instanz in Ihrem Compartment aufzulisten.

  5. Sie können jetzt über SSH auf die OCI Compute-Instanz zugreifen. Stellen Sie sicher, dass die erforderlichen Sicherheitsgruppen und -regeln für den Zugriff konfiguriert sind.

    Pulumi_OCI_Instance_Output

Danksagungen

Weitere Lernressourcen

Lernen Sie andere Übungen auf docs.oracle.com/learn kennen, oder greifen Sie auf weitere kostenlose Lerninhalte im Oracle Learning YouTube Channel zu. Besuchen Sie außerdem education.oracle.com/learning-explorer, um Oracle Learning Explorer zu werden.

Produktdokumentation finden Sie im Oracle Help Center.