AWS

AWS料金の節約方法について(実運用から)

More than 1 year has passed since last update.

AWSは便利だが、何も考えずに使い続けると結構な料金になることがある。

料金の節約について、実際開発や運用をしていて模索したことなどをまとめる。

詳しい人は既にやっていると思うので、意識してなかった人向け。


まずは現状分析


月額料金詳細をチェックする

rootなどでログインして1月いくらかかっているのか、どのコンポーネントに費用が特にかかっているかを分析する

開発内容によるが、大体はEC2とRDSに掛かっていると思われる


AWS費用のチェック方法

rootアカウントにログイン



アカウントメニュー選択



請求書で今月の詳細を確認


AWS料金節約方法

ここではEC2とRDSに料金がかかっている前提で検討する


STEP1:不要なコンポーネントを削除

当たり前ことであるが、以外と不要なものがあるのでチェックする

・不要なEC2/RDSなどなどコンポーネント削除

→立ち上げっぱなしで忘れているものなどを削除する。よくある。。。

・不要なAMI(EBS)/RDSスナップショットを削除

→AMIはバックアップ後放置しがち

→RDSスナップショットは、RDSのバックアップ期間を小さくする

特に壊れた時以外のロールバック以外必要なければ1日で十分

・他リージョンの不要なコンポーネント削除

→新しいコンポーネントを試したの作り忘れ


STEP2:起動しているコンポーネントを安くする

・EC2を使わない時間(夜間など)に停止させる

以下AWSCLIが実行可能なサーバにスクリプトを配置


start_instance.sh

#!/bin/bash

AWS_CONFIG_FILE=[ユーザ名]/.aws/credentials

for i in `cat /root/script/instances.txt`
do
aws ec2 start-instances --instance-ids $i
done



stop_instance.sh

#!/bin/bash

AWS_CONFIG_FILE=[ユーザ名]/.aws/credentials

for i in `cat /root/script/instances.txt`
do
aws ec2 stop-instances --instance-ids $i
done


起動・停止したいEC2インスタンスIDを記載

config:instances.txt

i-xxxxxxxxxx

i-xxxxxxxxxx

crontabで時間設定

config:/etc/crontab

00 08 * * 1-5 root /root/script/start_instances.sh > /dev/null 2>&1

00 00 * * * root /root/script/stop_instances.sh > /dev/null 2>&1

・DBの期間停止

→PostgreSQLなどのRDSの一部はインスタンスの停止ができるようになった

EC2停止同様に、RDSも時間停止させる

cronでdbごとに設定するのが一番早い

config:/etc/crontab/

00 08 * * 1-5 root aws rds start-db-instance --db-instance-identifier [DB識別子] > /dev/null 2>&1

00 00 * * * root aws rds stop-db-instance --db-instance-identifier [DB識別子] > /dev/null 2>&1

・リザーブインスタンス導入

→EC2/RDSはリザーブドインスタンスとして1年または3年契約ができる

開発後の維持管理などは年間契約が多いため、1年契約をやりやすい

参照:

https://dev.classmethod.jp/cloud/aws/how-to-buy-reserved-instances/

・スポットインスタンス導入 (EC2コンソールのスポットリクエストがやりやすい)

→維持管理など、EC2内の構成がほぼ変わらない段階であれば、スポットインスタンスを適用することを考えられる

スポットインスタンスはAMIを前提

参照:

https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/spot-requests.html

https://recipe.kc-cloud.jp/archives/321


まとめ

いきなり全てを導入しなくても、以下の順で検討していけばいい

①不要なものを削除する

②使ってない時間を停止するようにする

③リザーブドインスタンス/スポットインスタンスの導入

下にいくほど構成や契約に縛りが出てくるため、開発状況を見てのバランスが大事

①②を開発時

③を衰退期や維持管理で実施するのがよい

費用削減について、感覚的には②で3割減 ③で7割減 ①はうっかり残していたもの次第。。。

もちろんWebサーバなどをたくさん用意する必要がある運用構成や顧客がOKというならいきなり③のほうがよい