17
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2015-10-16

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はとてもインパクトが有ると思ってます。

免責

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

17
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?