Wie man eine Amazon AWS EC2-Instanz mit Python Boto3 erstellt
Wie man eine Amazon AWS EC2-Instanz mit Python Boto3 erstellt
Auf dieser Seite
- Voraussetzungen
- Was wir tun werden
- Installieren Sie die Boto3-Abhängigkeiten
- Kennt die erforderliche Methode
In diesem Artikel werden wir sehen, wie wir eine EC2-Instanz mit Python Boto3 erstellen können. Wir werden die Methode "create_instances" verwenden, um eine Instanz zu erstellen. Es gibt viele weitere Methoden, die zum EC2-Instanzdienst gehören. Um mehr darüber zu erfahren, besuchen Sie die offizielle Seite von Boto3 hier. All diese verschiedenen Methoden helfen dabei, verschiedene Ressourcen zu erstellen, die zum EC2-Dienst von AWS gehören.
Bevor wir fortfahren, gehe ich davon aus, dass Sie ein Grundverständnis von EC2 und Python haben.
Wenn Sie mit EC2-Instanzen und dem, was Sie lernen müssen, um eine von der AWS-Konsole zu erstellen, nicht vertraut sind, können Sie hier klicken.
Voraussetzungen
- Grundlegendes Verständnis von EC2.
- Grundlegendes Verständnis von Python.
- Python ist auf dem System verfügbar.
Was wir tun werden
- Installiere Boto3 und andere Abhängigkeiten.
Installieren Sie die Boto3-Abhängigkeiten
Python ist standardmäßig in Ubuntu 18.04 Server enthalten, sodass Sie es nicht installieren müssen.
Um die Python-Version auf Ihrem System zu überprüfen, verwenden Sie den folgenden Befehl.
welches Python
/usr/bin/python --version
ODER
python --version
Wenn Sie pip nicht haben und Ubuntu Linux verwenden, führen Sie den folgenden Befehl aus, um zuerst das lokale Repository zu aktualisieren.
sudo apt aktualisieren
Um pip zu installieren, verwenden Sie den folgenden Befehl.
sudo apt install python-pip
Um die installierte Version von Pip zu überprüfen, führen Sie den folgenden Befehl aus.
pip --version
Sobald Sie Python und pip haben, können Sie Boto3 installieren.
Die Installation von Boto3 ist sehr einfach und unkompliziert. Um Boto3 zu installieren, verwenden Sie den folgenden Befehl.
pip installieren boto3
Um zu überprüfen, ob Boto3 installiert ist und welche Version, führen Sie den folgenden Befehl aus.
pip zeigt boto3 an
Kennt die erforderliche Methode
Um eine einfache EC2-Instanz zu erstellen, verwenden wir die Methode "create_instances". Folgend finden Sie die Syntax der Methode mit all den Parametern, die sie akzeptieren kann. Wir werden nicht alle diese Parameter verwenden, um eine Instanz zu erstellen, aber Sie können es versuchen, wenn Sie möchten.
Anfrage-Syntax:
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 lassen Sie uns nur die Parameter ansehen, die zwingend erforderlich sind, um mit der Erstellung einer einfachen EC2-Instanz zu beginnen.
- ImageId: Diese Art ist die ID des AMIs, das verwendet werden soll, um eine Instanz zu erstellen. Dieses Parameter ist erforderlich, um eine Instanz zu starten und muss angegeben werden.
- MinCount: Diese Art benötigt die Mindestanzahl an Instanzen, um gestartet zu werden. Dies ist ein obligatorischer Parameter.
- MaxCount: Diese Art die maximalen Anzahl von Instanzen zum Starten.
- Instanztyp: Der Instanztyp, den Sie erstellen möchten. Wenn Sie dies nicht angeben, wird der Standardinstanztyp m1.small verwendet.
- KeyName: Der Name des Schlüsselpaares. Sie müssen den Namen des Schlüsselpaares angeben, das Sie im AWS-Konto erstellt und auch lokal gespeichert haben. Wenn Sie dies nicht angeben, können Sie nicht mit der Instanz verbinden.
Erstellen Sie eine EC2-Instanz mit Python Boto3
Um eine einfache EC2-Instanz zu erstellen, deklarieren Sie zunächst alle erforderlichen Variablen und deren Werte in "config.properties". Stellen Sie sicher, dass Sie die Werte von "aws_access_key_id_value" und "aws_secret_access_key_value" durch Ihren eigenen access_key_id und access_key_value ersetzen. Die restlichen Werte können Sie nach Ihrem Geschmack und der Verfügbarkeit in Ihrem AWS-Konto angeben.
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'Jetzt erstellen Sie "ec2.py" mit dem folgenden Code, der Werte aus "config.properties" liest und eine Instanz für Sie 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)Jetzt sind Sie bereit, eine Instanz zu erstellen und das Skript auszuführen, das wir gerade mit dem folgenden Befehl erstellt haben.
python ec2.py
Die Instanz-ID wird auf Ihrem Bildschirm angezeigt.
Sie können in der Konsole überprüfen, ob die Instanz mit der Instanz-ID, die Sie gerade im Terminal angezeigt bekommen haben, erstellt wurde oder nicht. Hier sehen Sie, dass die Instanz erstellt wurde und die "Statusüberprüfung" initialisiert wird.
Fazit
Wir haben die Methode gesehen, um eine EC2-Instanz mit der Boto3-Bibliothek zu erstellen. Wir haben auch die Parameter betrachtet, die erforderlich sind, um eine einfache EC2-Instanz zu erstellen. Sie können diesen Code verwenden, um eine Instanz nach Ihren Wünschen anzupassen und zu erstellen. Versuchen Sie, verschiedene Parameter zu verwenden, die wir in diesem Artikel übersprungen haben.





