Cách tạo Amazon AWS EC2 Instance bằng Python Boto3

theanh

Administrator
Nhân viên
Trong bài viết này, chúng ta sẽ xem cách tạo một phiên bản EC2 bằng Python Boto3. Chúng ta sẽ sử dụng phương thức "create_instances" để tạo một phiên bản. Có nhiều phương thức khác nằm trong dịch vụ phiên bản EC2, để biết về chúng, hãy truy cập trang chính thức của Boto3 tại đây. Tất cả các phương pháp khác nhau này giúp tạo ra các tài nguyên khác nhau thuộc Dịch vụ EC2 của AWS.

Trước khi tiến hành, tôi cho rằng bạn đã có hiểu biết cơ bản về EC2 và Python.

Nếu bạn chưa quen với các phiên bản EC2 và những điều cần học để tạo một phiên bản từ AWS Console, bạn có thể nhấp vào đây.

Điều kiện tiên quyết​

  1. Tài khoản AWS (Tạo nếu bạn chưa có)
  2. Hiểu biết cơ bản về EC2.
  3. Hiểu biết cơ bản về Python.
  4. Python có sẵn trên hệ thống.

Những gì chúng ta sẽ làm​

  1. Cài đặt Boto3 và các phụ thuộc khác.
  2. Biết phương pháp cần thiết.
  3. Tạo một EC2 Instance bằng Python Boto3.

Cài đặt các phụ thuộc Boto3​

Python mặc định có trong Ubuntu 18.04 Server, vì vậy bạn không cần phải cài đặt nó.

Để kiểm tra phiên bản Python trên hệ thống của bạn, hãy sử dụng lệnh sau.

which python/usr/bin/python --version

HOẶC

python --version

Nếu bạn không có pip và bạn đang sử dụng Ubuntu Linux, hãy thực hiện lệnh sau để cập nhật kho lưu trữ cục bộ trước.

sudo apt update

Để cài đặt pip, hãy sử dụng lệnh sau.

sudo apt install python-pip

Để kiểm tra phiên bản Pip đã cài đặt, hãy thực hiện lệnh sau.

pip --version

Sau khi bạn có python và pip, bạn có thể cài đặt Boto3.

Cài đặt Boto3 rất đơn giản và dễ dàng. Để cài đặt Boto3, hãy sử dụng lệnh sau.

pip install boto3



Để kiểm tra xem Boto3 đã được cài đặt chưa và phiên bản của nó, hãy thực hiện lệnh sau.

pip show boto3


Biết phương thức cần thiết​

Để tạo một phiên bản EC2 đơn giản, chúng ta sẽ sử dụng phương thức "create_instances". Sau đây là cú pháp của phương thức với tất cả các tham số mà nó có thể chấp nhận. Chúng ta sẽ không sử dụng tất cả các tham số này để tạo một phiên bản nhưng bạn có thể thử nếu muốn.

