0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【ハマりポイント全部解説】LambdaからAuroraを停止したらハマった話(IAM・Cluster名・状態管理)

0
Posted at

はじめに

Terraformで構築したAurora環境に対して、
コスト最適化を目的に Lambdaから停止処理を自動化しようとしたところ、
いくつかのポイントでハマりました。

具体的には以下のような問題です:

クラスター識別子が見つからない(DBClusterNotFound)
Lambdaの修正が反映されない
IAM権限不足によるAccessDenied
停止済みクラスターへの実行エラー

一見シンプルな処理ですが、
RDS(Aurora)の仕様・IAM・Lambdaの挙動が絡むため、
実際にやってみると意外と詰まりやすいポイントが多いです。

本記事では、実装方法だけでなく
実際にハマったポイントとその解決方法を整理してまとめます。

👍 こんな人におすすめ

  • LambdaからRDSを操作したい人
  • Auroraの自動停止をやりたい人
  • AWSでハマりポイントを事前に知りたい人

やりたいこと

  • LambdaからAuroraクラスターを停止したい
  • 状態に応じて安全に制御したい(冪等性)

実装コード

import boto3

region = 'ap-northeast-3'
db = 'iseaw20260224-1559-drive-tfe-dev-auroracluster-ap-northeast-3'

def lambda_handler(event, context):
    rds = boto3.client('rds', region_name=region)

    response = rds.describe_db_clusters(DBClusterIdentifier=db)
    status = response['DBClusters'][0]['Status']

    print(f"current status: {status}")

    if status == 'available':
        rds.stop_db_cluster(DBClusterIdentifier=db)
        print('stopped cluster')
    else:
        print('already stopped or not available')

ハマったポイントと解決方法

❌ ① DBClusterNotFoundFault

DBCluster xxx not found

原因

クラスター識別子が間違っている

解決

  • AWSコンソールの「DB cluster identifier」をそのまま使用する

👉 よくあるミス

  • Terraformのリソース名と一致しない
  • DBインスタンス名とクラスター名を混同

❌ ② Lambdaのコードが反映されない

症状

  • 修正したはずのコードで動かない

原因

  • Deployしていない

解決

コード編集 → Deploy → Test

LambdaはDeployしないと変更が反映されない

❌ ③ AccessDenied(StopDBCluster)

not authorized to perform: rds:StopDBCluster

原因

  • IAM権限不足

解決

{
  "Effect": "Allow",
  "Action": "rds:StopDBCluster",
  "Resource": "*"
}

❌ ④ AccessDenied(DescribeDBClusters)

原因

  • 状態確認の権限不足

解決

{
  "Effect": "Allow",
  "Action": [
    "rds:StopDBCluster",
    "rds:DescribeDBClusters"
  ],
  "Resource": "*"
}

操作系だけでなく参照系も必要

❌ ⑤ InvalidDBClusterStateFault

is in stopped state but expected available

原因

  • すでに停止済みのクラスターに対して停止処理を実行

解決

状態チェックを実装
if status == 'available':

冪等性を担保できる

最終結果

  • LambdaからAuroraクラスターの状態取得および停止処理が正常に実行可能
  • エラーなく安全に再実行可能な構成に改善

学び

  • LambdaはDeployしないと変更が反映されない
  • Auroraは「cluster」と「instance」でAPIが異なる
  • IAMは操作だけでなく参照権限も必要
  • エラーから原因を切り分けることが重要

おまけ(おすすめ)

EventBridgeと組み合わせることで、

夜:stop
朝:start

Auroraの自動ON/OFFによるコスト削減が可能

まとめ

Aurora制御はシンプルに見えて、

  • クラスター識別子
  • IAM権限
  • 状態管理

といったポイントでハマりやすいです。

本記事が同じように詰まった方の参考になれば嬉しいです!

0
1
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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?