Wie man eine Amazon AWS EC2-Instanz mit Python Boto3 erstellt

In diesem Artikel werden wir sehen, wie wir mit Python Boto3 eine EC2-Instanz erstellen können. Wir werden die Methode „create_instances“ verwenden, um eine Instanz zu erstellen. Es gibt noch viele weitere Methoden, die zum EC2 Instance Service gehören. Um mehr über sie zu erfahren, besuche die offizielle Seite von Boto3 hier. All diese verschiedenen Methoden helfen dabei, verschiedene Ressourcen zu erstellen, die unter den EC2 Service von AWS fallen.

Bevor wir fortfahren, gehe ich davon aus, dass du ein Grundverständnis von EC2 und Python hast.

Wenn du dich nicht mit EC2-Instanzen auskennst und wissen willst, wie du eine Instanz über die AWS-Konsole erstellst, kannst du hier klicken.

Vorraussetzungen

  1. AWS-Konto (Erstelle wenn du noch keines hast)
  2. Grundlegendes Verständnis von EC2.
  3. GrundlegendesVerständnis von Python.
  4. Python ist auf dem System verfügbar.

Was wir tun werden

  1. Installiere Boto3 und andere Abhängigkeiten.
  2. Die erforderliche Methode kennen.
  3. Eine EC2-Instanz mit Python Boto3 erstellen.

Installiere die Boto3-Abhängigkeiten

Python ist standardmäßig in Ubuntu 18.04 Server enthalten, du musst es also nicht installieren.

Um die Python-Version auf deinem System zu überprüfen, verwende den folgenden Befehl.

welches python
/usr/bin/python –version

ODER

python –version

Check python version

Wenn du pip nicht hast und Ubuntu Linux verwendest, führe den folgenden Befehl aus, um zunächst das lokale Repo zu aktualisieren.

sudo apt update

Pakete aktualisieren

Um pip zu installieren, verwende den folgenden Befehl.

sudo apt install python-pip

Python installieren pip

Um die installierte Version von Pip zu überprüfen, führe den folgenden Befehl aus.

pip –version

Pip-Version prüfen

Sobald du python und pip installiert hast, kannst du Boto3 installieren.

Die Installation von Boto3 ist sehr einfach und unkompliziert. Um Boto3 zu installieren, verwende den folgenden Befehl.

pip install boto3

Boto3 installieren

Um zu überprüfen, ob Boto3 installiert ist und welche Version es hat, führst du den folgenden Befehl aus.

pip show boto3

Boto3 anzeigen

Kenne die benötigte Methode

Um eine einfache EC2-Instanz zu erstellen, verwenden wir die Methode „create_instances“. Im Folgenden findest du die Syntax der Methode mit allen Parametern, die sie annehmen kann. Wir werden nicht alle diese Parameter verwenden, um eine Instanz zu erstellen, aber du kannst es ausprobieren, wenn du möchtest.

Syntax der Anfrage:

