ymsrさん三回忌にあたりAWS Lambdaで線香ageを自動化した

タイトルで話が終わってしまった。

インターネットにお墓があるおかげで、いつでもどこでも、それこそ海外出張中もいつもと変わらず線香を上げられて便利だなと思っていましたが、三回忌を機に自動化しました。

(ブログにしろと言われたんだけどさすがにプライベートすぎて会社ブログにはちょっと……。というわけでこっちで)

費用

AWS Lambdaの利用費は、リクエストのうち毎月最初の1,000,000件は無料という設定で、これはAWSアカウントを作成したあと12ヶ月間の無料利用枠期間が終了しても変わりません。そして線香は1人1日1回まで。つまり、ましろさんに線香を無料で上げ続けることができますAWSさんありがとう。

設定方法

トークン取得

Githubにログインした状態で次のページに行き、ボタンを1つ押すだけでトークンを発行してもらえます。

AWS Lambdaファンクションの作成

AWSアカウントはお持ちですね。

Python用のhello worldスニペットがありますので、それを選びます。

適当なファンクション名をつけて (hakamairi) 、コードをインラインで書き換えてください。

変更前のスニペット。これは捨てちゃいます。

from __future__ import print_function

import json

print('Loading function')


def lambda_handler(event, context):
    #print("Received event: " + json.dumps(event, indent=2))
    print("value1 = " + event['key1'])
    print("value2 = " + event['key2'])
    print("value3 = " + event['key3'])
    return event['key1']  # Echo back the first key value
    #raise Exception('Something went wrong')

上のコードは捨てて、次のように変更します。先ほど取得したトークンを入れてくださいね。

import commands

def lambda_handler(event, context):
    commands.getoutput('curl -d token=12345678-1234-1234-1234-123456789012 http://haka.yamashi.ro/api/v1/incenses')

「Lambda function handler and role」という項目でRoleを指定するように要求されます。今回はcurlコマンドのようなものを打つだけなので、「Create New Role」を選んで、デフォルトのまま「lambda_basic_execution」を作成すればOKです。ちなみに、AWS Lambdaが実行時に他のAWSリソースに触る必要がある場合は、適切なアクセス権限を定義する必要があります。

ここまででコードは作成完了です。

イベントソース (スケジュール) の設定

続けて、スケジュールイベントを設定します。

AWS Lambdaファンクション一覧で、作成したファンクションを選択します。[Event sources]タブを開いて[Add event source]リンクをクリックします。

Event source typeを「Scheduled Event」に設定します。cronのような表記でスケジュールを記述できるので、線香上げたい時刻とタイミングを設定します。

cron(0 15 ? * * *)

UTCです。ここはUTCで設定してください。上の設定の場合、15:00UTCに毎日動きます。本当はおやつの時間に線香あげるつもりだったのに、UTCで設定というのを忘れてて、自分の作ったやつは深夜0時に動いています(設定変えればいいだけなんですけれども、AWS Lambdaの設定時にはマジ気をつけろっていう戒めのため、そのままにしています)。

なお、AWS Lambdaファンクションの動作ログはCloudWatch Logsで見られます。でも、ちゃんと動いたかどうかはお墓のトップページで確認すればいいですね!

ではでは。