AWS Lambda Scheduled Eventを試してみる

個人的に心待ちにしていた機能、Scheduled Eventが発表されました。
すでにリリースされているそうなので早速試してみました。

とりあえずサンプルとなるLambda functionを作成。
このサイトへのHTTPリクエストを発行するコードとなっています。

サンプルLambda

そして、Event sources に Scheduled Eventを追加。
とりあえずcronフォーマットで5分毎に実行する形で登録してみます。

lambda_schedule_1

このサイトのアクセスログを関してみたところ、ちゃんと5分ごとにアクセスが来ていることが確認できました。
(こちらのIPアドレスをwhoisすると、ちゃんとamazonからのものでした)

lambda_access

しかし Lambda はすばらしいですね。

EBSのスナップショット作成スクリプト

EBSのスナップショットを作成し、古いスナップショットを自動削除するスクリプトを書いたのでメモがてら残します。
このスクリプトを実行するインスタンスのすべてのボリュームに対して、EXPIRE_DAYS日数経過したスナップショットを削除し、EBSスナップショットを作成します。
あ、credentials は ~/.aws/credentials にある前提です。

#!/bin/sh

# ------------------------------------------
# configuration
EXPIRE_DAYS=4
INSTANCE_ID=`curl -s http://169.254.169.254/latest/meta-data/instance-id`
EXPIRE_DATE=`date +%Y-%m-%dT%H:%M:%S.0000Z -d "-${EXPIRE_DAYS}day"`

# ------------------------------------------
# script start

STATUS=0

for VOL_ID in `aws ec2 describe-volumes --filters "Name=attachment.instance-id,Values=${INSTANCE_ID}" | grep -e '^VOLUMES' | awk '{ print $9 }'`
do
  # delete old snapshots
  for SNAPSHOT in `aws ec2 describe-snapshots --filters "Name=volume-id,Values=${VOL_ID}" | grep ${VOL_ID} | awk '{ print $8","$9 }'`
  do
    SNAPSHOT_ID=`echo $SNAPSHOT | awk -F"," '{ print $1 }'`
    CREATE_DATE=`echo $SNAPSHOT | awk -F"," '{ print $2 }'`

    # delete expired snapshot.
    if [[ "$EXPIRE_DATE" > "$CREATE_DATE" ]]; then
      aws ec2 delete-snapshot --snapshot-id $SNAPSHOT_ID > /dev/null
      RESULT=$?
      if [ $RESULT -ne 0 ]; then
        echo "delete for snapshot failed... ($SNAPSHOT_ID, $CREATE_DATE, ${RESULT})"
        STATUS=1
      fi
    fi
  done

  # create snapshot.
  aws ec2 create-snapshot --volume-id ${VOL_ID} --description "`date +%Y-%m-%d` snapshot instance-id:${INSTANCE_ID}" > /dev/null
  RESULT=$?
  if [ $RESULT -ne 0 ]; then
    echo "create for snapshot failed... (${RESULT})"
    STATUS=2
  fi
done

exit $STATUS