Cómo crear una instancia Amazon AWS EC2 usando Python Boto3
En este artículo veremos cómo podemos crear una instancia EC2 utilizando Python Boto3. Usaremos el método «create_instances» para crear una instancia. Hay muchos más métodos que se encuentran bajo el servicio de instancia EC2, para conocerlos visite la página oficial de Boto3 aquí. Todos estos métodos diferentes ayudan a crear diferentes recursos que se encuentran bajo el Servicio EC2 de AWS.
Antes de continuar, supongo que tiene un conocimiento básico de EC2 y Python.
Si no está familiarizado con las instancias EC2 y qué aprender para crear una desde la consola de AWS, puede hacer clic aquí.
requisitos previos
- Cuenta AWS (Crear si no tienes uno)
- Comprensión básica de EC2.
- Comprensión básica de Python.
- Python disponible en el sistema.
Lo que haremos
- Instale Boto3 y otras dependencias.
- Conozca el método requerido.
- Cree una instancia EC2 con Python Boto3.
Instalar dependencias de Boto3
Python viene de forma predeterminada en Ubuntu 18.04 Server, por lo que no necesita instalarlo.
Para verificar la versión de Python en su sistema, use el siguiente comando.
que pitón
/usr/bin/python –versión
O
python –versión
Si no tiene pip y está usando Ubuntu Linux, ejecute el siguiente comando para actualizar primero el repositorio local.
sudo apt actualizar
Para instalar pip usa el siguiente comando.
sudo apt install python-pip
Para verificar la versión de Pip instalada, ejecute el siguiente comando.
pip –versión
Una vez que tenga python y pip, puede instalar Boto3.
La instalación de Boto3 es muy sencilla y directa. Para instalar Boto3 usa el siguiente comando.
pip instalar boto3
Para verificar si el Boto3 está instalado y su versión, ejecute el siguiente comando.
pepita mostrar boto3
Conoce el método requerido
Para crear una instancia EC2 simple, usaremos el método «create_instances». A continuación se muestra la sintaxis del método con todos los parámetros que puede aceptar. No usaremos todos estos parámetros para crear una instancia, pero puede intentarlo si lo desea.
Solicitud de sintaxis:
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' } )
No necesitaremos todos estos parámetros, por lo tanto, veamos solo los parámetros que son obligatorios y necesarios para que podamos comenzar con la creación de una instancia EC2 simple.
- ID de imagen: Esta especie es el ID de la AMI que se usará para crear una instancia. Este parámetro es necesario para lanzar una instancia y debe especificarse.
- Recuento mínimo: Esta especie es el número mínimo de instancias para lanzar. Este es un parámetro obligatorio.
- Número máximo: Esta especie es el número máximo de instancias para lanzar. Este es un parámetro obligatorio.
- Tipo de instancia: El tipo de instancia que desea crear. Si no especifica esto, se usa el tipo de instancia predeterminado m1.small.
- Nombre clave: El nombre del par de claves. Debe especificar el nombre del par de claves que ha creado en la cuenta de AWS y que también ha guardado localmente. Si no especifica esto, no podrá conectarse a la instancia.
Cree una instancia EC2 usando Python Boto3
Para crear una instancia EC2 simple, primero declare todas las variables requeridas y sus valores en «config.properties». Asegúrese de cambiar los valores de «aws_access_key_id_value» y «aws_secret_access_key_value» con su propio access_key_id y access_key_value respectivamente. El resto de los valores los puede especificar según su elección y disponibilidad en la cuenta de AWS.
vim config.propiedades
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'
Ahora, cree «ec2.py» con el siguiente código que leerá los valores de «config.properties» y creará una instancia para usted.
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)
Ahora, ya está todo listo para crear una instancia, ejecute el script que acabamos de crear con el siguiente comando.
pitón ec2.py
El ID de la instancia se imprimirá en su pantalla.
Puedes verificar desde la consola si la instancia ha sido creada o no con el ID de instancia que acabas de ver impreso en la terminal. Aquí puede ver que se ha creado la instancia y que se está inicializando la «Comprobación de estado».
Conclusión
Vimos el método para crear una instancia EC2 utilizando la biblioteca Boto3. También vimos los parámetros que son obligatorios y necesarios para crear una instancia EC2 simple. Puede usar este código para personalizar y crear una instancia de su elección. Intente usar diferentes parámetros que omitimos en este artículo.