splatnet2statink の Lambda化 (stat.ink)

splatoon2の記録保持に stat.ink を使ってるわけだが、EC2 で splatnet2statink を走らせていたところ、aws無料枠期間過ぎてしまいEC2たたみたいので、せっかくなのでlambda化しようそうしよう。

こちらを参考に。

AWS Lambdaを使ってスプラトゥーン2の戦績をstat.inkに定期保存できるようにした


https://github.com/issei-m/splatnet2statink-on-lambda

ネットワーク屋なのでサーバレス系はずっぶずぶの素人であり、このたびハマったところなどをメモ:

  • script 本体だけあってもダメで依存関係にあるパッケージも一緒Lambdaに上げる必要あり
  • 上記githubにあるのはseverlessというframework使ってまるっとあげてくれるっぽい
    • これ使うとローカルで開発したものをするっとLambdaとかに上げれるようになるぽい
    • 上記リポジトリはserverless使える環境がある前提ぽい
    • パッケージ等を手動で固めて上げれば動くのかもしれないが、楽そうなのでserverless環境作った
  • お手元にCent7があったのでそこからdeploy
  • 全体的にPython3.xなので、2.xと分ける必要があるならうまいことそうする ※作業中この辺いまいち理解してなかった
  • serverlessのcredentialどこで設置するんだろと思ったが、awscli に credential を設定しとけばよさげ
  • サーモンラン結果も保存するため、[“./splatnet2statink.py”, “–salmon”, “-r”] とした処理を”handler.py”に追加した
    •  python3 ./handler.py で期待通り動いているようにみえたので問題なさそう

具体的にやったことは以下。無駄なpython の install作業が含まれてる気はするがうごいたからまあ、うん。
すでにEC2で動かしてたのでiksm_sessionを引き継いだ感じ。

# 事前にAWSにIAMからアカウント作っておく。難しいことはやっていないがこれを見た→https://serverless.com/framework/docs/providers/aws/guide/credentials/
# 権限はAdminではなくこれ(https://gist.github.com/ServerlessBot/7618156b8671840a539f405dea2704c8)でも動いた
# APIKeyとSecretKeyをメモしておく

# NPM, Docker
yum install nodejs npm docker

# Serverless
npm install -g serverless

# pyenv, git
yum install gcc zlib-devel bzip2 bzip2-devel readline readline-devel sqlite sqlite-devel openssl openssl-devel git
git clone https://github.com/yyuu/pyenv.git ~/.pyenv

#環境変数
echo ‘export PYENV_ROOT=”$HOME/.pyenv”‘ >> ~/.bash_profile
echo ‘export PATH=”$PYENV_ROOT/bin:$PATH”‘ >> ~/.bash_profile
echo ‘eval “$(pyenv init -)”‘ >> ~/.bash_profile

source .bash_profile

# Python3.6
pyenv install 3.6.8
pyenv global 3.6.8

easy_install pip
pip install virtualenv
pip install awscli

# awsへのアクセスキー
aws configure

AWS Access Key ID [None]: xxxx
AWS Secret Access Key [None]: xxxxxxxx
Default region name [None]: ap-northeast-1
Default output format [None]: text

 

# 確認
cat .aws/credentials

# githubからクローン
mkdir testgit
cd testgit
git clone https://github.com/issei-m/splatnet2statink-on-lambda.git

# readmeに従う
virtualenv venv –python=python3
source venv/bin/activate
pip3 install -r requirements.txt

vi config.txt // 自分のiksm_sessionもってたのでそれをいれた

{
“api_key”: “xxx”,
“cookie”: “xxx”,
“session_token”: “skip”,
“user_lang”: “en-US”
}

 

# サーモンラン結果も保存するため、[“./splatnet2statink.py”, “–salmon”, “-r”] とした処理を”handler.py”に追加

import re
import subprocess

def main(event, context):
result = subprocess.run([“./splatnet2statink.py”, “-r”], encoding=”utf-8″, stdout=subprocess.PIPE)
formatted_result = re.sub(r”^splatnet2statink .+\nChecking if there are previously-unuploaded battles…\n”, “”,
result.stdout).strip()
print(formatted_result)

result2 = subprocess.run([“./splatnet2statink.py”, “–salmon”, “-r”], encoding=”utf-8″, stdout=subprocess.PIPE)
formatted_result2 = re.sub(r”^splatnet2statink .+\nPulling Salmon Run data from online…\nSuccessfully updated your Salmon Run profile.\nChecking if there are previously-unuploaded shifts…\n”, “”,
result2.stdout).strip()
print(formatted_result2)

if __name__ == “__main__”:
main(“”, “”)


# てすと
python3 ./handler.py //test

npm i
node_modules/.bin/sls deploy

※途中Python3共存のあたりで混乱してこれもやってたような気がするがたぶん必要ない
yum install -y https://centos7.iuscommunity.org/ius-release.rpm
yum install python36u python36u-libs python36u-devel python36u-pip

※もしスプラ垢を複数持っててアカウント分作成したい場合、serverless.yml の serviceのなまえを変えればよさげ。

Comments (0)

› No comments yet.

コメントを残す

Allowed Tags - You may use these HTML tags and attributes in your comment.

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Pingbacks (0)

› No pingbacks yet.