paiza.cloud でAWS API をpython実行できる環境を作ってみる。
導入
前回https://couraeg.hatenablog.com/entry/2019/11/29/001527?_ga=2.163722495.1919608416.1575292152-1911483622.1505390070
でAWS APIの一端に触れたワタクシ。
これからもっと遊んでみようにも、いちいちHyper-VとかDockerとか面倒あんど面倒。
なにより、出先で触れないのがつらい(思いついたとき、やりたいときにできないとやらない病)
ということで、なるべく安上がりでAWS API叩ける環境がないかとおもってpaize.cloud使ってみた。
paiza.cloudって
詳しくは公式のHPを見ていただきたい
https://paiza.cloud/ja/
が、無料枠でだいぶ太っ腹に色々できる。すくなくとも個人で遊ぶ分には十分にカバーできそう。
という感じ。
利用時間が「24H」だけど、出先でちょちょいのちょいで触って、
gitに上げとけば問題ないと思う。環境が壊れるのが面倒ならライトプランを使う感じだろうか。
個人的にAWSのアクセスキーを更新したりするのをさぼりそうだから、
強制的に環境破壊されてライセンスキー忘れちゃうシステムになるからありかなーと思う。
使いたいときにIAM開いて新規にライセンスキー発行すればいいかな。
新規サーバをたてる
paiza cloudのアカウント登録をすませて、ログインするとこんな感じの画面がでてくる。
作成ボタンを押してサーバをつくっていく。
サーバーの機能を使う気がないので、設定は何でもいい気がする。
pythonを使うつもりなのでDjangoにした。たぶんここなんでもいい
それっぽいのを適当にいれて作成ボタンをおす。
ささっとできあがる。 フォルダ名をみるとubuntuとあるのでubuntuなんでしょうね。
AWSCLIをセットアップする
とりあえず作業ディレクトリを切っちゃいましょう。
左側のターミナルボタンからターミナルを起動して、
mkdir enviroment
で作成。ディレクトリ名適当。なんかかっこいい気がするのでこれをつかっている。
cd enviroment
で華麗にディレクトリを移動して、AWSCLIを入れる。
pip3 install awscli --upgrade --user
docker(探せばありそうだし、作ればいいんだけど)、Hyper-V等の仮想環境と違って、
paiza cloudはpython3とか、pip3はあらかじめインストールされている模様。
もしかしたら「Django」選んだからかもしれないが。
awscliもたのむぜ。paizaさん。
インストールがうまくいかなかったり、詳しいことは公式を参照しよう。
https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-chap-install.html#install-tool-pip
とりあえずこれでAWSCLIはインストールされた
credentialの設定
paiza cloudからいったん離れて、AWSのIAMから
アクセスキーを作成しよう。
今回はpollyを使いたいだけだから、polly参照用のユーザを作ったほうがいかもしれない。
ひとまずキーを設定する
aws configure
入力待ちに従ってキーとか入れていく。
キーのところは各自のキーを。regionはpollyが対応されていればどこでもいい。formatはjson。指定してもしなくてもjsonだから
何も入れなくてもいいはず。
pythonのコード側で使うように、profileの別名も作っていく
打ち込むとvimの画面がでてくるので
コピーしてregion追加して:wqする。
user1のところはなんでもいいけど、あとでコードで使うから覚えておく。
ここまででAWSCLIの設定は完了。
credential周りはここを参照
https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-configure-files.html
gitからソースを拾ってくる
gitは最初からインストールされてるので、適宜remote addしてchekcoutしてくだしぃ。
実際にpolly使ってみる。
https://docs.aws.amazon.com/ja_jp/polly/latest/dg/get-started-what-next.html
を参考に
pythonで使用するにはboto3が必要らしいのでインストール
pip3 install boto3
あとはソースコードをパクっていけばいいのだけど、
session = Session(profile_name="adminuser") polly = session.client("polly")
のadminuserのところはuser1にさしかえ。
session = Session(profile_name="user1") polly = session.client("polly")
後半の
# Play the audio using the platform's default player if sys.platform == "win32": os.startfile(output) else: # The following works on macOS and Linux. (Darwin = mac, xdg-open = linux). opener = "open" if sys.platform == "darwin" else "xdg-open" subprocess.call([opener, output])
の部分は再生しているだけだので不要。
# Open a file for writing the output as a binary stream # with open(output, "wb") as file: file.write(stream.read())
ここの解釈を迷ったのだけれで、ひとまずpython3には「file」がないので実行不可。
コメントアウトされている open(output, "wb")だと動く。
が、そうすると「stream」がない。とかエラーがでて困ったのでこうした
output = "speech.mp3" file = open(output, 'wb') file.write(response["AudioStream"].read())
outputはパーミッションうんぬんがやかましいのでとりあえず直ディレクトリにしてしまった。
本当にストリーミング閉じられてるのか不安だけど。とりあえず実行してみる。
python polly/polly.py
の実行で「speech.mp3」が作成される。とりあえず吐き出せた。
ダウンロードして再生したら「hello world」とか聞こえるのであっているんだと思う。
git
https://github.com/yukiYamada/AWSPython3APISamples
これからもSampleを増やそうという意気込みを込めて。
テストもつくってない。クラス名もおかしい。とりあえずpollyうごかした。それだけ。