ENECHANGE Developer Blog

ENECHANGE開発者ブログ

「AWSコスト削減 天下一武道会」で心を動かされ、コストのSlack通知を始めました

ENECHANGE VPoTの岩本 (iwamot) です。

2024年2月1日に「第1回 AWSコスト削減 天下一武道会」が開催されました。AWSコスト削減の達人たちが、手法や成果を発表するイベントです。3000人を超える参加者数から、コスト削減への関心の高さがうかがえます。

no1.connpass.com

達人たちの発表を聞いているなかで、ぼくがすぐに真似したくなったのは「コストのSlack通知」でした。NTTドコモ・小澤さんの発表で取り上げられていた手法です。

さっそく実装を進め、本日2月5日、通知開始を社内に案内しました。通知先チャンネルには、すでに10名が参加しています。ありがたいことです。

この記事では、なぜコストを通知したくなったのか、また、どのように実装したのか、記してみます。

なぜコストを通知したくなったのか

もともとENECHANGEでは「AWS コスト異常検出」と「AWS Budgets」をSlack通知に利用していました。コストが異常に増えたり、予算に近づいたり、Savings Plansのカバレッジが下がったり、といったイベントは監視できていたわけです。

しかしながら、全体的なコストは通知していませんでした。

小澤さんの発表によれば、NTTドコモの一部システムでは「コスト監視とコストの意識化ができておらず、不要な費用が発生していた」ため「Slack上に各処理部のコスト情報を提示するアプリを開発」されたそうです。

この発表を聞きながら、ENECHANGEでも「コストをSlack通知すれば、節約への意識が高まるかもしれない」と感じ、イベント翌日には、実装に取りかかりました。

どのように通知を実装したのか

このようなちょっとしたタスクには、既存のOSSを活用することにしています。シンプルに開発の手間が省けますし、いずれコントリビュートの機会が生まれるかもしれないからです。

いろいろ探したなかで、今回は「aws-cost-cli」を使うことにしました。スター数が現時点で370と多いこと、また、GitHub Actionsなどで簡単に通知できることが、魅力に感じたためです。

github.com

https://raw.githubusercontent.com/kamranahmedse/aws-cost-cli/master/.github/images/slack-usage.png https://raw.githubusercontent.com/kamranahmedse/aws-cost-cli/master/.github/images/slack-usage.png

今のところ、下記のようにワークフローを再利用する形で、複数のAWSアカウントのコストを通知しています。

.github/workflows/report.yml(再利用されるワークフロー)

name: report
on:
  workflow_dispatch:
    inputs:
      environment:
        required: true
        type: string
  workflow_call:
    inputs:
      environment:
        required: true
        type: string
jobs:
  main:
    runs-on: ubuntu-latest
    environment: ${{ inputs.environment }}
    steps:
      - name: Checkout
        uses: actions/checkout@v4
      - name: Send costs to Slack
        run: |
          npm install -g aws-cost-cli
          aws-cost -k ${{ secrets.AWS_ACCESS_KEY_ID }} -s ${{ secrets.AWS_SECRET_ACCESS_KEY }} -r ${{ secrets.AWS_REGION }} -S ${{ secrets.SLACK_TOKEN }} -C ${{ secrets.SLACK_CHANNEL }}

.github/workflows/enechange.yml(呼び出し元の例)

name: ENECHANGE
on:
  workflow_dispatch:
  schedule:
    - cron: '0 1 * * *'
jobs:
  report:
    uses: ./.github/workflows/report.yml
    with:
      environment: enechange
    secrets: inherit

おわりに

以上のように、節約への意識を高めるべく、AWSコストのSlack通知を始めてみました。実装にはaws-cost-cliを使っています。

やってみようと思えたのは「第1回 AWSコスト削減 天下一武道会」のおかげです。ありがとうございます。

この記事も、どなたかの心を動かせたらと思って書きました。