0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AWSとPythonの連携:Boto3を活用したS3バケットの作成とEC2インスタンス起動の技術検証

Last updated at Posted at 2024-11-26

はじめに

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アプリケーションやスクリプトから容易に統合するためのツールです。

以下に主なサービスの特徴をご紹介します。

スクリーンショット 2024-11-26 20.35.22.png
引用画像: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という名前で任意のディレクトリに保存してください。

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コンソールでバケットが作成され、ファイルが正常にアップロードされていることを確認できます。

スクリーンショット 2024-11-26 20.02.31.png

テキストファイルが正常に作成されていることも確認できたので、Boto3の検証は大成功です。

スクリーンショット 2024-11-26 20.03.16.png

2. EC2インスタンスの起動

次に、任意のディレクトリにec2_script.pyファイルを作成し、Boto3を使ってEC2インスタンスを起動します。

ec2_script.py
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コンソールで新しいインスタンスが起動していることを確認し、正常に起動していることを確認できます。

スクリーンショット 2024-11-26 20.26.32.png

まとめ

Boto3を使うことで、AWSリソースの操作をPythonコードで簡単に実現できます。

今回のハンズオンでは、S3バケット作成、ファイルアップロード、EC2インスタンス起動を試しましたが、Boto3はバックアップや監視、自動化など様々なAWSサービスと組み合わせて運用効率を大幅に向上させます。

この技術検証が誰かの役に立てば嬉しいです!

おまけ:Boto3の読み方と由来

Boto3の正式な読み方は「ボトスリー」または「ボトサード」です。

スクリーンショット 2024-11-26 20.51.14.png
引用画像:https://medium.com/@Data-Engineer/mastering-amazon-s3-with-python-boto3-a-comprehensive-guide-b084a1138a0e

「Boto」という名前は、アマゾン川に生息するピンク色のイルカ「Boto」に由来しています。このイルカはアマゾン地域の象徴であり、AWSの名前とも関連があります。

参考記事

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?