Blogは株式会社BuySellTechnologiesのエンジニア達が知見・発見を共有する技術ブログです。2019-05-13見習いエンジニアが入社1ヶ月でLambdaを動かした話AWSこんにちは!テクノロジー開発部の杉田です。弊社には数多くの優秀なエンジニアが揃っていますが、私はまったくの異業種からの転職者で、未経験として入社したのが4月1日。前職の会社ではエイプリルフールは毎年先輩たちにどんな嘘をつこうか考えながら呑気に出社していましたが、今年は出勤初日ということで、緊張して嘘どころではなかったのを覚えています。そんな私が入社1ヶ月でAWSのLambdaに触れる機会に恵まれたので、今日はそのお話を書きたいと思います。Lambdaとはまず、入社前まではLambda(ラムダ)のラの字も知らなかった私。1ヶ月前の自分に「Lamdaとは」を一言で説明するなら...「AWSが提供してくれているサービスのひとつで、なにかのイベントをトリガーに、事前に定義しておいた関数(自分が書いたプログラム)をサーバーレスで実行してくれるスグレモノ」となります。Gatewayという別のサービスもAmazonさんは用意してくださってまして、これは「簡単にAPIの作成&管理ができるスグレモノ」という説明で概ね合っていると思います。Gatewayで作ったAPIのエンドポイントにしておけば、外部サービスでのアクションをトリガーにLambdaを起動する、といったことが簡単に実現できてしまいます。前提として、弊社では全社でのコミュニケーションツールにChatworkを採用しつつ、社内の問い合わせシステムにJiraを導入しています。今回実装したプログラムは、この問い合わせシステムの質問スレ(Jiraチケット)に回答者から回答コメントがついたら、質問者のChatworkに通知を飛ばす、というものです。シンプルなのですが、ここで1番のミソは「Jira側から取得した質問者のメールアドレスをキーに、その質問者のChatworkのroom_idを探し出す必要があること」。社員のメールアドレスとroom_idが対になったデータが既にあればそこまで難しいことはなかったと思うのですが、生憎そのようなデータが存在していなかったので、まずはそれを生成する必要がありました。そこで、下図のようにAサイドとBサイドで処理を分けることにしました。APIから取得したコンタクト一覧と社員データを、Chatworkのaccount_idをキーにしてmergeすることにしました。APIからは色々な情報が取得できるのですが、情報が多過ぎても逆に扱いにくいので、account_idとroom_idだけのシンプルなdictのリストを生成します。(以下コーディングは全てPythonで行なっています。spreadsheetを読みにいくのも、Lambda上で動かすので個人アカウントではなくサービスアカウントを使用します。こちらでも必要最低限の情報であるaccount_idとemailだけのdictのリストを生成します。row[2]})merge色々試行錯誤した結果、上記の2つをmergeするにはpandasでDataFrameに変換してしまうのが1番簡単そうだったので、そうします。DataFrameをspreadsheetに書き込むのにはpygsheetsというモジュールが便利でした。書き込み開始点)BサイドAサイドができてしまえば、あとはBサイドでspreadsheetを読みにいってChatworkにメッセージ送信するだけです!Aサイドで書き出したspreadsheetを読み込むspreadsheetを読みにいく部分はほぼAサイドのコードのコピペなので割愛します(笑)最後の部分だけ、emailがキーでroom_idがvalueになるdictを生成しています。GatewayはLambdaのhandler(自分が定義した関数)を起動します。いう形で欲しい値にアクセスすることができます。'あなたの質問へ回答がありました。内容を確認してください。GatewayとLambda(とPythonのモジュールたち)が優秀過ぎて、私のような初心者でもちょこっとコードを書いただけでこんな便利機能を作ることができてしまいました!実は最初はただ「カッコ良いから」という理由だけでGo言語で書き始めていたのですが、静的型付け言語は私にとってまだまだハードルが高く、あまりにも無謀そうだったので途中からPythonに切り替えたという経緯があります😂とは言えPythonもほぼ書いたことがなかったので大きな挑戦でしたが...先輩方やGoogle先生を頼りまくり、なんとか完成まで辿り着くことができました。Gatewayというもの自体の学習から始まり、探り探りコードを書き始めてから2週間。これだけのコードを生産するのに2週間なんて時間がかかり過ぎかもしれませんが、自分でトライ&エラーを繰り返せたお陰で、学びも非常に大きかったです。途中で躓くことがあっても、「もっと知りたい」とか「悔しい」とか「楽しい」という気持ちが1番の原動力になりますよね。入社1ヶ月でしかも未経験者の私にこんな楽しい学びの機会を与えてくださったマネージャーの松榮さんや、アドバイスをくださった弊社のNo.1エンジニアである村上さんに感謝すると共に、今後も努力を続けながらエンジニアリングを楽しんでいきたいと思いました。11:38バイセルテクノロジーズではエンジニアを募集しています!興味がありましたら以下のリンクからご応募ください。上で実行する高速エンハンス開発を可能にするテスト手法フルスクラッチで開発。マイクロサービスについてSpinnakerをTLS(SSL)対応させる月別アーカイブスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。