12
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Posted at

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を記載

instances.txt
i-xxxxxxxxxx
i-xxxxxxxxxx

crontabで時間設定

/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ごとに設定するのが一番早い

/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というならいきなり③のほうがよい

12
13
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
12
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?