Cú pháp yêu cầu:
Mã:
instance = ec2.create_instances( BlockDeviceMappings=[ { 'DeviceName': 'chuỗi', 'VirtualName': 'chuỗi', 'Ebs': { 'DeleteOnTermination': Đúng|Sai, 'Iops': 123, 'SnapshotId': 'chuỗi', 'VolumeSize': 123, 'VolumeType': 'standard'|'io1'|'gp2'|'sc1'|'st1', 'KmsKeyId': 'chuỗi', 'Encrypted': Đúng|Sai }, 'NoDevice': 'chuỗi' }, ], ImageId='chuỗi', 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 .lớn'|'t3a.lớn'|'t3a.2lớn'|'m1.nhỏ'|'m1.trung bình'|'m1.lớn'|'m1.lớn'|'m3.trung bình'|'m3.lớn'|'m3.lớn'|'m3.lớn'|'m3.2lớn'|'m4.lớn'|'m4.lớn'|'m4.2lớn'|'m4.4lớn'|'m4.10lớn'|'m4.16lớn'|'m2.lớn'|'m2.2lớn'|'m2.4 cực lớn'|'cr1.8xlớn'|'r3.lớn'|'r3.lớn'|'r3.lớn'|'r3.2xlớn'|'r3.4xlớn'|'r3.8xlớn'|'r4.lớn'|'r4.lớn'|'r4.lớn'|'r4.2xlớn'|'r4.4xlớn'|'r4.8xlớn'|'r4.16xlớn'|'r5.lớn'|'r5.lớn'|'r5.2xlớn'|'r5.4xlớn'|'r5.8xlớn'|'r5.12xlớn'| 'r5.16xlớn'|'r5.24xlớn'|'r5.kim loại'|'r5a.lớn'|'r5a.lớn'|'r5a.lớn'|'r5a.2xlớn'|'r5a.4xlớn'|'r5a.8xlớn'|'r5a.12xlớn'|'r5a.16xlớn'|'r5a.24xlớn'|'r5d.lớn'|'r5d.lớn'|'r5d.2xlớn'|'r5d.4xlớn'|'r5d.8xlớn'|'r5d.12xlớn'|'r5d .16xlớn'|'r5d.24xlớn'|'r5d.kim loại'|'r5ad.lớn'|'r5ad.lớn'|'r5ad.lớn'|'r5ad.2xlớn'|'r5ad.4xlớn'|'r5ad.8xlớn'|'r5ad.12xlớn'|'r5ad.16xlớn'|'r5ad.24xlớn'|'x1.16xlớn'|'x1.32xlớn'|'x1e.lớn'|'x1e.2xlớn'|'x1e.4xlớn'|'x1e.8xla rge'|'x1e.16xlớn'|'x1e.32xlớn'|'i2.xlớn'|'i2.2xlớn'|'i2.4xlớn'|'i2.8xlớn'|'i3.lớn'|'i3.xlớn'|'i3.2xlớn'|'i3.4xlớn'|'i3.8xlớn'|'i3.16xlớn'|'i3.kim loại'|'i3en.lớn'|'i3en.lớn'|'i3en.2xlớn'|'i3en.3xlớn'|'i3en. 6xlớn'|'i3en.12xlớn'|'i3en.24xlớn'|'i3en.kim loại'|'hi1.4xlớn'|'hs1.8xlớn'|'c1.trung bình'|'c1.xlớn'|'c3.lớn'|'c3.xlớn'|'c3.2xlớn'|'c3.4xlớn'|'c3.8xlớn'|'c4.lớn'|'c4.xlớn'|'c4.2xlớn'|'c4.4xlớn'|'c4.8xlớn'|'c5.la rge'|'c5.xlớn'|'c5.2xlớn'|'c5.4xlớn'|'c5.9xlớn'|'c5.12xlớn'|'c5.18xlớn'|'c5.24xlớn'|'c5.kim loại'|'c5d.lớn'|'c5d.xlớn'|'c5d.2xlớn'|'c5d.4xlớn'|'c5d.9xlớn'|'c5d.12xlớn'|'c5d.18xlớn'|'c5d.24xlớn'|'c5d.kim loại'|'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.8 xlarge'|'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.16xlar ge'|'m5.lớn'|'m5.cực lớn'|'m5.2xlớn'|'m5.4xlớn'|'m5.8xlớn'|'m5.12xlớn'|'m5.16xlớn'|'m5.24xlớn'|'m5.kim loại'|'m5a.lớn'|'m5a.xlớn'|'m5a.2xlớn'|'m5a.4xlớn'|'m5a.8xlớn'|'m5a.12xlớn'|'m5a.16xlớn'|'m5a.24xlớn'|'m5d. lớn'|'m5d.xlarge'|'m5d.2xlarge'|'m5d.4xlarge'|'m5d.8xlarge'|'m5d.12xlarge'|'m5d.16xlarge'|'m5d.24xlarge'|'m5d.metal'|'m5ad.lớn'|'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.6xlar ge'|'z1d.12xlarge'|'z1d.metal'|'u-6tb1.metal'|'u-9tb1.metal'|'u-12tb1.metal'|'u-18tb1.metal'|'u-24tb1.metal'|'a1.mediu m'|'a1.lớn'|'a1.xlớn'|'a1.2xlớn'|'a1.4xlớn'|'a1.kim loại'|'m5dn.lớn'|'m5dn.xlớn'|'m5dn.2xlớn'|'m5dn.4xlớn'|'m5dn.8xlớn'|'m5dn.12xlớn'|'m5dn.16xlớn'|'m5dn.24xlớn'|'m5n.lớn'|'m5n.xlớn'|'m5n.2xlớn'|'m5n.4xlớn'| 'm5n.8xlớn'|'m5n.12xlớn'|'m5n.16xlớn'|'m5n.24xlớn'|'r5dn.lớn'|'r5dn.lớn'|'r5dn.lớn'|'r5dn.lớn.2xlớn'|'r5dn.lớn.4xlớn'|'r5dn.lớn.8xlớn'|'r5dn.lớn.12xlớn'|'r5dn.lớn.16xlớn'|'r5dn.lớn.24xlớn'|'r5n.lớn'|'r5n.lớn'|'r5n.lớn.2xlớn'|'r5n.4xlớn'|'r5n .8xlớn'|'r5n.12xlớn'|'r5n.16xlớn'|'r5n.24xlớn'|'inf1.xlớn'|'inf1.2xlớn'|'inf1.6xlớn'|'inf1.24xlớn'|'m6g.kim loại'|'m6g.trung bình'|'m6g.lớn'|'m6g.xlớn'|'m6g.2xlớn'|'m6g.4xlớn'|'m6g.8xlớn'|'m6g.12xlớn'|'m6g.16xlớn', Ipv6AddressCount=123, Ipv6Addresses=[ { 'Ipv6Address': 'chuỗi' }, ], KernelId='chuỗi', KeyName='chuỗi', MaxCount=123, MinCount=123, Monitoring={ 'Enabled': True|False }, Placement={ 'AvailabilityZone': 'chuỗi', 'Affinity': 'chuỗi', 'GroupName': 'chuỗi', 'PartitionNumber': 123, 'HostId': 'chuỗi', 'Tenancy': 'mặc định'|'chuyên dụng'|'host', 'SpreadDomain': 'chuỗi', 'HostResourceGroupArn': 'chuỗi' }, RamdiskId='chuỗi', SecurityGroupIds=[ 'chuỗi', ], SecurityGroups=[ 'chuỗi', ], SubnetId='chuỗi', UserData='chuỗi', 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': 'chuỗi' }, ], 'SecondaryPrivateIpAddressCount': 123, 'SubnetId': 'chuỗi', 'InterfaceType': 'chuỗi' }, ], PrivateIpAddress='chuỗi', ElasticGpuSpecification=[ { 'Type': 'chuỗi' }, ], ElasticInferenceAccelerators=[ { 'Type': 'chuỗi', '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'|'s yêu cầu-hạm đội-pot'|'yêu cầu-trường-điểm'|'mạng-con'|'bộ-lọc-gương-lưu-lượng'|'phiên-lưới-gương-lưu-lượng'|'mục-tiêu-lưu-lượng'|'cổng-chuyển-chuyển'|'gắn-cổng-chuyển-chuyển'|'miền-đa-phát-cổng-chuyển'|'bảng-tuyến-chuyển-chuyển'|'khối-lượng'|'vpc'|'kết-nối-vpc'|'kết-nối-vpn'|'cổng-vpn'|'nhật-ký-bảng-lưu-lượng', 'Thẻ': [ { 'Khóa': 'chuỗi', 'Giá trị': 'chuỗi' }, ] }, ], LaunchTemplate={ 'LaunchTemplateId': 'chuỗi', 'LaunchTemplateName': 'chuỗi', 'Phiên bản': 'chuỗi' }, InstanceMarketOptions={ 'MarketType': 'spot', 'SpotOptions': { 'MaxPrice': 'chuỗi', 'SpotInstanceType': 'một lần'|'liên tục', 'BlockDurationMinutes': 123, 'ValidUntil': datetime(2015, 1, 1), 'InstanceInterruptionBehavior': 'ngủ đông'|'dừng'|'chấm dứt' } }, CreditSpecification={ 'CpuCredits': 'chuỗi' }, CpuOptions={ 'CoreCount': 123, 'ThreadsPerCore': 123 }, CapacityReservationSpecification={ 'CapacityReservationPreference': 'mở'|'không có', 'CapacityReservationTarget': { 'CapacityReservationId': 'chuỗi' } }, HibernationOptions={ 'Đã cấu hình': Đúng|Sai }, LicenseSpecifications=[ { 'LicenseConfigurationArn': 'chuỗi' }, ], MetadataOptions={ 'HttpTokens': 'tùy chọn'|'bắt buộc', 'HttpPutResponseHopLimit': 123, 'HttpEndpoint': 'đã tắt'|'đã bật' })
Chúng ta không cần tất cả các tham số này, do đó chúng ta chỉ xem các tham số bắt buộc và cần thiết để bắt đầu tạo một phiên bản EC2 đơn giản.
  1. ImageId:Loài này là ID của AMI được sử dụng để tạo một phiên bản. Tham số này là bắt buộc để khởi chạy một phiên bản và phải được chỉ định.
  2. MinCount:Loài này làsố lượng phiên bản tối thiểu để khởi chạy. Đây là tham số bắt buộc.
  3. MaxCount:Đây là loàisố lượng phiên bản tối đa để khởi chạy.Đây là tham số bắt buộc.
  4. InstanceType:Loại phiên bản bạn tạo.Nếu bạn không chỉ định tham số này, loại phiên bản mặc địnhm1.small sẽ được sử dụng.
  5. KeyName:Tên của cặp khóa. Bạn cần chỉ định tên của cặp khóa mà bạn đã tạo trên tài khoản AWS và cũng đã lưu cục bộ. Nếu bạn không chỉ định điều này, thì bạn sẽ không thể kết nối với phiên bản.

