0
0

serverless frameworkを使って毎日AWSのコストをSlackに飛ばすlambda関数を作ってみる(コードの記載)

Last updated at Posted at 2024-09-01

概要

serverless frameworkを使ってlambda関数を定義し、AWSのコストをSlackに毎日送る仕組みを作る。
今回はメインとなるlambdaにデプロイされるコードを記載する。

前提

下記の内容が完了していること。

方法

  • handler.jsを下記のように修正(「取得開始日」と「取得終了日」は2024-09-01現在は下記の値で問題無い。しかしCost Exporlerはたしか14ヶ月前までの情報しか取れなかったはずなので皆さんが体験するタイミングによってはエラーになる可能性がある。エラーが出たら当該箇所の日付だけ修正いただければ問題ないはずだ。)

    aws-cost-notify/handler.js
    const 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\":\"コスト通知が正常に処理されました\"}"
    }
    
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0