この記事では、PythonBoto3を使用してEC2インスタンスを作成する方法を説明します。 「create_instances」メソッドを使用してインスタンスを作成します。 EC2インスタンスサービスにはさらに多くのメソッドがあります。それらについては、Boto3の公式ページをご覧ください。これらのさまざまな方法はすべて、AWSのEC2サービスに含まれるさまざまなリソースを作成するのに役立ちます。
先に進む前に、EC2とPythonの基本的な知識があることを前提としています。
EC2インスタンスと、AWSコンソールからインスタンスを作成する方法に慣れていない場合は、ここをクリックしてください。
前提条件
- AWSアカウント(お持ちでない場合は作成)
- EC2の基本的な理解。
- Pythonの基本的な理解。
- システムで利用可能なPython。
何をするか
- Boto3およびその他の依存関係をインストールします。
- 必要な方法を知ってください。
- PythonBoto3を使用してEC2インスタンスを作成します。
Boto3の依存関係をインストールする
PythonはデフォルトでUbuntu18.04サーバーに付属しているため、インストールする必要はありません。
システムのPythonバージョンを確認するには、次のコマンドを使用します。
どのpython
/ usr / bin / python --version
または
python --version
pipがなく、Ubuntu Linuxを使用している場合は、次のコマンドを実行して、最初にローカルリポジトリを更新します。
sudo apt update
pipをインストールするには、次のコマンドを使用します。
sudo apt install python-pip
インストールされているPipのバージョンを確認するには、次のコマンドを実行します。
pip --version
pythonとpipを入手したら、Boto3をインストールできます。
Boto3のインストールは非常に簡単で簡単です。 Boto3をインストールするには、次のコマンドを使用します。
pip install boto3
Boto3がインストールされているかどうかとそのバージョンを確認するには、次のコマンドを実行します。
pip show boto3
必要な方法を知っている
単純な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のIDです。このパラメータはインスタンスを起動するために必要であり、指定する必要があります。
- MinCount: この種は、起動するインスタンスの最小数です。これは必須のパラメータです。
- MaxCount: この種は、起動するインスタンスの最大数です。これは必須のパラメータです。
- InstanceType: 作成するインスタンスタイプ。これを指定しない場合、デフォルトのインスタンスタイプm1.smallが使用されます。
- キー名: キーペアの名前。 AWSアカウントで作成し、ローカルにも保存したキーペアの名前を指定する必要があります。これを指定しないと、インスタンスに接続できなくなります。
PythonBoto3を使用してEC2インスタンスを作成する
単純な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'
次に、「config.properties」から値を読み取り、インスタンスを作成する次のコードを使用して「ec2.py」を作成します。
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 ec2.py
インスタンスIDが画面に表示されます。
インスタンスが作成されたかどうかをコンソールから確認できます。インスタンスIDは、端末に印刷されたばかりです。ここで、インスタンスが作成され、「ステータスチェック」が初期化されていることがわかります。
結論
Boto3ライブラリを使用してEC2インスタンスを作成するメソッドを見ました。また、単純なEC2インスタンスを作成するために必須および必須のパラメーターも確認しました。このコードを使用して、選択したインスタンスをカスタマイズおよび作成できます。この記事でスキップしたさまざまなパラメータを使用してみてください。