【Amazon Linux 2023対応】EC2踏み台サーバー構築とMySQL接続備忘録

## はじめに
対応した案件で、踏み台サーバーとして使用していたEC2インスタンスのOS更新が必要になったため、新たに構築し直すことになりました。

本記事では、その際の構築手順や注意点を備忘録としてまとめています。
同様の構成を検討している方の参考になれば幸いです！

### 踏み台サーバーとは
インターネットから直接アクセスできないプライベートなクラウド環境にあるリソース（例：RDS for MySQL）へ接続するには、中継用のサーバーが必要です。
この中継サーバーのことを「踏み台サーバー（Bastion Host）」と呼ばれ、外部からのアクセスをこのサーバーに限定し、そこから内部ネットワークへ接続する構成が一般的です。

今回は、Amazon EC2 インスタンスを踏み台サーバーとして利用し、**AWS Systems Manager（SSM） のセッションマネージャー**を使って接続する方法を紹介しています

AWS公式ドキュメントにも詳細な説明がありますので、あわせて参考にしてみてください。
- [Access a bastion host by using Session Manager and Amazon EC2 Instance Connect](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/access-a-bastion-host-by-using-session-manager-and-amazon-ec2-instance-connect.html)

## 構成図
![EC2-DBアーキ概要.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3843904/d4ea0dd9-edde-43d7-9d79-7ddcd6606d6f.png)

## 構築手順
1. IAMロール作成
    - `AmazonSSMManagedInstanceCore`ポリシーを含む踏み台サーバー用のロールを作成する
        - [上記のロールの作成手順について](https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/setup-instance-permissions.html)
1. 新規でEC2インスタンスを作成
    - 新しいOSイメージを選択
    - インスタンスタイプ（サーバーの規模で選定する）
    - キーペア（新規作成）
    - ネットワーク
        - VPC（踏み台サーバー用のVPCを作成する）
        - サブネット（プライベートサブネットを選択）
        - セキュリティグループ
            - インバウンド（特に設定なし）
            - アウトバウンド（すべてのポート）
    - IAMロール（作成した踏み台サーバー用のロールを選択）
![pasted-2025.03.05-10.31.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3843904/31cdeff6-d061-4a79-9da2-3b2197d1f35c.png)
![pasted-2025.03.05-10.31.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3843904/b8220be9-b0d7-447b-ae72-1456a041b20d.png)
![pasted-2025.03.05-10.31.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3843904/64eed0d1-fc63-452b-80a6-15d427c0155e.png)


1. 作成したEC2インスタンスに接続
    - SSMのセッションマネージャーを使用する
1. EC2サーバー上でMySQLクライアントをインストール
    - `sudo dnf -y install mariadb105`コマンドを実行（MySQLと互換性があるため）
    - `mysql --version`コマンドでインストールされているか確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3843904/fa0e7921-7b11-483f-a424-cb483e65e2ef.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3843904/ed8b10db-fcd0-4b72-88a7-4cac950ad4fc.png)

1. MySQLデータベースに接続
    - `mysql -h ホスト名 -u ユーザー名 -p -D データベース名`コマンドを実行
    - パスワードを打つとMySQLに接続できる
![スクリーンショット 2025-04-08 18.56.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3843904/05e86100-ea45-41d4-be35-9d62abb0d0b0.png)

## 困ったこと
実際の構築時にSSMセッションマネージャーがうまく動かず焦りましたが、EC2インスタンスのステータスチェックが完了していなかったのが原因だったと思われます。
接続エラーの原因となることがあるため、EC2インスタンスのステータスチェックが完了しているかを忘れずに、確認するようにしましょう。

## なぜMariaDBを使用したのか
OSの更新により、Amazon Linux 2023 を使うことになりましたが、MySQLのインストールがうまくいかず代替としてMariaDBをインストールしました。

具体的には、MySQL公式リポジトリ（`mysql-community-release`）を使ってyumインストールを試みましたが、Amazon Linux 2023 では非対応で失敗しました。

そのため、MySQLと互換性のあるMariaDBを使用することで対応しました。

参考：[Amazon Linux 2023 へ MySQL をインストールしてログインする（クラスメソッド）](https://dev.classmethod.jp/articles/Install-mysql-on-al2023-and-login/)

## まとめ
今回の構築を通じて、SSMセッションマネージャーの活用方法や、セキュリティを意識した踏み台サーバーの運用を学ぶことができました。

それ以前はSSH接続を使用していましたが、SSMによって鍵管理やポート開放が不要になり、運用負担が軽減される点が非常に便利だと感じました。

また、EC2インスタンスの構築からデータベース接続までを一通り体験できたことで、インフラ構成全体の理解も深まりました。