これは AWS Lambda Advent Calendar 2017 の16日目の記事になりました。
はじめに
- コンテナ付いてる昨今は、久しくLambdaやServerless Framework触って無かったのですが、EC2を8時に起動して、20時半に停止する要件が浮上したので、サクッとslsで作りました。
- ソースはGithubで公開してます。
- 至極簡単な内容なので、速攻実現出来ると思ってます。
環境のセットアップ
Serverless FrameworkでDeploy
ソースの取得
- 以下のGithubからソースを取得します。
$ git clone https://github.com/ukitiyan/operation-ec2-instance.git
STS(Eclipse)にインポート
- STSを起動して、Project Explorer -> 右クリック -> Maven -> Existing Maven Projectsで先程Githubから取得した「operation-ec2-instance」フォルダを選択します。
serverless.yml の修正 + Build
- serverless.ymlのL37 周辺の設定を適宜修正します。
- rate: AWS Lambda - Scheduled EventのCron書式
を参考にUTC
で記載 - instanceId: 対象インスタンスのinstanceIdを記載
- scheduleは、縦に増やせるので複数インスタンスに対応できます。(それを踏まえて環境変数でinstanceIdを指定してません)
- rate: AWS Lambda - Scheduled EventのCron書式
serverless.yml
- schedule:
rate: cron(30 11 * * ? *)
input:
goal: stop
instanceId: i-XXXXXXXXXXXXXXXXX
- schedule:
rate: cron(0 23 * * ? *)
input:
goal: start
instanceId: i-XXXXXXXXXXXXXXXXX
- プロジェクトを右クリック -> Run As -> Maven Install でビルドします。
- target配下にoperation-ec2-instance.1.0.0.jarが出来上がります。
Deploy
- 例のごとく、以下のコマンド一発です。
$ cd operation-ec2-instance
$ serverless deploy -v
Serverless: Packaging service...
Serverless: Uploading CloudFormation file to S3...
Serverless: Uploading artifacts...
・
・
Serverless: Stack update finished...
Service Information
service: operation-ec2-instance
stage: prod
region: ap-northeast-1
api keys:
None
endpoints:
None
functions:
aws-java-maven-prod-hello: arn:XXXXXXXX
- 以下のJsonでコンソールから
test
するか、設定時間になるまで待って、問題ないか気にしておきましょう。
{
"goal": "stop",
"instanceId": "i-XXXXXXXXXXXXXXXXX"
}
まとめ
- まぁ、やっつけですが。速攻実現出来ました。
- STSで完結するのが、アプリ屋にとっては本当うれしいです。