AWSのグローバルイベントre:Invent中にAWS Lambdaに様々な機能が追加されました。
中でもPython2.7対応やSchedule Eventは様々な方に影響があったのではないでしょうか。
Schedule Eventは、最小5分から設定して時刻イベントとしてLambda Functionを実行することができます。
時刻指定の方法は、CRONの表現で設定できます。
cron(Minutes Hours Day-of-month Month Day-of-week Year)
例えば、
毎日10:00amに実行したい場合
cron(0 10 * * ? *)
月曜日から金曜日の6:00pmに実行したい場合
cron(0 18 ? * MON-FRI *)
ちなみに、時刻はすべてUTCでの指定になります。
この機能は、CRONで実行している"よくある"バッチシステムで活用できる画期的な機能だと思っております。
もちろん、IoTの世界でもこの機能は使えます。
例えば、エネルギーシステムで、日の出から日の入りまでの間だけデータをクラウドにあげて夜は無駄な通信を抑制することが可能です。これをAPIで実行できるのがSoracomのパワーだと思います。
そこで、Lambdaの新機能(Python2.7とSchedule Event)とSoracom APIを使ってみます。
AWS Lambda
Pythonのコードは以下のとおりです。
import requests
import json
def handler(event, context):
data = {}
headers = {'Content-Type': 'application/json'}
payload = {'email': 'YOUR MAIL ADDRESS', 'password': 'YOUR PASSWORD'}
res = requests.post("https://api.soracom.io/v1/auth", headers=headers,data=json.dumps(payload)).text
data = json.loads(res)
apiKey = data['apiKey']
token = data['token']
print('apiKey: ' + apiKey +'/' + 'Token: ' + token)
headers = {
'Accept': 'application/json',
'X-Soracom-Api-Key': apiKey,
'X-Soracom-Token': token
}
res = requests.get("https://api.soracom.io/v1/subscribers?tag_value_match_mode=exact",headers=headers,data=json.dumps(payload)).text
data = json.loads(res)
imsi = data[0]['imsi']
status = data[0]['status']
url = 'https://api.soracom.io/v1/subscribers/' + imsi + '/'
if status == 'inactive':
url = url + 'activate'
print 'URL: ' + url
res = requests.post(url,headers=headers).text
else:
url = url + 'deactivate'
print 'URL: ' + url
res = requests.post(url,headers=headers).text
data = json.loads(res)
return data['status']
現状のステータスに応じてActivateとInactivateにするとてもシンプルなものです。
マネジメントコンソールで、Python2.7を選択してzip化したファイルをアップロードします。
Event sourcesタブを選択します。
Add event sourceをクリックして、Event source typeからScheduled Eventを選択します。
必要な情報を入力します。今回は、テストとして5分単位で実行するようにしてます。
これで設定は終わりです。
実行されているかSoracomコンソールで確認してみましょう。
最初は、Inactiveだったのですが、5分後は、Activeに変わってます。
##最後に
APIでコントロールできるキャリア、とてもパワフルであることを実感できます。
また、AWS LambdaにSchedule Eventはとてもインパクトが有ると思ってます。
免責
こちらは個人の意見で、所属する企業や団体は関係ありません。