調べ物した結果

現役SEが仕事と直接関係ないことを調べた結果とか感想とか

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/
が、無料枠でだいぶ太っ腹に色々できる。すくなくとも個人で遊ぶ分には十分にカバーできそう。
という感じ。
f:id:couraeg:20191202223645p:plain

利用時間が「24H」だけど、出先でちょちょいのちょいで触って、
gitに上げとけば問題ないと思う。環境が壊れるのが面倒ならライトプランを使う感じだろうか。
個人的にAWSのアクセスキーを更新したりするのをさぼりそうだから、
強制的に環境破壊されてライセンスキー忘れちゃうシステムになるからありかなーと思う。
使いたいときにIAM開いて新規にライセンスキー発行すればいいかな。

新規サーバをたてる


paiza cloudのアカウント登録をすませて、ログインするとこんな感じの画面がでてくる。
f:id:couraeg:20191202224339p:plain
作成ボタンを押してサーバをつくっていく。
サーバーの機能を使う気がないので、設定は何でもいい気がする。
f:id:couraeg:20191202224201p:plain
pythonを使うつもりなのでDjangoにした。たぶんここなんでもいい
それっぽいのを適当にいれて作成ボタンをおす。
f:id:couraeg:20191202224814p:plain
ささっとできあがる。 フォルダ名をみるとubuntuとあるのでubuntuなんでしょうね。

AWSCLIをセットアップする


とりあえず作業ディレクトリを切っちゃいましょう。
左側のターミナルボタンからターミナルを起動して、

mkdir enviroment

f:id:couraeg:20191202225628p:plain
で作成。ディレクトリ名適当。なんかかっこいい気がするのでこれをつかっている。

cd enviroment

で華麗にディレクトリを移動して、AWSCLIを入れる。

pip3 install awscli --upgrade --user

f:id:couraeg:20191202230217p:plain

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 ~/.aws/credentials

f:id:couraeg:20191202230929p:plain
打ち込むとvimの画面がでてくるので
f:id:couraeg:20191202231031p:plain
コピーしてregion追加して:wqする。
f:id:couraeg:20191202231243p:plain
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うごかした。それだけ。

感想とか


とりあえずうごくなぁ。すげぇ。という感じ。
これでtranscribeでストリーミング変換するのに一歩近づいた感じだ。(transcribeのストリーミングはCLIで直たたきできなかった)
あとはあんまりにも簡単に動くので、キーの管理とかループとか怖いなぁと思う。
みすってループさせたら大量にAPI叩くことになるだろうし。やだなぁ。テストちゃんと書かないとあぶねぇなぁ。
pythonでかけるってことはlambdaでもかけるってことだろうか。きっとかけるだろうな。やって見たいけど一回ここまで。