Open11
Laravel + AWS の構築を目指す!
- VPCを作成
- Internet gatewayを作成
- VPCにInternet gatewayをアタッチ
- 作成したvpcにpublicのルートテーブルを作成
- publicのroute tableの設定値
- Destination -> 0.0.0.0/0
- Target -> 作成したInternet gateway
- publicのsubnetを作成
- Subnet name -> {service_name}-dev-public-subnet-a (publicを明示したnameを指定)
- Availability Zone -> ap-northeast-1a
- route tableとpublicのsubnetを紐づける
- VPC > Route tables の指定のroute tableの「subnet associations」の「Edit subnet associations」で設定する
- EC2用のSecurity Groupを作成
- Inbound rules
- Type - HTTP
- Protocol - TCP
- Port range - 80
- Source - 0.0.0.0/0
- Inbound rules
- EC2を作成
- AMI - Amazon Linux 2023 AMI
- instans type - t2.micro
- Network settings > Edit
- VPC
- Subnet
- Auto-assign public IP - Enable
- ここがDisbleになっているとpublic IPが割り振られない
- Firewall > Select existing security groupを選択し、作成したsecurity groupを設定
EC2へssh接続
EC2を作成するときにキーペアを作成していなかったのでインスタンスを再度作成しました。
キーペアについて参考にした記事です。
ダウンロードしたキーペアを~/.ssh/に移動
$ mv ~/Downloads/xxx.pem ~/.ssh/
キーペアの権限を600に設定する
$ chmod 600 ~/.ssh/xxx.pem
EC2起動後にコピーしたpublic IPv4アドレスをIPアドレスに入れコマンドを実行する。
ssh -i ~/.ssh/xxx.pem ec2-user@{IPアドレス}
しかし、ここで接続することができませんでした。
原因は、インターネットからEC2へのポート22がオープンになっていなかったためでした。
EC2に適用させているSecurity Groupに設定を加えます
- EC2 > Security Groups > 該当のSecurity GroupのInbound rolesを編集します。
- Type - ssh
- Protocol - TCP
- Post - 22
- CIDR Block - 0.0.0.0/0
- 全てのパブリックIPv4アドレス(インターネット)
ポートを開くことでssh接続ができました。
EC2にツールをインストールなど
こちらの記事を参考に、
- 必要なツールをインストールの「パッケージをupdateする」から
- DBの設定と作成
を実行しました。
MySQLのインストール時にエラーが発生した。
Error: GPG check FAILED
ので記事に従って、mysql-community-serverをインストールすることが解消されました。
$ sudo rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2023
インスタンスへの接続をssh接続からSession Managerへ変更
ターミナルからのEC2へのssh接続は、pem keyを使用します。keyが漏洩するなどのセキュリティのリスクを考慮しAWSのコンソールのSession Managerから接続する方法に変えます。
- まず、対象のEC2に適応していたkey pairを削除します。
- EC2 > Network & Security > Key pairsにある該当のkey pairを削除。これで漏洩のリスクは無くなりました。
- EC2にsession managerの利用をを許可するPolicyを適用させます。
- roleを作成
- Type - AWS Service
- Service or use case - EC2を選択し、EC2 Role for AWS Systems Managerをチェック
- session managerの利用に必要な、AmazonSSMManagedInstanceCoreが適応されることを確認
- ec2にroleをアタッチ
- EC2 > Instancesで該当のインスタンスを選択
- ボタン「Action」> 「Security」> 「Modify IAM role」こちらで作成した roleを設定します。
- roleを作成
- Session Managerからインスタンスへ接続
- EC2 > Instancesで該当のインスタンスをチェック(起動していること)
- 「Connect」> Connect to instance > Session Manager > Connect
- ターミナルのような画面が表示され接続成功
TODO 構成図を書く
- 今の所までの構成図
- 次に追加したいサービスを含めた構成図
今の所までの構成図
次に追加したいサービスを含めた構成図
- ドメイン取得
- 独自ドメインで公開できるようにする
-
HTTPSに対応させる-> EC2はHTTPに対応していない (HTTPSの対応は次回に) - EIPでIPアドレスを固定する
- Laravelのウェルカムページの表示(Githubから持ってくる)
- EC2インスタンス内のDBにLaravelからデータを登録できるようにする
5/19
- ホストゾーンの作成
- デフォルトでNS, SOAレコードが作成
- CAレコードを追加
- バリュードメインでドメインを取得
- バリュードメインで取得したドメインのネームサーバーを設定
- route53で作成されたNSレコードの値を設定する
- Elastic IP addressを作成
- 作成したEIPをEC2インスタンスに関連づける
- route53にAレコードを追加
- 作成したEIPのpublic IPv4アドレスを設定
ここまででまだAレコードに登録したドメインにアクセスできない。
設定したAレコードのドメイン名が間違っていた。nginxの画面が表示された。
次はSSL証明書の発行から。
- AWS Certificate Managerで証明書の作成
- route53でレコードを追加(証明書の詳細画面に作成ボタンあり)
- 証明書のドメインの値がCNAMEで登録される
次はALBをEC2の前に作成し、HTTPSを実現させる
5/20
一通り目を通したけど情報が多いので、参考記事を探し、それとドキュメントを参考に設定する。
次はALBを設定してみる
5/23
- ターゲットグループ作成
- 起動しているEC2インスタンスをターゲットに設定
- ALB用のセキュリティグループ作成
- inbound
- HTTP 80 0.0.0.0/0
- HTTPS 443 0.0.0.0/0
- outbound
- All traffic 0.0.0.0/0
- inbound
- ロードバランサー作成
次は、ロードバランサー経由でEC2のnginx画面を表示させる
参考にする