😊

テスト環境を構築検討していく⑦【Aurora MySQLの作成】

2024/06/05に公開

背景

ある程度NestJSでAPIの作成も進んできたので、Postmanによる単体テストではなく、アプリからのAPI呼び出しで動作を確認していきたいという思いも進めていくと出てくると思います。

ただなるべくコストを抑えていきたいため、本番環境よりもコストを抑えた類似環境でテスト環境を構築していきます。
※ECSなどはリソースだけで費用がかかるので、EC2などのインスタンスを止めながら開発コストを抑えたい。

https://zenn.dev/doshirote/articles/577d8bb31a152b

そのため本番環境を簡易で構築し、テストを行う環境を整備していきます。

Aurora MySQL3の作成

テンプレートを作成し、作成を実施。

問題1

Properties validation failed for resource DBAuroraSubnetGroup with message: #/SubnetIds: expected type: JSONArray, found: String

解答1

問題なのは、SubnetIdsが配列型を求めていたのにも関わらず文字列型で渡してしまったせいでした。「-」をつけることで配列型に置き換えることができました。

# 以下が失敗例
DBAuroraSubnetGroup:
    Type: "AWS::RDS::DBSubnetGroup"
    Properties:
      DBSubnetGroupDescription: "Aurora DB Subnet Group"
      SubnetIds: !ImportValue PrivateSubnetId
# 正しくは以下に修正する必要がありました。
DBAuroraSubnetGroup:
    Type: "AWS::RDS::DBSubnetGroup"
    Properties:
      DBSubnetGroupDescription: "Aurora DB Subnet Group"
      SubnetIds: 
        - !ImportValue PrivateSubnetId

問題2

DB Subnet Group doesn't meet availability zone coverage requirement. Please add subnets to cover at least 2 availability zones.

解答2

ロードバランサーに引き続きDBも各DBサブネットグループに、少なくとも2つのアベイラビリティーゾーンのサブネットが含まれている必要があるとのことです。

そのため、Aurora MySQLはもう一つ別のアベイラビリティーゾーンにprivateサブネットを設置する必要があるので、再度そちらを作り替えたいと思います。

問題3

Resource handler returned message: "The source cluster could not be found or cannot be accessed: クラスター名 (Service: Rds, Status Code: 404, Request ID: aaaaa214-bbbb-cccc-dddd-eeeeffff50fd)" (RequestToken: aaaa322a-bbbb-cccc-eeee-ffff160gggg, HandlerErrorCode: NotFound)

解答3

AWS::RDS::DBClusterが作成される前に、AWS::RDS::DBInstanceが作成しようとされるのが原因。DependsOnをつけて依存関係をつけることで対応。

以上の事を対応した上で、Aurora MySQLの作成が成功しました。Aurora MySQLの作成がスタックを実施してから8分〜10分ほど成功するまでに時間がかかったので、そちらは注意してください。

引き続き構築作業を実施していきます。

テスト環境構築についてのコスト削減について

【停止などをしてコスト削減可能】
・踏み台サーバー(EC2)
・webサーバー(EC2)
・Aurora MySQL3(クラスターのみ停止可能)
※Aurora MySQLは連続7日間停止ののちに自動起動されるので注意。(その代わりメンテナンス更新は遅れない)

(理由)
停止操作により、インスタンスにかかる料金を抑制可能。

(停止してもかかる料金もある)
アタッチされたEBSボリュームのストレージコストは発生するため。

https://aws.amazon.com/jp/ebs/pricing/

【停止などでコスト削減不可能なもの】
・VPC
・ルートテーブル
・NATゲートウェイ
・publicサブネット
・privateサブネット
・ALB

(理由)
上記のリソースは停止という状態を持たないため、当該操作によるコスト抑制はできない。

繰り返し出るが、cloudformationのかんぺ

https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-template-resource-type-ref.html

Discussion