AWSでのPython言語での開発についてまとめています。
AWS用のPython SDKやIDE環境用プラグイン
AWSでは、Python言語でAPIからAWSサービスを操作するためのSDK(ライブラリ)が提供されています。
AWS SDK for PythonはBoto3と呼ばれ、クライアントAPI(低レベルAPI)と、より抽象化されたリソースAPI(高レベルAPI)が用意されています。クライアントAPIでは、AWSのREST APIと1対1で対応した作りとなっています。リソースAPIでは、AWSリソースをオブジェクト指向で扱うことができるようになっています。
たとえば以下は、リソースAPIを使って、PythonからSQS Queueのメッセージを取り出し、対応するS3オブジェクトを取り出すサンプルです。
【関連記事】
▶AWS SQSを使ってお手軽にメッセージキューイング(MQ)をしよう!
# SQS Queue messages = queue.receive_messages() # SQS Message for message in messages: message.delete() # S3 Object obj = s3.Object(bucket_name='boto3', key='test.py') response = obj.get() data = response['Body'].read()
関連)リソースAPI Boto3 Docs 1.20.46 documentation
AWS SDK for Python(Boto3)のインストール
AWS SDK for Python(Boto3)のインストールは、pipコマンドを使っておこないます。以下は、githubからboto3をget cloneでダウンロードし、pip installを行う例です。環境を現在使用中のPython環境を壊さないようにvirtualenvコマンドを使用しています。
$ git clone https://github.com/boto/boto3.git Cloning into 'boto3'... remote: Enumerating objects: 23683, done. remote: Counting objects: 100% (4700/4700), done. remote: Compressing objects: 100% (1611/1611), done. remote: Total 23683 (delta 3270), reused 4447 (delta 3089), pack-reused 1898 Receiving objects: 100% (23683/23683), 4.30 MiB | 1.12 MiB/s, done. Resolving deltas: 100% (17358/17358), done. $ cd boto3 $ virtualenv venv ... $ . venv/bin/activate $ python -m pip install -r requirements.txt $ python -m pip install -e . $ python -m pip install boto3
Boto3からAWSのサービスを利用するためには、アクセスキーとシークレットアクセスキーが必要になります。~/.aws/credentialsファイルにキーを記入します。
[default] aws_access_key_id = YOUR_KEY aws_secret_access_key = YOUR_SECRET
【関連記事】
▶AWSのアクセスキーの作成や管理方法 シークレットアクセスキーの確認方法は無い
また、~/.aws/configにデフォルトリージョン(ここでは、us-east-1)を設定します。
[default] region=us-east-1
AWS Toolkit(IDE環境用のAWSプラグイン)
統合開発環境(IDE)を使ってデバッグやコードのデプロイをおこなうためのプラグインも提供されています。対応しているIDE環境は、PyCharm、IntelliJ IDEA、Visual Studio Codeです。
- AWS Toolkit for PyCharm
- AWS Toolkit for IntelliJ IDEA
- AWS Toolkit for Visual Studio Code
PyCharmは、Python専用のIDE環境で、初心者に人気の定番IDEです。Visual Studio Codeはマイクロソフト社が無償で提供しているIDEで、比較的小規模開発に向いています。コード管理にGitを使用します。IntelliJ IDEA(インテリジェイ アイデア)は、Javaの開発環境として人気のIDEで、Pythonも扱えます。
これらのIDE環境を使って、AWSのサーバーレスアプリの開発、デバッグ、デプロイなどのをおこなうことができます。
【関連記事】
▶AWS Lambdaとは、サーバレスでコード実行可能なコンピューティングサービス
PythonでAWS CDKを操作する
AWS CDKとは、プログラムを記述することでAWSの環境を構築するツールです。具体的には、Pythonでクラス定義をすることで、EC2インスタンス(VPCやAMI、ロールなども含む)のリソースを記述できてしまうんですね。
以下は、クラスEC2InstanceStackの定義内にて、VPC、AMI、ロール、インスタンスを記述した例です。
【関連記事】
▶AWSのインスタンス Amazon EC2サービスの料金と使い方
class EC2InstanceStack(Stack): def __init__(self, scope: Construct, id: str, **kwargs) -> None: super().__init__(scope, id, **kwargs) # VPC vpc = ec2.Vpc(self, "VPC", nat_gateways=0, subnet_configuration=[ec2.SubnetConfiguration(name="public",subnet_type=ec2.SubnetType.PUBLIC)] ) # AMI amzn_linux = ec2.MachineImage.latest_amazon_linux( generation=ec2.AmazonLinuxGeneration.AMAZON_LINUX_2, edition=ec2.AmazonLinuxEdition.STANDARD, virtualization=ec2.AmazonLinuxVirt.HVM, storage=ec2.AmazonLinuxStorage.GENERAL_PURPOSE ) # Instance Role and SSM Managed Policy role = iam.Role(self, "InstanceSSM", assumed_by=iam.ServicePrincipal("ec2.amazonaws.com")) role.add_managed_policy(iam.ManagedPolicy.from_aws_managed_policy_name("AmazonSSMManagedInstanceCore")) # Instance instance = ec2.Instance(self, "Instance", instance_type=ec2.InstanceType("t3.nano"), machine_image=amzn_linux, vpc = vpc, role = role ) : :
コードを実行することで、AWSの環境が構築できてしまうんですね。
AWSの環境設定をGUIでおこなう場合は、人間が画面操作をする必要があるため、手間がかかりますし操作ミスが起こる可能性があります。
しかし、CDKを使ってコードで記述してあれば、コードを実行するだけでAWSの環境構築ができてしまいます。
環境構築スクリプトとして使ったり、本番環境用のスクリプトを修正して、テスト環境や開発環境を作る場合にも便利です。
AWSのPythoのまとめ
- AWSには、Python用のSDK(AWS SDK for Python)が用意されている。
- AWSでのPython開発用に、IDE向けのAWS操作用プラグインが用意されている
- AWSのEC2インスタンスやS3などの構築を、Pythonスクリプトで記述することが可能