勤怠連絡メールをAPIGatewayとlambdaで作ってみた

APIGateway, AWS, Lambda, Python

この記事は最終更新日から1年以上が経過しています。

さび付いてた技術を掘り起こすために自由研究な体で作ってみました!

■やってみたこと
APIGatewayとlambda(python2.7)を組み合わせて、URLに渡したパラメータをもとにメッセージを変更して勤怠連絡メールを送る

以下、内容です。

・以前の会社でソースを構築してシステムを作ることが減っていたため、レコチョクで再勉強しよう!という背景があった。
・勉強するにあたり最新のトレンドやメジャー言語を選択。(pythonを選択)
・サーバ環境はAWSを組み入れて触りながら理解を深める。(出来れば自前アカウントのため節約、サーバレスで構成)
・APIの理解を深めたいため、Google検索でHitした東京メトロの公開API(要登録制)を
 用いて列車の遅延状況もメール本文に組み込む

(作成理由)
そもそも通勤利用している千代田線はラッシュ時に遅延が多く、運転見合わせの際はホームに上がれないほどの
 混雑のため、ワンタッチでメールを送りたい。遅延情報が一緒についてたらCool。
どうせなら、遅刻、休暇もパラメータを切り替えて内容を変えて送りたい。

(概要)
下記概要図に示す通り、携帯またはPCからパラメータを埋め込んでアクセスした
 APIGatewayを通してlambda側でパラメータ値を判定してメッセージを組み換えGoogleメールを送信する。

(パラメータ)
in
0:列車遅延状況の東京メトロAPI呼び出し確認用
1:列車遅延の為、遅れての出勤連絡
2:体調不良による、遅れての出勤連絡
3:体調不良による、AM休連絡
4:体調不良による、全休連絡
5:テスト用メール送信
out
実行したパラメータ番号

クライアントアプリ側はURLのアイコン化ツールで作成しました。

77-1.png

(メール)
メールの送信はSMS機能を用いて送信した場合、受信者の承諾が必要なこと
 AWSからの送信でアラートとの見分けがつかないためGmailを用いた。
ただしtcp:25は迷惑メール対策で閉じられているためsubmission port:587を使用

<はまったところ>
1.最新の観点でpython3.5を選択したが、lambdaがpython2.7のため関数の変更が必要だったこと
2.lambdaに引数を渡すところで、
  def lambda_handler(event, context): 以下略)で変数を取り込んで処理していくが、
 ハンドラーの外に変数を簡単に渡せると思っていたが内部完結が必要であった。
 パラメータの扱いにeclipse上ではlibのsys関数を用いて変数を組んでいたためlambdaでは混乱した。
3.Gmail側の不正アクセス監視が働いており、AWS初回のアクセスは未知の端末としてアクセスがはじかれる。既存端末から心当たりのあるアクセスとして有効にする(AWS側で端末が変更されると都度承認が必要)

<今後の課題>
outメッセージの強化
APIGatewayにAPIキーの設定
路線、宛先、名前の変数化など

77-2.png

77-3.png

(参考した代表サイト)
http://qiita.com/yuyakato/items/89fcef9746afbf48977a
http://qiita.com/seiketkm@github/items/c91d8a62af9883dd00d6
https://developer.tokyometroapp.jp/info

この記事を書いた人

野々宮聡
野々宮聡レコチョクエンジニア(駆け出し)
今年の半ばからレコチョクエンジニアとして働き始めた野々宮 SATEOSHI(写真:スペルミス?)です。
斬新なサービスやその成り立ちに興味あります。
このサイトでは色々な興味あること、気になることや自分の経験・体験を書いていきたいと思います。

APIGateway, AWS, Lambda, Python