instance = ec2.create_instances(
    BlockDeviceMappings=[
        {
            'DeviceName': 'string',
            'VirtualName': 'string',
            'Ebs': {
                'DeleteOnTermination': True|False,
                'Iops': 123,
                'SnapshotId': 'string',
                'VolumeSize': 123,
                'VolumeType': 'standard'|'io1'|'gp2'|'sc1'|'st1',
                'KmsKeyId': 'string',
                'Encrypted': True|False
            },
            'NoDevice': 'string'
        },
    ],
    ImageId='string',
    InstanceType='t1.micro'|'t2.nano'|'t2.micro'|'t2.small'|'t2.medium'|'t2.large'|'t2.xlarge'|'t2.2xlarge'|'t3.nano'|'t3.micro'|'t3.small'|'t3.medium'|'t3.large'|'t3.xlarge'|'t3.2xlarge'|'t3a.nano'|'t3a.micro'|'t3a.small'|'t3a.medium'|'t3a.large'|'t3a.xlarge'|'t3a.2xlarge'|'m1.small'|'m1.medium'|'m1.large'|'m1.xlarge'|'m3.medium'|'m3.large'|'m3.xlarge'|'m3.2xlarge'|'m4.large'|'m4.xlarge'|'m4.2xlarge'|'m4.4xlarge'|'m4.10xlarge'|'m4.16xlarge'|'m2.xlarge'|'m2.2xlarge'|'m2.4xlarge'|'cr1.8xlarge'|'r3.large'|'r3.xlarge'|'r3.2xlarge'|'r3.4xlarge'|'r3.8xlarge'|'r4.large'|'r4.xlarge'|'r4.2xlarge'|'r4.4xlarge'|'r4.8xlarge'|'r4.16xlarge'|'r5.large'|'r5.xlarge'|'r5.2xlarge'|'r5.4xlarge'|'r5.8xlarge'|'r5.12xlarge'|'r5.16xlarge'|'r5.24xlarge'|'r5.metal'|'r5a.large'|'r5a.xlarge'|'r5a.2xlarge'|'r5a.4xlarge'|'r5a.8xlarge'|'r5a.12xlarge'|'r5a.16xlarge'|'r5a.24xlarge'|'r5d.large'|'r5d.xlarge'|'r5d.2xlarge'|'r5d.4xlarge'|'r5d.8xlarge'|'r5d.12xlarge'|'r5d.16xlarge'|'r5d.24xlarge'|'r5d.metal'|'r5ad.large'|'r5ad.xlarge'|'r5ad.2xlarge'|'r5ad.4xlarge'|'r5ad.8xlarge'|'r5ad.12xlarge'|'r5ad.16xlarge'|'r5ad.24xlarge'|'x1.16xlarge'|'x1.32xlarge'|'x1e.xlarge'|'x1e.2xlarge'|'x1e.4xlarge'|'x1e.8xlarge'|'x1e.16xlarge'|'x1e.32xlarge'|'i2.xlarge'|'i2.2xlarge'|'i2.4xlarge'|'i2.8xlarge'|'i3.large'|'i3.xlarge'|'i3.2xlarge'|'i3.4xlarge'|'i3.8xlarge'|'i3.16xlarge'|'i3.metal'|'i3en.large'|'i3en.xlarge'|'i3en.2xlarge'|'i3en.3xlarge'|'i3en.6xlarge'|'i3en.12xlarge'|'i3en.24xlarge'|'i3en.metal'|'hi1.4xlarge'|'hs1.8xlarge'|'c1.medium'|'c1.xlarge'|'c3.large'|'c3.xlarge'|'c3.2xlarge'|'c3.4xlarge'|'c3.8xlarge'|'c4.large'|'c4.xlarge'|'c4.2xlarge'|'c4.4xlarge'|'c4.8xlarge'|'c5.large'|'c5.xlarge'|'c5.2xlarge'|'c5.4xlarge'|'c5.9xlarge'|'c5.12xlarge'|'c5.18xlarge'|'c5.24xlarge'|'c5.metal'|'c5d.large'|'c5d.xlarge'|'c5d.2xlarge'|'c5d.4xlarge'|'c5d.9xlarge'|'c5d.12xlarge'|'c5d.18xlarge'|'c5d.24xlarge'|'c5d.metal'|'c5n.large'|'c5n.xlarge'|'c5n.2xlarge'|'c5n.4xlarge'|'c5n.9xlarge'|'c5n.18xlarge'|'cc1.4xlarge'|'cc2.8xlarge'|'g2.2xlarge'|'g2.8xlarge'|'g3.4xlarge'|'g3.8xlarge'|'g3.16xlarge'|'g3s.xlarge'|'g4dn.xlarge'|'g4dn.2xlarge'|'g4dn.4xlarge'|'g4dn.8xlarge'|'g4dn.12xlarge'|'g4dn.16xlarge'|'cg1.4xlarge'|'p2.xlarge'|'p2.8xlarge'|'p2.16xlarge'|'p3.2xlarge'|'p3.8xlarge'|'p3.16xlarge'|'p3dn.24xlarge'|'d2.xlarge'|'d2.2xlarge'|'d2.4xlarge'|'d2.8xlarge'|'f1.2xlarge'|'f1.4xlarge'|'f1.16xlarge'|'m5.large'|'m5.xlarge'|'m5.2xlarge'|'m5.4xlarge'|'m5.8xlarge'|'m5.12xlarge'|'m5.16xlarge'|'m5.24xlarge'|'m5.metal'|'m5a.large'|'m5a.xlarge'|'m5a.2xlarge'|'m5a.4xlarge'|'m5a.8xlarge'|'m5a.12xlarge'|'m5a.16xlarge'|'m5a.24xlarge'|'m5d.large'|'m5d.xlarge'|'m5d.2xlarge'|'m5d.4xlarge'|'m5d.8xlarge'|'m5d.12xlarge'|'m5d.16xlarge'|'m5d.24xlarge'|'m5d.metal'|'m5ad.large'|'m5ad.xlarge'|'m5ad.2xlarge'|'m5ad.4xlarge'|'m5ad.8xlarge'|'m5ad.12xlarge'|'m5ad.16xlarge'|'m5ad.24xlarge'|'h1.2xlarge'|'h1.4xlarge'|'h1.8xlarge'|'h1.16xlarge'|'z1d.large'|'z1d.xlarge'|'z1d.2xlarge'|'z1d.3xlarge'|'z1d.6xlarge'|'z1d.12xlarge'|'z1d.metal'|'u-6tb1.metal'|'u-9tb1.metal'|'u-12tb1.metal'|'u-18tb1.metal'|'u-24tb1.metal'|'a1.medium'|'a1.large'|'a1.xlarge'|'a1.2xlarge'|'a1.4xlarge'|'a1.metal'|'m5dn.large'|'m5dn.xlarge'|'m5dn.2xlarge'|'m5dn.4xlarge'|'m5dn.8xlarge'|'m5dn.12xlarge'|'m5dn.16xlarge'|'m5dn.24xlarge'|'m5n.large'|'m5n.xlarge'|'m5n.2xlarge'|'m5n.4xlarge'|'m5n.8xlarge'|'m5n.12xlarge'|'m5n.16xlarge'|'m5n.24xlarge'|'r5dn.large'|'r5dn.xlarge'|'r5dn.2xlarge'|'r5dn.4xlarge'|'r5dn.8xlarge'|'r5dn.12xlarge'|'r5dn.16xlarge'|'r5dn.24xlarge'|'r5n.large'|'r5n.xlarge'|'r5n.2xlarge'|'r5n.4xlarge'|'r5n.8xlarge'|'r5n.12xlarge'|'r5n.16xlarge'|'r5n.24xlarge'|'inf1.xlarge'|'inf1.2xlarge'|'inf1.6xlarge'|'inf1.24xlarge'|'m6g.metal'|'m6g.medium'|'m6g.large'|'m6g.xlarge'|'m6g.2xlarge'|'m6g.4xlarge'|'m6g.8xlarge'|'m6g.12xlarge'|'m6g.16xlarge',
    Ipv6AddressCount=123,
    Ipv6Addresses=[
        {
            'Ipv6Address': 'string'
        },
    ],
    KernelId='string',
    KeyName='string',
    MaxCount=123,
    MinCount=123,
    Monitoring={
        'Enabled': True|False
    },
    Placement={
        'AvailabilityZone': 'string',
        'Affinity': 'string',
        'GroupName': 'string',
        'PartitionNumber': 123,
        'HostId': 'string',
        'Tenancy': 'default'|'dedicated'|'host',
        'SpreadDomain': 'string',
        'HostResourceGroupArn': 'string'
    },
    RamdiskId='string',
    SecurityGroupIds=[
        'string',
    ],
    SecurityGroups=[
        'string',
    ],
    SubnetId='string',
    UserData='string',
    AdditionalInfo='string',
    ClientToken='string',
    DisableApiTermination=True|False,
    DryRun=True|False,
    EbsOptimized=True|False,
    IamInstanceProfile={
        'Arn': 'string',
        'Name': 'string'
    },
    InstanceInitiatedShutdownBehavior='stop'|'terminate',
    NetworkInterfaces=[
        {
            'AssociatePublicIpAddress': True|False,
            'DeleteOnTermination': True|False,
            'Description': 'string',
            'DeviceIndex': 123,
            'Groups': [
                'string',
            ],
            'Ipv6AddressCount': 123,
            'Ipv6Addresses': [
                {
                    'Ipv6Address': 'string'
                },
            ],
            'NetworkInterfaceId': 'string',
            'PrivateIpAddress': 'string',
            'PrivateIpAddresses': [
                {
                    'Primary': True|False,
                    'PrivateIpAddress': 'string'
                },
            ],
            'SecondaryPrivateIpAddressCount': 123,
            'SubnetId': 'string',
            'InterfaceType': 'string'
        },
    ],
    PrivateIpAddress='string',
    ElasticGpuSpecification=[
        {
            'Type': 'string'
        },
    ],
    ElasticInferenceAccelerators=[
        {
            'Type': 'string',
            'Count': 123
        },
    ],
    TagSpecifications=[
        {
            'ResourceType': 'client-vpn-endpoint'|'customer-gateway'|'dedicated-host'|'dhcp-options'|'elastic-ip'|'fleet'|'fpga-image'|'host-reservation'|'image'|'instance'|'internet-gateway'|'key-pair'|'launch-template'|'natgateway'|'network-acl'|'network-interface'|'placement-group'|'reserved-instances'|'route-table'|'security-group'|'snapshot'|'spot-fleet-request'|'spot-instances-request'|'subnet'|'traffic-mirror-filter'|'traffic-mirror-session'|'traffic-mirror-target'|'transit-gateway'|'transit-gateway-attachment'|'transit-gateway-multicast-domain'|'transit-gateway-route-table'|'volume'|'vpc'|'vpc-peering-connection'|'vpn-connection'|'vpn-gateway'|'vpc-flow-log',
            'Tags': [
                {
                    'Key': 'string',
                    'Value': 'string'
                },
            ]
        },
    ],
    LaunchTemplate={
        'LaunchTemplateId': 'string',
        'LaunchTemplateName': 'string',
        'Version': 'string'
    },
    InstanceMarketOptions={
        'MarketType': 'spot',
        'SpotOptions': {
            'MaxPrice': 'string',
            'SpotInstanceType': 'one-time'|'persistent',
            'BlockDurationMinutes': 123,
            'ValidUntil': datetime(2015, 1, 1),
            'InstanceInterruptionBehavior': 'hibernate'|'stop'|'terminate'
        }
    },
    CreditSpecification={
        'CpuCredits': 'string'
    },
    CpuOptions={
        'CoreCount': 123,
        'ThreadsPerCore': 123
    },
    CapacityReservationSpecification={
        'CapacityReservationPreference': 'open'|'none',
        'CapacityReservationTarget': {
            'CapacityReservationId': 'string'
        }
    },
    HibernationOptions={
        'Configured': True|False
    },
    LicenseSpecifications=[
        {
            'LicenseConfigurationArn': 'string'
        },
    ],
    MetadataOptions={
        'HttpTokens': 'optional'|'required',
        'HttpPutResponseHopLimit': 123,
        'HttpEndpoint': 'disabled'|'enabled'
    }
)

Wir werden nicht alle diese Parameter benötigen, also sehen wir uns nur die Parameter an, die zwingend erforderlich sind, damit wir mit der Erstellung einer einfachen EC2-Instanz beginnen können.

  1. ImageId:Dies ist die ID des AMI, das für die Erstellung einer Instanz verwendet werden soll. Dieser Parameter ist für den Start einer Instanz erforderlich und muss angegeben werden.
  2. MinCount:Diesist dieMindestanzahl der zu startenden Instanzen. Dies ist ein Pflichtparameter.
  3. MaxCount:Diesist die maximale Anzahl der Instanzen, die gestartet werden sollen.Dies ist ein Pflichtparameter.
  4. InstanceType:Der Instanztyp, den du erstellen willst. Wenn du dies nicht angibst, wird der Standardinstanztypm1.small verwendet.
  5. Schlüsselname:Der Name des Schlüsselpaares. Du musst den Namen des Schlüsselpaars angeben, das du in deinem AWS-Konto erstellt und lokal gespeichert hast. Wenn du das nicht angibst, kannst du dich nicht mit der Instanz verbinden.

Eine EC2-Instanz mit Python Boto3 erstellen

Um eine einfache EC2-Instanz zu erstellen, deklarierst du zunächst alle erforderlichen Variablen und ihre Werte in der Datei“config.properties“.Achtedarauf, dass du die Werte von „aws_access_key_id_value“ und „aws_secret_access_key_value“ durch deine eigene access_key_id bzw. access_key_value ersetzt. Die restlichen Werte kannst du nach deinen Wünschen und deiner Verfügbarkeit im AWS-Konto festlegen.

