Как создать экземпляр Amazon AWS EC2 с помощью Python Boto3
В этой статье мы увидим, как мы можем создать экземпляр EC2 с помощью Python Boto3. Мы будем использовать метод create_instances для создания экземпляра. Есть много других методов, которые входят в службу экземпляра EC2, чтобы узнать о них, посетите официальную страницу Boto3 здесь. Все эти различные методы помогают создавать разные ресурсы, которые входят в состав службы EC2 AWS.
Прежде чем мы продолжим, я предполагаю, что у вас есть общее представление о EC2 и Python.
Если вы не знакомы с инстансами EC2 и не знаете, как их создать из консоли AWS, нажмите здесь.
Предпосылки
- Аккаунт AWS (создайте, если у вас его нет)
- Основное понимание EC2.
- Основное понимание Python.
- Python доступен в системе.
Что мы будем делать
- Установите Boto3 и другие зависимости.
- Знайте нужный метод.
- Создайте экземпляр EC2 с помощью Python Boto3.
Установите зависимости Boto3
Python входит в состав Ubuntu 18.04 Server по умолчанию, поэтому вам не нужно его устанавливать.
Чтобы проверить версию Python в вашей системе, используйте следующую команду.
какой python
/usr/bin/python --version
ИЛИ
питон --версия
Если у вас нет pip и вы используете Ubuntu Linux, выполните следующую команду, чтобы сначала обновить локальное хранилище.
судо подходящее обновление
Для установки pip используйте следующую команду.
sudo apt установить python-pip
Чтобы проверить установленную версию Pip, выполните следующую команду.
пип --версия
Если у вас есть python и pip, вы можете установить Boto3.
Установка Boto3 очень проста и понятна. Чтобы установить Boto3, используйте следующую команду.
pip install boto3
Чтобы проверить, установлен ли Boto3 и его версию, выполните следующую команду.
пип-шоу бото3
Знать нужный метод
Чтобы создать простой экземпляр EC2, мы будем использовать метод create_instances. Ниже приведен синтаксис метода со всеми параметрами, которые он может принимать. Мы не будем использовать все эти параметры для создания экземпляра, но вы можете попробовать, если хотите.
Синтаксис запроса:
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' } )
Нам не понадобятся все эти параметры, поэтому давайте рассмотрим только те параметры, которые являются обязательными и необходимы нам для начала создания простого экземпляра EC2.
- ImageId : идентификатор AMI, который будет использоваться для создания экземпляра. Этот параметр необходим для запуска экземпляра и должен быть указан.
- MinCount – определяет минимальное количество экземпляров для запуска. Это обязательный параметр.
- MaxCount. Указывает максимальное количество запускаемых экземпляров. Это обязательный параметр.
- InstanceType : тип создаваемого экземпляра. Если вы не укажете это, будет использоваться тип экземпляра по умолчанию m1.small.
- KeyName: имя пары ключей. Вам необходимо указать имя пары ключей, которую вы создали в учетной записи AWS и сохранили локально. Если вы не укажете это, вы не сможете подключиться к экземпляру.
Создайте экземпляр EC2 с помощью Python Boto3
Чтобы создать простой экземпляр EC2, сначала объявите все необходимые переменные и их значения в \config.properties\. Убедитесь, что вы изменили значения \aws_access_key_id_value\ и \aws_secret_access_key_value\ на свои собственные access_key_id и access_key_value соответственно. Остальные значения вы можете указать по своему выбору и доступности в учетной записи AWS.
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'
Теперь создайте \ec2.py\ со следующим кодом, который будет считывать значения из \config.properties\ и создавать для вас экземпляр.
вим 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 ec2.py
Идентификатор экземпляра будет напечатан на вашем экране.
Вы можете проверить из консоли, был ли экземпляр создан или нет, с идентификатором экземпляра, который вы только что видели напечатанным на терминале. Здесь вы можете видеть, что экземпляр был создан и инициализируется \Проверка состояния\.
Заключение
Мы увидели метод создания экземпляра EC2 с использованием библиотеки Boto3. Мы также видели параметры, которые являются обязательными и необходимы для создания простого экземпляра EC2. Вы можете использовать этот код для настройки и создания экземпляра по вашему выбору. Попробуйте использовать другие параметры, которые мы пропустили в этой статье.