🐈

テスト環境を構築検討していく③【踏み台サーバ作成】

2024/05/28に公開

こんにちは投資ロウトです。

背景

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

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

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

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

踏み台サーバー作成

こちらもcloudformationでEC2でpublicサブネットに作成していきますが、踏み台サーバーを作成する前に、事前にキーペアが必要なので、事前に作成していきます。

キーペアの作成

①EC2でキーペアの画面に遷移

②キーペアを作成をクリックする

③名前を記載して、作成をクリックする

④ローカルにフォルダを作成

※すでに過去.sshフォルダを作成している前提

ダウンロードした.pemを.sshに配置する

mv ダウンロードしたファイル場所 ~/.ssh/キーペアのファイル名.pem

キーペアを作成したのでcloudformationで作成していく

【注意したこと】
踏み台サーバーはsshでアクセスするだけなので、コストを抑えること。

具体的には「AWS::EC2::Instance」のBlockDeviceMappingsのプロパティで、EbsのプロパティのVolumeSizeを8に設定や、VolumeTypeをgp2にしました。

【AMI ID】
検索方法について
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/usingsharedamis-finding.html

なんやかんやで、作成に成功したようです。

踏み台サーバーへアクセスする

ssh -i ~/.ssh/キーペアのファイル user名@ポート番号

アクセス成功

便利だったこと

cloudformationでOutputsにexportとして定義することで、他のyamlファイルでimportしてパラメータが作成でき、構築が便利になりました。

また以下のcloudformationのエクスポートからそのエクスポートされた項目が使用できるようになります。

※ただSSMパラメータを利用した方法もあるらしいです。

■ AWS Systems Manager Parameter Store を使用して CloudFormation スタック間で値を共有する | AWS re:Post
https://repost.aws/ja/knowledge-center/cloudformation-systems-manager-parameter

便利なサイト

awsのcloudformationで使用するもののパラメータ等を解説したサイトがありました。

[*] AWS リソースおよびプロパティタイプのリファレンス
https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-template-resource-type-ref.html

その他補足事項

EC2のインスタンスで、「停止」&「開始」と「再起動」で挙動が違うのは、初めて知りました。「停止」&「開始」は仮想サーバーが入れ替わるが、「再起動」の場合はそのままとのことでした。

その際に以下のような違いがあるとのことです。
例)
AWSのハードウェアにトラブルが発生した。
→「停止」&「開始」による仮想サーバーの入れ替え操作にて、ハードウェア等が起因のエラーだった場合は解決されるとのことでした。

その他利用できるサービスについて

  • AWS Elastic Beanstalk

AWS Elastic Beanstalk・・・AWS クラウド上のアプリケーションにおける迅速なデプロイ・管理が可能となるサービスで、リソースのプロビジョニング、ロードバランシング、Auto Scaling、モニタリングなどの自動的な処理が可能。

  • AWS App Runner

AWS App Runner・・・API サービスなどの Web アプリケーションを AWS クラウド環境で実行するためのお手軽な方法となり、既存のコンテナイメージやソースコードを、AWS クラウド上で動作するコンテナ化された Web アプリケーションとして実行できる。

  • AWS Lambda

AWS Lambda・・・イベント発生時にお客様のコードを実行する、サーバーレスコンピューティングサービスで、Amazon API Gateway を使用し、Lambda 関数の HTTP エンドポイントを持つ Web API を作成できる。

Discussion