はじめに
AWS(Amazon Web Services)を利用していると、リソースの管理や操作を自動化したいと感じる場面が多々あります。
そのようなニーズに応えるのが Boto3 というPythonライブラリです。
Boto3を使用すれば、AWSの各種サービスをPythonコードで簡単に操作でき、作業効率を大幅に向上させることが可能です。
本記事では、Boto3の概要から使い方、さらに実際のハンズオンを通じて、AWSリソースの操作方法を紹介していきます。
Boto3とは
Boto3 は、AWSが公式に提供するPython SDK(Software Development Kit)です。
このライブラリを使うことで、AWSのAPIを簡単に呼び出し、AWSのサービスをプログラムで操作できます。
詳しい情報は公式サイトをご覧ください。
主な特徴
Boto3は、AWSのさまざまなサービス(例:Amazon S3、Amazon EC2、Amazon DynamoDBなど)をPythonアプリケーションやスクリプトから容易に統合するためのツールです。
以下に主なサービスの特徴をご紹介します。
引用画像:https://cloud5.jp/learning5-s31/
1. AWSサービスへの簡単なアクセス
EC2(仮想サーバー)、S3(ストレージ)、DynamoDB(NoSQLデータベース)など、AWSのほぼすべてのサービスをサポートしています。これにより、さまざまなリソースを一元管理できます。
2. 高レベルリソースインターフェース
AWSリソースを抽象化し、直感的なコードで操作できるAPIを提供します。
s3.Bucket('bucket_name').upload_file('file.txt', 'destination.txt')
3. 低レベルクライアント
詳細な操作が必要な場合、AWS APIを直接呼び出すことも可能です。
# S3バケットを作成
client.create_bucket(Bucket='bucket_name')
4. 認証情報の自動読み込み
Boto3は、AWS CLIで設定した認証情報(~/.aws/credentials
)を自動的に読み込みます。これにより、事前の設定があれば手動で認証情報を指定する必要がありません。
5. 非同期操作や並列処理
大規模な処理や一括操作に対応する便利なユーティリティも備えています。これにより、効率的なリソース管理が可能です。
Boto3でできること
Boto3を使用することで、さまざまなAWSリソースを操作できます。以下に代表的な操作を紹介します。
リソースの管理
- EC2: インスタンスの起動、停止、削除
- S3: バケット作成、オブジェクトのアップロード・ダウンロード
- IAM: ユーザー作成、権限設定
データ操作
- DynamoDB: データの追加・取得
- SQS: メッセージキューへの送信
- SNS: 通知サービスの利用
バックアップ・監視
- AWS Backup: バックアップのスケジュール管理
- CloudWatch: メトリクスの取得、アラームの設定
スケーリングや自動化
- Lambda: 関数のデプロイや実行
- オートスケーリング: インスタンスの自動調整
実際にやってみた
ここでは、CloudShellを使用して、以下の2つのタスクを実行してみます。
- S3バケットの作成とファイルアップロード
- EC2インスタンスの起動
1. S3バケットの作成とファイルアップロード
まず、AWSコンソールからCloudShellを起動し、必要なパッケージをインストールします。
pip install boto3
次に、Pythonコードを作成していきます。以下のコードを s3_script.py
という名前で任意のディレクトリに保存してください。
import boto3
from botocore.exceptions import NoCredentialsError, PartialCredentialsError, ClientError
# AWSリージョンを設定
REGION = 'ap-northeast-1' # 必要なリージョンを指定
# クライアントの作成
s3 = boto3.client('s3', region_name=REGION)
# バケット名(ユニークである必要があります)
bucket_name = 'honda-bucket-name-1111199999'
try:
# バケットを作成
s3.create_bucket(
Bucket=bucket_name,
CreateBucketConfiguration={
'LocationConstraint': REGION # リージョンを指定
}
)
print(f'Bucket "{bucket_name}" created successfully.')
except ClientError as e:
print(f'Failed to create bucket: {e}')
exit(1)
try:
# ファイルを作成してアップロード
file_name = 'sample.txt'
with open(file_name, 'w') as f:
f.write('Hello, S3!')
# ファイルをS3にアップロード
s3.upload_file(file_name, bucket_name, 'uploaded_file.txt')
print('File uploaded successfully.')
except (NoCredentialsError, PartialCredentialsError):
print('AWS credentials not found or incomplete. Please check your configuration.')
exit(1)
except ClientError as e:
print(f'Failed to upload file: {e}')
exit(1)
保存が完了したら、以下のコマンドでスクリプトを実行してください。
python s3_script.py
ターミナルに以下のような表示が出力されれば、成功です。
[cloudshell-user@ip-10-132-91-119 ~]$ python s3_script.py
Bucket "honda-bucket-name-1111199999" created successfully.
File uploaded successfully.
その後、AWS S3コンソールでバケットが作成され、ファイルが正常にアップロードされていることを確認できます。
テキストファイルが正常に作成されていることも確認できたので、Boto3の検証は大成功です。
2. EC2インスタンスの起動
次に、任意のディレクトリにec2_script.py
ファイルを作成し、Boto3を使ってEC2インスタンスを起動します。
import boto3
# EC2リソースの取得
ec2_resource = boto3.resource('ec2')
# 必要な値を事前に設定
subnet_id = 'subnet-0a311eadf3e8953e2' # 作成したサブネットID
security_group_ids = ['sg-004468d8833520ae3'] # セキュリティグループID
key_name = 'honda' # 事前に作成したキーペア名
# インスタンスを起動
instances = ec2_resource.create_instances(
ImageId='ami-0b6fe957a0eb4c1b9', # 適切なAMI ID
MinCount=1,
MaxCount=1,
InstanceType='t2.micro',
SubnetId=subnet_id, # 作成したサブネットを指定
SecurityGroupIds=security_group_ids, # セキュリティグループを指定
KeyName=key_name # 作成済みのキーペア名
)
for instance in instances:
print(f'Instance {instance.id} created and starting.')
コードを保存したら、以下のコマンドでスクリプトを実行してください。
python ec2_script.py
ターミナルに以下のような表示が出力されれば、インスタンスが正常に起動しています。
[cloudshell-user@ip-10-132-91-119 ~]$ python ec2_script.py
Instance i-001a2b62318f64bac created and starting.
実際に、AWS EC2コンソールで新しいインスタンスが起動していることを確認し、正常に起動していることを確認できます。
まとめ
Boto3を使うことで、AWSリソースの操作をPythonコードで簡単に実現できます。
今回のハンズオンでは、S3バケット作成、ファイルアップロード、EC2インスタンス起動を試しましたが、Boto3はバックアップや監視、自動化など様々なAWSサービスと組み合わせて運用効率を大幅に向上させます。
この技術検証が誰かの役に立てば嬉しいです!
おまけ:Boto3の読み方と由来
Boto3の正式な読み方は「ボトスリー」または「ボトサード」です。
引用画像:https://medium.com/@Data-Engineer/mastering-amazon-s3-with-python-boto3-a-comprehensive-guide-b084a1138a0e
「Boto」という名前は、アマゾン川に生息するピンク色のイルカ「Boto」に由来しています。このイルカはアマゾン地域の象徴であり、AWSの名前とも関連があります。
参考記事