はじめに
以前、以下のインフラ構成でオリジナルアプリをデプロイしましたが、いくつか改善などをしたく、今回別途インフラ構成をIaCで作成の上、移行をします。(Freenomで別の独自ドメインを取得)
変更点
- スマホの買い替え/MFA関連により、AWSアカウントAのrootアカウントではマネジメントコンソールにログインできない状況になってしまったため、今後は別のAWSアカウントBを利用していきたいと思い、アカウントB側でインフラ構築/アプリデプロイをして、既存データなども移行していく。
- AWSリソースの構成管理を「CloudFormation」から「Terraform」へ変更
別のIaC技術も学習し、違いなどを知るために今回は「Terraform」を利用。また以前、CloudFormationで構築した際のコードはきちんと管理できていなかったので、今回はGithubで管理する。 - コスト削減のため、DBサーバはRDSではなくEC2で構築
- 以前はWeb/APサーバ内の設定は手動で行っていたが、今回WorkサーバをEC2で作成し、そこからAnsibleで設定するようにする
Terraform
上記の【新構成】をTerraformで構築。
https://github.com/unimarist/memory_tank_terraform
「acm.tf」は以下が完了した状態で適用する。
「lb.tf」でALBとHTTP listenerを作成、「route53.tf」でゾーン,Aレコード作成
→Freenomのドメイン設定でAWS側のdns serverを指定するようにする
Ansible
Workサーバ内でAnsibleを実行し、Web/APサーバ、DBサーバの設定を実施。
https://github.com/unimarist/ansible
データ移行
- 旧環境で実施
Web/APサーバからmysqldumpでRDSのdumpファイルを取得
mysqldump -h [RDSのホスト名] -u [DBのusername] -p [DB名] > 出力先ファイルパス.sql
- 新環境で実施
上記で取得したdumpファイルをDBサーバ(EC2)に転送の上、インポートをする。
mysql -u root -p [DB名] < dumpファイル名.sql
まとめ
今回、新構成への移行を優先し、Terraform/Ansibleのベストプラクティスなるものを十分にインプットしきれていないため、時間をとって整理したいと思います。