(1時間4,000円の伴走型ビデオチャット指導も受付中!)
AWSをPythonで自由に操作する「Boto3」の基本と実践
![]()
【Yuki】
Hirokiくん、こんにちは。今日はPythonを使ってAWS(Amazon Web Services)を操作するためのライブラリ、「Boto3」についてお話ししようと思います。クラウドの操作をプログラムから行うのは、最初は少し難しく感じるかもしれませんが……一つずつ紐解いていけば、きっとHirokiくんにも使いこなせるようになると思います。
![]()
【Hiroki】
Yukiさん、よろしくお願いします!AWSは触ったことがありますが、いつもブラウザの管理画面(マネジメントコンソール)からポチポチ操作していました。Pythonから操作できるようになると、どんな良いことがあるんですか?
![]()
【Yuki】
そうですね……。例えば、毎日決まった時間にバックアップを取ったり、何百台ものサーバーの状態を一気に確認したりするのは、手動ではとても大変ですよね。Boto3を使えば、そういった定型作業を自動化したり、自分だけの便利なツールを作ったりすることができるんです。少しずつ、その魅力をお伝えできれば嬉しいです。
Boto3とは何か
![]()
【Yuki】
まず、Boto3(ボトスリー)が何者なのかというお話から始めますね。これはAWSが公式に提供しているPython用のSDK(Software Development Kit)です。
AWSには「API」という、プログラムから命令を受け付ける窓口があるのですが、Boto3はその窓口とPythonを繋いでくれる「通訳さん」のような役割を果たしてくれます。
![]()
【Hiroki】
なるほど、通訳さんですか。Pythonのコードを書けば、Boto3がそれをAWSが理解できる形式に変換して伝えてくれる、というイメージで合っていますか?
![]()
【Yuki】
はい、その通りです。ちなみに「Boto」という名前は、アマゾン川に住むアマゾンカワイルカに由来しているそうですよ。バージョン3なのでBoto3と呼ばれています。今の主流はこのBoto3なので、これを覚えておけば間違いはないと思います……たぶん。
環境準備とインストール
![]()
【Yuki】
それでは、実際にBoto3を使うための準備をしましょう。まずはインストールですが、これはいつもの pip コマンドで行えます。
pip install boto3
![]()
【Hiroki】
インストールは簡単ですね!これだけで準備完了ですか?
![]()
【Yuki】
いえ、実は一番大切な設定が残っています。AWSを操作するためには、「誰が操作しているのか」を証明するための認証情報(アクセスキーとシークレットアクセスキー)をPCに設定する必要があるんです。
通常は、AWS CLIをインストールして aws configure コマンドで設定するのが一般的ですね。
![]()
【Hiroki】
あ、それなら以前設定したことがあります! ~/.aws/credentials というファイルに保存されるやつですよね。
![]()
【Yuki】
流石ですね、Hirokiくん。Boto3は実行されるときに、その設定ファイルを自動的に探しに行ってくれるので、一度設定してしまえばコードの中に直接パスワードなどを書かなくて済むんです。セキュリティの観点からも、認証情報はコードに直接書かないのが鉄則ですよ。
クライアント(Client)とリソース(Resource)の違い
![]()
【Yuki】
Boto3を使い始めるとき、初心者の人が一番迷いやすいのが、「クライアント(Client)」と「リソース(Resource)」という2つのインターフェースがあることです。
![]()
【Hiroki】
2つもあるんですか……?どう使い分ければいいんでしょう。
![]()
【Yuki】
簡単に言うと、このような違いがあります。
- クライアント(Client): AWSのAPIと1対1で対応する低レベルなインターフェースです。すべての機能を網羅していますが、返ってくるデータが複雑な辞書形式(JSON)なので、少し扱いにくいかもしれません。
- リソース(Resource): PythonのオブジェクトとしてAWSの資源を扱える高レベルなインターフェースです。直感的に書けますが、すべてのサービスに対応しているわけではありません。
![]()
【Hiroki】
うーん、最初はどちらを使えばいいんでしょうか。
![]()
【Yuki】
最初は、よりPythonらしく書ける「リソース」から触ってみるのが良いと思います。もしリソースでできないことがあれば、その時に「クライアント」を使う、というスタンスで十分ですよ。
S3のバケット一覧を表示してみる
![]()
【Yuki】
では、実際にコードを書いてみましょう。まずはクラウド上のストレージサービスであるS3(Simple Storage Service)のバケット一覧を取得するプログラムです。リソースを使った書き方を見てみてください。
import boto3
# S3のリソースを作成します
s3 = boto3.resource('s3')
# すべてのバケットをループで回して名前を表示します
for bucket in s3.buckets.all():
print(f"バケット名: {bucket.name}")
![]()
【Hiroki】
わあ、すごく短いですね! s3.buckets.all() だけで一覧が取れるなんて、直感的でわかりやすいです。
![]()
【Yuki】
そうですよね。これと同じことをクライアント(Client)で書くと、もう少し複雑な構造のデータを解析する必要が出てきます。Boto3の良さは、こうしたシンプルな記述でクラウドを制御できるところにあるんです。
ファイルのアップロードとダウンロード
![]()
【Hiroki】
S3にファイルをアップロードするのも、簡単にできるんでしょうか?
![]()
【Yuki】
はい、もちろんです。例えば test.txt というファイルをアップロードする場合は、このように書きます。
import boto3
s3 = boto3.resource('s3')
bucket_name = 'hiroki-bucket-example' # 自分のバケット名に変えてくださいね
# ファイルをアップロード
s3.Bucket(bucket_name).upload_file('test.txt', 'uploaded_test.txt')
print("アップロードが完了しました...")
![]()
【Hiroki】
upload_file というメソッドを呼ぶだけなんですね。これなら僕でも自動バックアップツールが作れそうな気がしてきました。
![]()
【Yuki】
ふふ、そう言ってもらえると嬉しいです。ダウンロードしたいときは download_file というメソッドを使えば大丈夫ですよ。引数の順番などに気をつければ、難しいことはないはずです。
EC2インスタンスの情報を取得する
![]()
【Yuki】
次は、仮想サーバーのサービスであるEC2(Elastic Compute Cloud)を操作してみましょう。現在動いているインスタンスのIDと状態を表示するコードです。
import boto3
ec2 = boto3.resource('ec2')
# インスタンスの一覧を取得して表示します
for instance in ec2.instances.all():
print(f"ID: {instance.id}, 状態: {instance.state['Name']}")
![]()
【Hiroki】
これもS3のときと似た書き方ですね。
![]()
【Yuki】
そうなんです。サービスが変わっても、基本的な使い方のルールが共通しているのがBoto3の使いやすいところですね。ちなみに、特定の条件に合うインスタンスだけを探したいときは、filter という機能を使うこともできます。
ページネーター(Paginator)の活用
![]()
【Hiroki】
Yukiさん、ちょっと質問です。もしS3にバケットが1,000個以上あったり、EC2インスタンスが大量にあったりする場合、一度に全部取得できるんでしょうか?
![]()
【Yuki】
それはとても鋭い質問ですね。AWSのAPIは、一度に返せるデータの数に上限があることが多いんです。例えば1,000件まで、といった具合に。そんな時に役立つのが「ページネーター(Paginator)」という機能です。
![]()
【Hiroki】
ページネーター……本のページをめくるようなイメージですか?
![]()
【Yuki】
はい、まさにその通りです。クライアント(Client)を使って、このように書きます。
import boto3
client = boto3.client('s3')
# ページネーターを作成します
paginator = client.get_paginator('list_objects_v2')
# バケット内のオブジェクトをページごとに取得します
page_iterator = paginator.paginate(Bucket='hiroki-bucket-example')
for page in page_iterator:
if 'Contents' in page:
for obj in page['Contents']:
print(obj['Key'])
![]()
【Yuki】
こうすることで、どれだけ大量のデータがあっても、Boto3が裏側で「次のページをください」というリクエストを自動で繰り返してくれるんです。大量のデータを扱う実務では、このページネーターは欠かせない機能になると思います。
ウェイター(Waiters)で状態の変化を待つ
![]()
【Yuki】
もう一つ、知っておくと便利な機能に「ウェイター(Waiters)」があります。例えば、EC2インスタンスを新しく作成した直後、まだ「起動中」の段階では、ログインしたり設定を変更したりすることはできませんよね。
![]()
【Hiroki】
そうですね。いつも管理画面で「実行中」に変わるまでリロードして待っていました。
![]()
【Yuki】
それをプログラムで自動的に行ってくれるのがウェイターです。「特定の状態になるまでプログラムを一時停止して待つ」という処理を、1行で書けるんです。
import boto3
ec2_client = boto3.client('ec2')
# インスタンスを起動
# ec2_client.start_instances(InstanceIds=['i-xxxxxx'])
# インスタンスが「running」状態になるまで待ちます
waiter = ec2_client.get_waiter('instance_running')
waiter.wait(InstanceIds=['i-xxxxxx'])
print("インスタンスが起動しました。次の処理に移ります...")
![]()
【Hiroki】
これは便利ですね! time.sleep(10) とかで適当に待つよりも、ずっと正確で安全そうです。
![]()
【Yuki】
そうですね…… sleep だと時間が足りなかったり、逆に待ちすぎたりしてしまいますから。AWSの状態を正確に把握して次に進む、スマートなプログラムを書くためには必須のテクニックです。
エラーハンドリングの重要性
![]()
【Yuki】
最後に、少しだけ大切な話をしますね。クラウドを操作するプログラムを書くときは、必ずエラーが起きることを想定しておかなければいけません。ネットワークが一時的に切れたり、権限が足りなかったりすることはよくあるからです。
![]()
【Hiroki】
例外処理ですね。 try-except を使うんでしょうか?
![]()
【Yuki】
はい。Boto3専用の例外クラスが用意されているので、それを使うとより詳しく原因を調べることができます。
import boto3
from botocore.exceptions import ClientError
s3 = boto3.client('s3')
try:
s3.list_objects_v2(Bucket='non-existent-bucket')
except ClientError as e:
# エラーコードを確認して処理を分岐できます
error_code = e.response['Error']['Code']
if error_code == 'NoSuchBucket':
print("指定されたバケットが存在しません...")
else:
print(f"予期せぬエラーが発生しました: {e}")
![]()
【Yuki】
このように、どんなエラーが起きたのかをちゃんと捕まえてあげることで、止まりにくい頑丈なシステムになるんです。Hirokiくんも、本格的なツールを作るときは意識してみてくださいね。
まとめ
![]()
【Hiroki】
Yukiさん、今日はありがとうございました!Boto3って、もっとお堅いイメージがあったんですけど、実際にコードを見てみるとPythonらしくて書きやすそうですね。
![]()
【Yuki】
そう言ってもらえて、私も安心しました。最初は「リソース」を使って簡単な操作から始めて、徐々に「クライアント」や「ページネーター」を組み合わせていくのが上達の近道だと思います。
AWSは機能が膨大なので、すべてを覚える必要はありません。公式ドキュメントを片手に、その都度必要な部分を調べていくのがコツですよ。
![]()
【Hiroki】
公式ドキュメント、読んでみます!
![]()
【Yuki】
はい、ぜひ。Boto3のドキュメントは非常に充実しているので、眺めているだけでも「こんなこともできるんだ」という発見があって楽しい……かもしれません。
Boto3 Documentation
もし詰まってしまったら、いつでも聞いてくださいね。静かな夜なら、私もゆっくりと一緒に考えられると思いますから。
![]()
【Hiroki】
心強いです。さっそく、自分のS3バケットを整理するスクリプトを書いてみます!
![]()
【Yuki】
頑張ってくださいね、Hirokiくん。応援しています。
情報の根拠・参考サイト: - Boto3公式ドキュメント - AWS SDK for Python (Boto3) - AWS公式
この記事では基礎を解説しましたが、実務においては「もっと複雑なデータを扱いたい」「独自のシステムに組み込みたい」といった、個別の課題に直面することも多いはずです。
「自分で書く時間は最小限に抑え、プロの品質でツールを完成させたい」という方は、ぜひ一度ご相談ください。
- 専門家の知見に基づいた、保守性の高いコード設計
- AIの専門家による、Gemini API等の最新AIを組み合わせた高度な自動化
- ChatGPT等が生成したコードのデバッグ・最適化
「教わる」だけでなく「形にする」パートナーとして、フリーランスエンジニアのmei_13が最短ルートでの解決をサポートします。
初心者から始められるPythonレッスン
● 月額4,000円で質問し放題!!
● 完全オンライン
● 翌日までには必ず返信
● 挫折しない独自の学習メソッド
● 圧倒的高評価!!
● テキストベースで時間を選ばない
● 4,000円/60分の伴走型ビデオチャット指導も可能
● 高品質なサンプルコード
詳細はこちら

