AWSは、Pythonのアプリケーション、ライブラリ、スクリプトを各種サービス(Amazon S3、Amazon EC2、Amazon DynamoDBなど)と容易に統合できる「AWS SDK for Python (Boto3)」を提供しています。
Boto3の主な特徴
- リソースAPI: 明示的なネットワーク呼び出しが表示されず、属性にアクセスしアクションを実行するためのリソースオブジェクトとコレクションが提供されます。
- 整合性のある最新のインターフェイス: AWS APIを記述したJSONモデルによって実行される動的に生成されたクラスが用意されています。
- Python 2および3のサポート: Pythonバージョン2.7、3.4+でのネイティブサポートを提供するために基礎から構築されました。
- ウェーター: AWSリソースにおける事前定義ステータスの変化を自動的にポーリングする”waiter”が付属しています。
Boto3の使用例
以下に、Boto3を使用してAWSのインスタンスを操作するPythonのコード例を示します。
import boto.vpc
import boto.ec2
from boto.ec2.blockdevicemapping import BlockDeviceMapping, BlockDeviceType
from boto.ec2.networkinterface import NetworkInterfaceCollection, NetworkInterfaceSpecification
vpc = boto.vpc.connect_to_region("ap-northeast-1")
ec2 = boto.ec2.connect_to_region("ap-northeast-1")
subnet, = vpc.get_all_subnets(filters = {"tag:Name": "nat-a"})
groups = ec2.get_all_security_groups(filters = {"group-name" : ["sore", "dore"]})
device_map = BlockDeviceMapping()
device_map['/dev/sda1'] = BlockDeviceType(delete_on_termination = True, volume_type = "gp2")
interfaces = NetworkInterfaceCollection(NetworkInterfaceSpecification(
subnet_id = subnet.id,
groups = [x.id for x in groups],
associate_public_ip_address = False
))
instance, = ec2.run_instances(
image_id = "ami-12345678",
key_name = "ore-no-key",
instance_type = "t2.micro",
block_device_map = device_map,
instance_profile_name = "areare",
network_interfaces = interfaces
).instances
instance.add_tags({
"Name": "ore-no-instance"
})
このコードは、指定したサブネットとセキュリティグループを使用して新しいEC2インスタンスを起動し、そのインスタンスにタグを追加します。
AWSとPythonを組み合わせることで、クラウドリソースの管理を効率化し、開発プロセスを大幅に改善することが可能です。これらのツールを活用して、あなたのプロジェクトを次のレベルに引き上げましょう。