vim config.properties

aws_access_key_id_value='ACCESS-KEY-OF-THE-AWS-ACCOUNT'
aws_secret_access_key_value='SECRETE-KEY-OF-THE-AWS-ACCOUNT'
region_name_value='us-west-2'
ImageId_value = 'ami-08692d171e3cf02d6'
MinCount_value = 1
MaxCount_value = 1
InstanceType_value = 't2.micro'
KeyName_value = 'my-key'

Konfig-Eigenschaften

Erstelle nun“ec2.py“ mit dem folgenden Code, der die Werte aus“config.properties“ liestund eine Instanz für dich erstellt.

vim ec2.py

import boto3

def getVarFromFile(filename):
    import imp
    f = open(filename)
    global data
    data = imp.load_source('data', '', f)
    f.close()


getVarFromFile('config.properties')

ec2 = boto3.resource(
'ec2',
    aws_access_key_id=data.aws_access_key_id_value,
    aws_secret_access_key=data.aws_secret_access_key_value,
    region_name=data.region_name_value
)

instance = ec2.create_instances(
    ImageId = data.ImageId_value,
    MinCount = data.MinCount_value,
    MaxCount = data.MaxCount_value,
    InstanceType = data.InstanceType_value,
    KeyName = data.KeyName_value)
print (instance[0].id)

Python-Skript

Jetzt bist du bereit, eine Instanz zu erstellen. Führe das Skript, das wir gerade erstellt haben, mit folgendem Befehl aus.

python ec2.py

Boto3-Skript ausführen

Die Instanz-ID wird auf deinem Bildschirm angezeigt.

Du kannst auf der Konsole überprüfen, ob die Instanz erstellt wurde oder nicht, indem du die Instanz-ID auf dem Bildschirm anzeigst. Hier kannst du sehen, dass die Instanz erstellt wurde und der „Status Check“ initialisiert wird.

VM erstellt in AWS mit Boto3

Fazit

Wir haben gesehen, wie man mit der Boto3-Bibliothek eine EC2-Instanz erstellt. Wir haben auch die Parameter gesehen, die für die Erstellung einer einfachen EC2-Instanz erforderlich sind. Du kannst diesen Code verwenden, um eine Instanz deiner Wahl zu erstellen. Versuche, verschiedene Parameter zu verwenden, die wir in diesem Artikel ausgelassen haben.

Das könnte dich auch interessieren …