2017年12月2日土曜日

ガゲァスAdvent Calender 2日目

クラウドを使ってサーバーレスでガゲマックをシャッフルする

サーバレスっていうのが流行っているらしいので,雑にガゲマックをシャッフルしていく。

概要

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名等を入力するだけ。

  • メソッドの作成
  • アクション→メソッドの作成→「GET」を選択→(✓)をクリックする。

    統合タイプは「Lambda関数」,LambdaリージョンをLambda関数のリージョンに設定する。

    Lambda関数は作った関数の名前を入れる。

    すると一通りの流れが出来上がる。

  • パラメータの追加
  • シャッフルする文字列はリクエストから指定できると汎用性がある。

    今回はURLのクエリ文字列で指定する。("/?message=~~~"とする。)

    まずメソッドリクエストからURLクエリ文字列パラメータとして"message"を追加する。

    追加したパラメータの必須チェックボックスをtrueにし,さらにリクエスト時の検証を行うよう設定する。

    次に統合リクエストから本文マッピングテンプレートを用いて"Content-type: application/json"に対して

    {
      "message": "$input.params("message")"
    }
    

    と入力し,保存する。

  • APIのデプロイ
  • APIをデプロイする。今回は本番環境のみとして,ステージ名はprodにした。

    アクション→APIのデプロイから,デプロイされるステージ: [新しいステージ],ステージ名: prodと設定する。

    デプロイに成功すると,ステージエディタが開く。メソッドスロットリングの設定などを変更し,保存する。

4. 指定した時になったらAPIを叩くレシピを作る

thisがDate&Timeで,thatがTwitter→postと指定する。

結論

流行りに乗ってサーバーレスにしてみたが,意外と簡単にできた。AWSさんはすごいのだ。

本当はAPIキーで認証を掛けようと思ったのだが,IFTTTからヘッダ付きでAPIを叩く方法がわからないのでダメだった…

高度クラウド文字列シャッフル人材なので完全週休2日制,年収1千万円の職がほしい。

謝辞

本記事の一部はAmazon Web Serviceの無料利用枠で書かれた。

0 件のコメント:

コメントを投稿