Tạo phiên bản EC2 bằng Python Boto3​

Để tạo phiên bản EC2 đơn giản, trước tiên hãy khai báo tất cả các biến bắt buộc và giá trị của chúng trong "config.properties". Đảm bảo rằng bạn thay đổi các giá trị của "aws_access_key_id_value" và "aws_secret_access_key_value" bằng access_key_id và access_key_value của riêng bạn. Các giá trị còn lại bạn có thể chỉ định theo lựa chọn và tính khả dụng của mình trong Tài khoản AWS.

vim config.properties
Mã:
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 = 1MaxCount_value = 1InstanceType_value = 't2.micro'KeyName_value = 'my-key'


Bây giờ, tạo "ec2.py" với mã sau đây sẽ đọc các giá trị từ "config.properties" và tạo một phiên bản cho bạn.

vim ec2.py
Mã:
import boto3def 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)

Bây giờ, bạn đã sẵn sàng để tạo một phiên bản, hãy thực thi tập lệnh mà chúng ta vừa tạo bằng lệnh sau.

python ec2.py



ID phiên bản sẽ được in trên màn hình của bạn.

Bạn có thể xác minh từ bảng điều khiển xem phiên bản đã được tạo hay chưa bằng ID phiên bản mà bạn vừa thấy được in trên thiết bị đầu cuối. Tại đây, bạn có thể thấy rằng phiên bản đã được tạo và "Kiểm tra trạng thái" đang khởi tạo.


Kết luận

Chúng ta đã thấy phương pháp tạo phiên bản EC2 bằng Thư viện Boto3. Chúng ta cũng đã thấy các tham số bắt buộc và cần thiết để tạo phiên bản EC2 đơn giản. Bạn có thể sử dụng mã này để tùy chỉnh và tạo phiên bản theo ý muốn. Hãy thử sử dụng các tham số khác mà chúng tôi đã bỏ qua trong bài viết này.
 
Back
Bên trên