【AWS Lambda+API Gateway】Pythonでslack通知アプリ作ってみた
はじめに
我が社のCTOが、「エンジニアはみんなLambda
くらい使えるようになっていてほしいね〜」
とのありがたいお言葉から、
「自分もエンジニアになったからには、Lambda
でAPI作ってみよう!」と、
一念発起して、挑戦してみますた(⌒▽⌒)
LT;DR
- Lambda関数の作成
- Slack Api Incoming WebHooksの作成
- Layerの作成 & 登録
- API GatewayでAPIの作成
- 実践と結果まとめ
Lambda関数の作成
Lambdaとは
AWS Lambda は、サーバーのプロビジョニングや管理の必要なしにコードを実行できるコンピューティングサービスです。
Amazon API Gateway を使用すると HTTP リクエストに応答してコードを実行できます。
参照元:AWS Lambda とは
Lambdaとは
AWS Lambda は、サーバーのプロビジョニングや管理の必要なしにコードを実行できるコンピューティングサービスです。
Amazon API Gateway を使用すると HTTP リクエストに応答してコードを実行できます。
参照元:AWS Lambda とは
ほうほう、AWSに管理系は丸投げできるんですな。
今回は、HTTP
リクエストを投げるので、やりがいありそう。
Lambda関数を作ってみる。
AWSアカウントのLambdaのページに入って関数の作成を押す。
関数名:myLambdaFunc
、ランタイム:Python 3.8
で作成。
コードソース(エディタ上)に書いたPython
コード
import json
import os
import requests
def lambda_handler(event, context):
WEBHOOK_URL = os.environ['WEBHOOK_URL']
WEBHOOK_NAME = os.environ['WEBHOOK_NAME']
CHANNEL_NAME = os.environ['CHANNEL_NAME']
data = {
'username': WEBHOOK_NAME,
'channel': CHANNEL_NAME,
'attachments': [{
'title': 'myLambdaFunc',
"color": 'danger',
'text': 'myLambdaFunc API was successful!!'
}]
}
requests.post(WEBHOOK_URL, json.dumps(data))
return {
'statusCode': 200,
'body': json.dumps(data)
}
<解説>
環境変数から下記3つを受け取り、
slack apiで作成したIncoming Webhooks
のアプリ設定をしたトーク部屋に通知した後、data
をフロント側にJSON
で返す
といったものすごくシンプルなやつです。
※コードを編集したらDeploy
を押さないとダメ
※import requests
はレイヤーが必要なので、後述
Slack Api Incoming WebHooksの作成
slack apiに行ってCreate New App
Create New App
Incoming Webhooks
を新規追加して、環境変数登録用のURLを取得しておく。
Layerの作成&登録
自分の場合、上記関数をテストした時に、requestsライブラリのimportで失敗したので、
layerとしてライブラリを取り込んでから実行する。
Layerとは
レイヤーは、ライブラリ、カスタムランタイム、その他の依存関係を含む .zip ファイルアーカイブです。レイヤーを使用することで、関数のライブラリを使用することができます。
参照元:Lambda レイヤー
つまり、Lambdaでサードパーティ製のライブラリやモジュールを使用する時に、Layerに格納して各Lambda関数から呼び出して使用できるようになる仕組み。
Layer Zipの作成
自分はローカルでZipファイルを作成しました。
$ mkdir ./python
$ cd python
$ pip install requests -t .
$ cd ../ && zip -r Layer.zip python/
任意のフォルダを作って、そこにrequests
ライブラリをインストールして、Layer.zipという名前でZip化。
ちなみに、
pipコマンドのインストール方法はこちら
Layerの追加&アップロード
サイドメニューのレイヤー
を選択し、レイヤーの作成をする。
先ほど作成したLayer.zip
をアップロードする。
名前と説明は任意。ランタイムはLambda関数でPython3.8
を選択したので、それに合わせる。
生成物はこんな感じ
※ランタイム設定を忘れたから、一度削除して、同じ名前で作成し直したら、version2になっちゃいました、、悔やまれるw
Lambda関数にLayerの登録
Layers (0)
をおすと、下部のレイヤーに移動、レイヤーの追加をする
カスタムレイヤーを選択し、さっき登録したmyRequestLayer
を登録。
version2となってしまったのが悔やまれる。
※ランタイムが同じじゃないと選択肢に出てこない。
一旦、関数のテスト実行
成功しました◎ Lambda関数の単体的には、実行ができる状態。
API GatewayでAPIの作成
Lambda関数の「トリガーを追加」から、API Gateway
を選択して、下記キャプチャのように設定
API Gateway
を選択して、下記キャプチャのように設定※テスト用なのでセキュリティはオープンにしてます。
※ドメインを超えてAPIを叩く予定なので、CORSにチェックしました。
※HTTP API
とREST API
の違いはこちら=> HTTP API と REST API 間で選択する
トリガーが作成されました!!
エンドポイントを直で叩いてみる
ここまで来れば、あとは、フロント側でAPIエンドポイント目掛けて叩きまくるのみ\\\٩( 'ω' )و ////
※叩くたびに課金されてゆきます...
実践と結果まとめ
APIエンドポイントを叩いてみる。
ボタンを一つだけ用意したフロント側から
(アプリクソしょぼいorz Google並のシンプルさw Qiitaのh1タグにしか見えないセンスオワタ\(^O^)/)
Notify
ボタンをポチっとな、と。
slackの[スコスコスコッ♪]という音と共に通知された。
ディベロッパーツールで確認してみる
ちゃんとJSONのdataが返ってきてますねえ〜
HTTPヘッダーもみてみよう。
まとめ
あまりハマりどころもなく、ボタンぽちぽちでほぼ行けたので、
ああ、Lambda
なんと簡単なことでしょう。
しかもサーバーレスかつ、保守管理等も気にすることがない。
簡単なアプリ作るだけだったら、料金的にも安いから、フロントだけ作って、APIサーバー抜きで、
Lambdaさんに頼っちゃっても良さそう✨
以上、ありがとうございました。
Author And Source
この問題について(【AWS Lambda+API Gateway】Pythonでslack通知アプリ作ってみた), 我々は、より多くの情報をここで見つけました https://qiita.com/ichi_zamurai/items/5758161f4d2523eabf2f著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .