Remarques :

Déployez l'instance de calcul et le VCN à l'aide de Pulumi dans Oracle Cloud Infrastructure

Introduction

Dans ce tutoriel, nous allons déployer une instance de calcul et des réseaux cloud virtuels (VCN) à l'aide de Pulumi. Grâce à la simplicité de Pulumi et à l'infrastructure robuste d'Oracle Cloud Infrastructure (OCI), vous apprendrez à automatiser les processus de déploiement sans effort. Vous apprendrez à déployer et à gérer facilement des ressources OCI, en exploitant de nouvelles possibilités de déploiement dans le cloud.

Objectif

Prérequis

Tâche 1 : créer un VCN

Déployez un VCN à l'aide de Pulumi.

  1. Créez un répertoire pour le projet Pulumi.

    1. Ouvrez le terminal ou l'invite de commande.

    2. Accédez au répertoire dans lequel vous souhaitez créer votre projet Pulumi. Vous pouvez utiliser la commande cd pour changer de répertoire.

    3. Créez un répertoire pour votre projet.

      Exemple :

      mkdir my-oci-project
      cd my-oci-project
      
  2. Exécutez la commande suivante pour créer un projet Pulumi à l'aide du modèle OCI Python. Ici, nous utilisons python comme langue de programmation pour pulumi, mais vous pouvez utiliser n'importe quelle langue de programmation prise en charge de votre choix.

    pulumi new oci-python
    
  3. Pulumi vous demandera de configurer votre projet. Entrez les informations nécessaires, telles que le nom du projet, sa description et le nom de la pile, puis cliquez sur Entrée.

    Exemple :

    Project name: my-oci-project
    Project description: This is an example of OCI Compute and VCN deployment
    Stack name: Dev
    
  4. Copiez et personnalisez le code.

    1. Pulumi créera un fichier Python de base nommé __main__.py dans votre répertoire de projet.

    2. Ouvrez ce fichier à l'aide d'un éditeur de texte ou d'un IDE VS Code.

    3. Ecrivez votre code d'infrastructure OCI à l'aide du kit SDK Python de Pulumi et définissez votre VCN, vos sous-réseaux, vos groupes de sécurité, etc. Par exemple, copiez le code Python fourni dans un nouveau fichier nommé __main__.py et personnalisez le code en remplaçant les valeurs d'espace réservé par les ID de compartiment OCI et les noms d'affichage réels. Ces modifications garantissent que vos ressources sont créées dans le compartiment approprié et portent des noms significatifs.

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

    Ce code provisionne un VCN dans OCI avec ses ressources associées. Il crée une passerelle Internet, lui attache une table de routage pour le routage et configure une liste de sécurité pour le contrôle du trafic réseau. En outre, il crée à la fois un sous-réseau public et un sous-réseau privé dans le VCN, chacun avec des configurations réseau spécifiques telles que des blocs CIDR et des étiquettes DNS. Il garantit que le sous-réseau privé interdit l'accès Internet et l'affectation d'adresses IP publiques aux instances, ce qui améliore la sécurité du réseau.

  5. Déployez un code VCN.

    1. Exécutez la commande suivante pour déployer une ressource VCN.

      pulumi up
      
    2. Pulumi détectera les ressources définies dans votre code et vous invitera à confirmer le déploiement. Vérifiez les modifications et, lorsque vous y êtes invité, entrez yes pour continuer.

  6. Une fois le déploiement terminé, vérifiez que votre VCN et d'autres ressources ont été provisionnés dans OCI. Vous pouvez consulter la console OCI ou utiliser l'interface de ligne de commande Oracle Cloud Infrastructure (interface de ligne de commande OCI) pour répertorier les ressources de votre compartiment.

Tâche 2 : créer une instance de calcul

Développons le déploiement OCI en ajoutant des instances OCI Compute à votre VCN existant à l'aide de Pulumi.

  1. Pour accéder au projet Pulumi, accédez au répertoire contenant votre projet Pulumi et ouvrez le fichier __main__.py.

  2. Copiez le code suivant et collez-le dans le fichier __main__.py pour le mettre à jour après votre code de déploiement VCN existant.

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

    Remplacez ocid1.compartment.oc1.xxxxxxx par l'ID de compartiment, VM.Standard.E4.Flex par la forme d'instance souhaitée, ocid1.image.oc1.iad.xxxxxxx par l'ID d'image souhaité et YOUR_SSH_PUBLIC_KEY par la clé publique SSH.

  3. Enregistrez vos modifications dans __main__.py et déployez votre pile mise à jour à l'aide de l'interface de ligne de commande Pulumi.

    pulumi up
    
  4. Après le déploiement, vérifiez que votre instance de calcul a été provisionnée avec succès dans le VCN. Vous pouvez consulter la console OCI ou utiliser l'interface de ligne de commande OCI pour répertorier l'instance dans votre compartiment.

  5. Vous pouvez désormais accéder à l'instance OCI Compute via SSH. Assurez-vous que les groupes de sécurité et les règles nécessaires sont configurés pour l'accès.

    Pulumi_OCI_Instance_Output

Remerciements

Ressources de formation supplémentaires

Parcourez d'autres ateliers sur docs.oracle.com/learn ou accédez à davantage de contenus de formation gratuits sur le canal Oracle Learning YouTube. De plus, rendez-vous sur education.oracle.com/learning-explorer pour devenir un explorateur Oracle Learning.

Pour obtenir de la documentation sur le produit, visitez Oracle Help Center.