クラウドを使ってサーバーレスでガゲマックをシャッフルする
サーバレスっていうのが流行っているらしいので,雑にガゲマックをシャッフルしていく。
概要
IFTTTのDate&TimeトリガーでWebhookを使ってAWS API Gatewayで作成したAPIのエンドポイントを叩く。
AWS Lambdaで文字列をシャッフルする。
Lambda内の処理でIFTTTのWebhookを叩いて,Twitterでツイートする。
1. ツイートするレシピを作る
- Webhookのエンドポイントを確認する
- レシピを作る
{event}となっている部分にイベント名を入力すると,いい感じにエンドポイントのURLが出てくる(便利)。
thisはWebhook,thatはTwitterで作る。
2.AWS Lambda
実際にシャッフルを行う関数を作成する。
- 新しい関数の作成
- 関数(実行するコード)の作成
記事執筆時点でC#,Java8,Node.js 4.3,Node.js 6.10,Python 2.7,Python 3.6が使える。今回はPython 3.6を使う。
import urllib.request
import random
def string_shuffle(str):
ls = list(str)
random.shuffle(ls)
return "".join(ls)
def ifttt_request(values):
# WebhookのエンドポイントURLを指定する
ifttt_url_endopoint = 'https://maker.ifttt.com/trigger/*****'
data = urllib.parse.urlencode(values).encode('ascii')
req = urllib.request.Request(ifttt_url_endopoint, data)
with urllib.request.urlopen(req) as response:
charset = response.headers.get_content_charset()
content = response.read().decode(charset)
return content
def lambda_handler(event, context):
values = {
'value1': string_shuffle(event['message']),
'value2': event['message']
}
content = ifttt_request(values)
return content
3.AWS API Gateway
APIを作る。
- 新しいAPIの作成
- メソッドの作成
- パラメータの追加
- APIのデプロイ
新しいAPI→API名等を入力するだけ。
アクション→メソッドの作成→「GET」を選択→(✓)をクリックする。
統合タイプは「Lambda関数」,LambdaリージョンをLambda関数のリージョンに設定する。
Lambda関数は作った関数の名前を入れる。
すると一通りの流れが出来上がる。
シャッフルする文字列はリクエストから指定できると汎用性がある。
今回はURLのクエリ文字列で指定する。("/?message=~~~"
とする。)
まずメソッドリクエストからURLクエリ文字列パラメータとして"message"
を追加する。
追加したパラメータの必須チェックボックスをtrueにし,さらにリクエスト時の検証を行うよう設定する。
次に統合リクエストから本文マッピングテンプレートを用いて"Content-type: application/json"
に対して
{
"message": "$input.params("message")"
}
と入力し,保存する。
APIをデプロイする。今回は本番環境のみとして,ステージ名はprodにした。
アクション→APIのデプロイから,デプロイされるステージ: [新しいステージ],ステージ名: prodと設定する。
デプロイに成功すると,ステージエディタが開く。メソッドスロットリングの設定などを変更し,保存する。
4. 指定した時になったらAPIを叩くレシピを作る
thisがDate&Timeで,thatがTwitter→postと指定する。
結論
流行りに乗ってサーバーレスにしてみたが,意外と簡単にできた。AWSさんはすごいのだ。
本当はAPIキーで認証を掛けようと思ったのだが,IFTTTからヘッダ付きでAPIを叩く方法がわからないのでダメだった…
高度クラウド文字列シャッフル人材なので完全週休2日制,年収1千万円の職がほしい。
謝辞
本記事の一部はAmazon Web Serviceの無料利用枠で書かれた。
0 件のコメント:
コメントを投稿