概要
serverless frameworkを使ってlambda関数を定義し、AWSのコストをSlackに毎日送る仕組みを作る。
今回はメインとなるlambdaにデプロイされるコードを記載する。
前提
下記の内容が完了していること。
方法
-
handler.jsを下記のように修正(「取得開始日」と「取得終了日」は2024-09-01現在は下記の値で問題無い。しかしCost Exporlerはたしか14ヶ月前までの情報しか取れなかったはずなので皆さんが体験するタイミングによってはエラーになる可能性がある。エラーが出たら当該箇所の日付だけ修正いただければ問題ないはずだ。)
aws-cost-notify/handler.jsconst AWS = require('aws-sdk'); const costExplorer = new AWS.CostExplorer({ region: 'us-east-1' }); exports.notify = async (event, context) => { try { console.log('コスト通知イベントを受信しました:', JSON.stringify(event)); const params = { TimePeriod: { Start: '2024-01-01', // 取得開始日 End: '2024-01-31' // 取得終了日 }, Granularity: 'MONTHLY', Metrics: ['UnblendedCost'] }; const data = await costExplorer.getCostAndUsage(params).promise(); console.log('Cost Explorer Data:', JSON.stringify(data)); return { statusCode: 200, body: JSON.stringify({ message: 'コスト通知が正常に処理されました' }) }; } catch (error) { console.error('エラーが発生しました:', error); return { statusCode: 500, body: JSON.stringify({ message: 'コスト通知の処理中にエラーが発生しました' }) }; } };
-
aws-cost-notifyディレクトリで下記を実行してaws-sdkをインストール
npm install aws-sdk
-
aws-cost-notifyディレクトリで下記を実行して修正内容をデプロイ
serverless deploy
-
AWSマネジメントコンソールにログインし、Lambdaの今回デプロイした関数の詳細へ移動し、テストを実行
-
下記の様に200が返り、ログ出力でキーamoutのvalueで指定した期間のコストが取れていれば一旦完了
{ "statusCode": 200, "body": "{\"message\":\"コスト通知が正常に処理されました\"}" }