ENECHANGE VPoTの岩本 (iwamot) です。
2024年2月1日に「第1回 AWSコスト削減 天下一武道会」が開催されました。AWSコスト削減の達人たちが、手法や成果を発表するイベントです。3000人を超える参加者数から、コスト削減への関心の高さがうかがえます。
達人たちの発表を聞いているなかで、ぼくがすぐに真似したくなったのは「コストのSlack通知」でした。NTTドコモ・小澤さんの発表で取り上げられていた手法です。
さっそく実装を進め、本日2月5日、通知開始を社内に案内しました。通知先チャンネルには、すでに10名が参加しています。ありがたいことです。
この記事では、なぜコストを通知したくなったのか、また、どのように実装したのか、記してみます。
なぜコストを通知したくなったのか
もともとENECHANGEでは「AWS コスト異常検出」と「AWS Budgets」をSlack通知に利用していました。コストが異常に増えたり、予算に近づいたり、Savings Plansのカバレッジが下がったり、といったイベントは監視できていたわけです。
しかしながら、全体的なコストは通知していませんでした。
小澤さんの発表によれば、NTTドコモの一部システムでは「コスト監視とコストの意識化ができておらず、不要な費用が発生していた」ため「Slack上に各処理部のコスト情報を提示するアプリを開発」されたそうです。
この発表を聞きながら、ENECHANGEでも「コストをSlack通知すれば、節約への意識が高まるかもしれない」と感じ、イベント翌日には、実装に取りかかりました。
どのように通知を実装したのか
このようなちょっとしたタスクには、既存のOSSを活用することにしています。シンプルに開発の手間が省けますし、いずれコントリビュートの機会が生まれるかもしれないからです。
いろいろ探したなかで、今回は「aws-cost-cli」を使うことにしました。スター数が現時点で370と多いこと、また、GitHub Actionsなどで簡単に通知できることが、魅力に感じたためです。
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コスト削減 天下一武道会」のおかげです。ありがとうございます。
この記事も、どなたかの心を動かせたらと思って書きました。