Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

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

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

免責

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away