仕事でPython使うことになったので、0から勉強してみた(番外編-その2)

はじめに

前回の記事ではPythonを使って”Slack”の”BOT”を作る方法について書きましたが、今回はその続きです。

AWS Lambdaを使って特定の時刻になったらBOTが投稿してくれるようにします。

まずはAWSの管理コンソールにサインアップし、IAM(Identity and Access Management)にLambda実行用のロールを作成します。

Lambdaを選択し、”Create a lambda function”をクリック。

Lambdaファンクション作成1
”All languages”を”Python2.7”に変更します。blueprintと呼ばれる設定は”hello-world-python”を選択(前回作成したPythonファイルを定期実行してくれれば良いので)。
※Filterに”hello”と入力すると見つけやすいです!

Lambdaファンクション作成2

続いて下記の通り進めていきます。

Configure functionの”Name”、”Description”に任意の値を入力 > ”Runtime”に”Python 2.7”を設定 > Lambda function codeの”Code entry type”の”Edit code inline”を選択 > コードを入力。

※Python2系のコードしか動かないので、下記のようにコードを修正します。

# -*- coding: utf-8 -*-
#__future__とはPython3系の一部の機能をPython2系に取り入れたもの
#下記は2系のprint文を3系のPrint関数に変更する
from __future__ import print_function
import urllib
import urllib2
def lambda_handler():
url = 'https://slack.com/api/chat.postMessage'
params = {'token' : 'xoxp-XXXXXXXXXX-XXXXXXXXXX-XXXXXXXXXX-XXXXXXXXXX',
・
・
・
}
# Python2系の書き方に変更
params = urllib.urlencode(params)
params = params.encode('utf-8')
req = urllib2.Request(url, params)

req.add_header('Content-Type', 'application/x-www-form-urlencoded')
# Python2系の書き方に変更
res = urllib2.urlopen(req)

body = res.read()
print (body.decode('utf-8'))

Lambda function handler and roleの”Handler*”に”Name.lambda_handler”と入力して”Role*”にIAMで作成したロールを設定します。
Advanced settingsは特に変更せずに”Next”ボタンをクリックします。

確認画面の右下の”Create function”をクリックすると最初の画面に戻るので、作成したFunction nameをクリックします。

僕の場合ここでCodeのコメント文などが文字化けしてしまっていたので再度入力し直しました。

Lambdaファンクション作成3

続いて下記の手順にてスケジュールの設定を行います。

”Event sources”タブをクリック > ”Add event sources”をクリック > ”CloudWatch Events – Schedule”を選択

Lambdaファンクション作成4

※任意の日時で実行する場合は、”Schedule expression”に”cron(0 17 ? * MON-FRI *)”を選択します。

Lambdaのcronはcron(分 時間 日 月 曜日 製造年)となっており、基本的にはLinuxのcrontabの設定と同じですが、”値を未設定にする場合”は”?”を使うそうです。

また、曜日の設定は”MON-FRI”以外に”0-7”のも利用可能。時刻は”UTC”なので、”実行させたい時刻 – 9”する必要があります。

以上で、PythonとSlackAPIとAWS Lambdaを使ったBOT作成は完了です。
さすがAWSですね。簡単にスケジュール実行ができました。

lambda

 

このあとしばらく芸能人BOTが暴れてました。

Djangoからだいぶ離れてしまいましたがBOT作成に夢中になってしまい、メンションに反応するBOTも作りたいなと思ったので次回はそのことについて書きます。

 

おわりに

今回も最後に書籍の紹介をしたいと思います。

  • スマートPythonプログラミング
  • ひと言で表すと、自信を持って Python を書けるようになるための本です。 スマートPythonプログラミングなので、略してスマパイって呼んでください。

※作者の方が

”個人的には「エキスパートPythonプログラミング」をすごくリスペクトしています。 この本は Pythonista になりたいなら絶対に読んでおいた方が良いと思える本です。 ただ、ちょっと難易度が高いのと、発売から日が経って内容が古くなりつつありました。”

と言っているように、僕もこの本を読んでいたのですが、いきなり読むには難しかったです。また、現場で使うに辺り自身の開発レベルに不安があったのですが、”こんな人におすすめ”と題して”なんとなく書いてなんとなく動いているコードに不安を覚えている方”、”入門書は読み終わったけど次に何をして良いか分からない方”、”Python の初心者から中級者にステップアップしたい方”とあったのでまさに今の僕にぴったりだと思いました。まだ読みかけですが大変わかりやすく何度も読み返しながら進めています。値段も大変リーズナブルなのでオススメです!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>