tl;dr
MacでPythonをAWSを制御するためのプログラムの入門編です。
この記事ではEC2インスタンスをAWS EC2インスタンスを起動→停止します。
用意するもの・環境
- macOS Mojave 10.14.6
- Python 3.7(ANACONDA3)
- PyCharm 2019.2
- boto3
開発環境の構築は下記の記事を参考にしてください。
【これさえ読めばOK】MacでPythonを使って開発するための準備
https://qiita.com/ryoichiro001/items/35a232a430c41dd512fa
AWS
AWSとはAmazon Web Servicesの略です。
AWSは公式サイトが充実しているので、下記を一読することをおすすめします。
アマゾン ウェブ サービス(AWS)とは?
https://aws.amazon.com/jp/about-aws/
Boto3
AWSをPythonで制御するためのパッケージです。
AWSが公式に提供しています。
この記事ではEC2しか制御しませんが、他のAWSのサービスも制御することができます。
準備するもの
Boto3インストール
pipコマンドでインストールできます。
% pip install boto3
AWSのAPIキー
AWSを外部プログラムから制御するのにAPIキーを用意する必要があります。
APIキーの取得
https://aws.amazon.com/jp/developers/access-keys/
APIキーとは下記のものです。
- アクセスキー ID (access_key_id)
- シークレットアクセスキー (secret_access_key)
これは公開しないようにしてください。
APIキーがあるとだれでも操作ができてしまいます。
PythonでEC2インスタンスを起動→終了する
Boto3 で利用可能なサービスは下記の通りです。
https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/index.html
今回はEC2インスタンスを制御するので「ec2」を指定します。
EC2インスタンスを起動する
ec2 = boto3.resource('ec2')
# インスタンス作成
AMI_ID = 'ami-0c3fd0f5d33134a76' # AMI-IDを指定
SUBNET_ID = 'subnet-xxx' # サブネットIDを指定(事前に作成しておく)
instances = ec2.create_instances(ImageId=AMI_ID,
MaxCount=1, MinCount=1,
InstanceType='t2.micro',
SubnetId=SUBNET_ID)
ec2.create_instancesで起動ができます。
ec2.create_instancesには記載のパラメータ以外に下記が必要です。
- アクセスキー ID (access_key_id)
- シークレットアクセスキー (secret_access_key)
- 起動対象のリージョン
ですが、APIキーをプログラム中に記載するのは危険ですので、環境変数で管理した方が良いです。
サブネットは指定しない場合、デフォルトのものが使用されるらしいのですが、わたしの環境でうまくいきませんでした。
IDを指定すると問題なく起動しました。
環境変数
下記の環境変数に設定しておくと自動的にboto3が読み取ってくれます。
- アクセスキー ID (access_key_id) → AWS_ACCESS_KEY_ID
- シークレットアクセスキー (secret_access_key) → AWS_SECRET_ACCESS_KEY
- 起動対象のリージョン → AWS_DEFAULT_REGION
PyCharmを使うと実行するときに環境変数を指定できるので便利です。
AMI-ID
AMIとはAmazon Machine Imageの略で、EC2インスタンスはAMIを元にして作成します。
AMIには固有のIDがついていて、AWSコンソールから取得できます。
インスタンスを終了する
# インスタンスを終了する
tm = instance.terminate()
instance.terminateで終了できます。
実際のプログラム
EC2を起動して終了するプログラムをGitHubに公開しています。
https://github.com/ryotak/boto3_sample
おすすめPython勉強法
Udemyの動画がおすすめです。
現役シリコンバレーエンジニアが教えるPython 3 入門 + 応用 +アメリカのシリコンバレー流コードスタイル
参考サイト
Python boto3 でAWSを自在に操ろう ~入門編~
https://qiita.com/kimihiro_n/items/f3ce86472152b2676004
Pycharmからのスクリプト実行で環境変数PATHを指定する
http://y0m0r.hateblo.jp/entry/20131207/1386416022