🎉

テスト環境を構築検討していく②【ソース準備&仮想ネットワーク構築】

2024/05/26に公開

背景

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

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

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

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

まずはcodecommitでリポジトリを作成

codecommitでないといけない理由はないです。git lab, git hubなども検討有り。

infra専用のユーザーグループを作成

開発用のユーザーグループしかなかったですが、インフラ専用のユーザーグループを作成し、複数のユーザーグループを付与しました。

aws cliコマンドを利用できるようにする

過去の開発でaws cliを使用していたので、環境はすでに終わっております。
※コマンド実行時に権限エラーが出るので、infraなどのユーザーグループに適切な権限を付与してください。

仮想ネットワークを作成する

yamlファイルで仮想ネットワークを作成するためのシステムを構築していきます。
※セキュリティーリスクのため、構築内容は非公開となります。

yamlファイルを作成後、下記コマンドを実施します。

aws cloudformation create-stack --stack-name Stack名 --template-body ファイル名 --capabilities CAPABILITY_NAMED_IAM

トラブル

問題1

An error occurred (AccessDenied) when calling the CreateStack operation: User: arn:aws:iam::xxxx:user/yyyy is not authorized to perform: cloudformation:CreateStack on resource: arn:aws:cloudformation:ap-northeast-1:zzzz:stack/aaaa/* because no identity-based policy allows the cloudformation:CreateStack action

解決1

IAMのinfraというユーザーグループでcloudformationの権限付与実施

問題2

An error occurred (ValidationError) when calling the CreateStack operation: 1 validation error detected: Value 'aaa_bbb' at 'stackName' failed to satisfy constraint: Member must satisfy regular expression pattern: [a-zA-Z][-a-zA-Z0-9]*

解決2

どうやらスタック名は_などは入れてはいけないそう

問題3

An error occurred (ValidationError) when calling the CreateStack operation: Template format error: unsupported structure.

解決3

--template-bodyのオプションでつけるファイル名は「file://」という先頭文字をつける必要があった。

ちなみにMacのUsersなどであれば、「file:///Users/xxx」と続く必要があった。

実施した結果

{
    "StackId": "arn:aws:cloudformation:リージョン名:IAMUser?:stack/スタック名/何かしらのID"
}

という返却が出て作成がされた。

スタックが作成されたからといって、成功というわけではないとのこと。

確認方法は
①cloudformationを開く
②対象のスタックを開く
③イベントタブをクリックする
④状況の理由より問題を確認する

注意事項

一度スタックが作成された場合、そのスタックを削除しないと同一名称のスタックは作成できないとのこと。

# 削除コマンド
aws cloudformation delete-stack --stack-name スタック名

再度権限を付与して実施した結果

上手くいっていました。

作成がされたか目視で実施していきます。
・VPC
・インターネットゲートウェイ
・publicサブネット
・privateサブネット
・ルートテーブル
・セキュリティーグループ
・Natゲートウェイ

これで仮想ネットワークは一旦作成されたので、後続の作成を引き続き行っていきたいと思います。ご精読ありがとうございました。焦らずコツコツやっていきたいと思います。

Discussion