はじめに
Serverless Framework
使えば割と簡単にスラッシュコマンド作れるのでは?と思いどれくらいで作成できるのか試してみました。
あんまりいいアイディアが出てこなかったので三角関数の値を返すスラッシュコマンドを作ろうと思います。
/tri-func sin 30
0.5
/tri-func cos 60
0.5
/tri-func tan 45
1.0
こんな感じで(sinh
とかconh
がないのは勘弁)
APIを作る
プロジェクトを作成
$ mkdir <project> && cd <project>
$ sls create -t aws-python3 -n tri-func
$ tree
.
├── handler.py
└── serverless.yml
pipenvの導入
標準のmath
ライブラリを使用してもいいのですが最近serverless-python-requirements
のdockerizePip
という依存関係があるライブラリをAmazonLinuxのDockerImageからビルドしてくれるものがあると知ったので、今回はnumpy
を使用して三角関数の値を返します。
今回はpipenv
とserverless-python-requirements
を使用してライブラリを使用します。
pipenvで仮想環境を作りnumpy
をインストールする
$ pipenv install --python 3.6.5
$ pipenv install numpy
serverless-python-requirementsのインストール
$ sls plugin install -n serverless-python-requirements
serverless.ymlを編集
profile
を指定しない場合はdefault
が使用されます
service: tri-func
provider:
name: aws
runtime: python3.6
stage: stg
region: ap-northeast-1
profile: <hogehoge> #profileが複数あるので指定する
functions:
get:
handler: handler.get_tri
events: #APIGatewayの設定
- http: GET /
plugins:
- serverless-python-requirements
custom:
pythonRequirements:
usePipenv: true # pipenvを使用する
dockerizePip: non-linux # amazonlinuxでビルドする
handler.pyを編集
import json
import numpy as np
def get_tri(event, context):
# event['multiValueQueryStringParameters']['text']にコマンドの引数が入ってくる
text = event['multiValueQueryStringParameters']['text'][0]
text = text.split()
try:
tri = text[0]
theta = int(text[1])
if tri == 'sin':
result = np.sin(np.pi*theta/180)
elif tri == 'cos':
result = np.cos(np.pi*theta/180)
elif tri == 'tan':
result = np.tan(np.pi*theta/180)
else :
result = 'エラー'
except Exception as e:
result = 'エラー'
body = {
'text': '結果: {}'.format(result),
}
response = {
'statusCode': 200,
'isBase64Encoded': False,
'headers': {'Content-Type': 'application/json'},
'body': json.dumps(body)
}
return response
デプロイ
$ sls deploy -v
Serverless: Stack update finished...
Service Information
service: tri-func
stage: stg
region: ap-northeast-1
stack: tri-func-stg
resources: 9
api keys:
None
endpoints: # URLをメモっておく
GET - https://xxxxxxxx.execute-api.ap-northeast-1.amazonaws.com/stg
functions:
get: tri-func-stg-get
layers:
None
デプロイを行うとエンドポイントが表示されるのでメモしておく
Slackでスラッシュコマンドを登録する
Slack > 管理 > カスタムインテグレーション > Slash > 設定を追加 からCommands からスラッシュコマンドを作成する
デプロイした際に表示されたエンドポイントをURLにペーストする
そして作成!
スラッシュコマンドを使ってみる
成功ですね(桁は許して)
結局どれくらいかかった?
Serverless Framework
の環境が整っていればおそらく10分程度でスラッシュコマンドが作れるのではないでしょうか。
ちなみにこの記事を書きながら作成していたので私は約1時間くらいでした。