以前、「AWS LambdaでAWS利用費を毎朝Slackに通知する」というタイトルで記事を書きました。 この中では、Serverless Frameworkを使わず、Goで書いたコードをビルドしてZip化、AWSリソースは手作業で作成、デプロイももちろん手作業でZipをアップロードしていました。
ただ正直、AWSリソースを手で作成するの面倒だし、修正してコマンド一発でデプロイしたいところです。
で、今回それを解決するためにServerless Frameworkを導入し、手作業ではなくターミナルからコマンドでデプロイできるようにします。
それでは、いってみましょう!
前提
AWS LambdaでAWS利用費を毎朝Slackに通知する - そうきたか で作成したコードを利用します。
ソースコードはこちらからダウンロードできます。
Serverless Frameworkをインストールする
すでに僕の環境にはNodeが入っていたので、npmでインストールしました。
npm install -g serverless
以下のリンク先にインストール方法は書いてあるので、参考にしてみてください!
Serverless Frameworkの設定ファイルを作る
以下のようなコマンドを実行すれば、ServerlessFrameworkの雛形を作成できますが今回は使いません。
serverless create -u https://github.com/serverless/serverless-golang/ -p hello-go-lambda
今回はすでに作成した環境があるので、そこにserverless.yml
という名前のファイルを作成します。
service: aws-billing-notification provider: name: aws runtime: go1.x stage: prd region: ap-northeast-1 iamRoleStatements: - Effect: Allow Action: - "logs:CreateLogGroup" - "logs:CreateLogStream" - "logs:PutLogEvents" - "ce:GetCostAndUsage" Resource: - "*" package: exclude: - ./** include: - ./bin/** functions: billing-notification: handler: bin/main events: - schedule: cron(0 22 * * ? *)
あと、もう一つ作業があります。ファイルをリネームします。
以前、billing-notification.goという名前でファイルを作成していたのですが、main.go
という名前にリネームしておいてください。
リネームできたら以下のコマンドでビルドします。
GOOS=linux go build -o bin/main
これで準備は完了です。
デプロイ
serverless frameworkのCLIコマンドでデプロイします。
以下のように実行してみてください。
sls deploy
これでしばらく待って、AWS Lambda, IAMロール, CloudwatchEvent等が作成されていればOKです!
試してみよう
以下のコマンドを実行して、請求金額がSlackに通知できれば完璧です!!
sls invoke -f billing-notification
最後に
いかがでしたでしょうか?
手作業で作成してデプロイするよりも遥かに簡単になりました!
以下に対応したコードをあげているので、参考にして試してみてください!