AWS
SORACOM
AWSLambda

AWS LambdaのSchedule Eventを使ってSORACOM Airのステータスをコントロールしてみる

More than 3 years have passed since last update.

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化したファイルをアップロードします。

1-1.png

Event sourcesタブを選択します。

2.png

Add event sourceをクリックして、Event source typeからScheduled Eventを選択します。
必要な情報を入力します。今回は、テストとして5分単位で実行するようにしてます。

4.png

これで設定は終わりです。
実行されているかSoracomコンソールで確認してみましょう。

最初は、Inactiveだったのですが、5分後は、Activeに変わってます。

5−1.png

6−1.png

最後に

APIでコントロールできるキャリア、とてもパワフルであることを実感できます。
また、AWS LambdaにSchedule Eventはとてもインパクトが有ると思ってます。

免責

こちらは個人の意見で、所属する企業や団体は関係ありません。