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
  • 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を作成するときにキーペアを作成していなかったのでインスタンスを再度作成しました。

キーペアについて参考にした記事です。
https://entreprogrammer.jp/aws-ec2-keypair/

ダウンロードしたキーペアを~/.ssh/に移動

$ mv ~/Downloads/xxx.pem ~/.ssh/

キーペアの権限を600に設定する

$ chmod 600 ~/.ssh/xxx.pem

EC2起動後にコピーしたpublic IPv4アドレスをIPアドレスに入れコマンドを実行する。

ssh -i ~/.ssh/xxx.pem ec2-user@{IPアドレス}

しかし、ここで接続することができませんでした。

https://repost.aws/ja/knowledge-center/ec2-linux-resolve-ssh-connection-errors

原因は、インターネットから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にツールをインストールなど

https://qiita.com/me-654393/items/504acfbb766eddbf1046#パッケージをupdateする

こちらの記事を参考に、

  1. 必要なツールをインストールの「パッケージをupdateする」から
  2. 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から接続する方法に変えます。

  1. まず、対象のEC2に適応していたkey pairを削除します。
    • EC2 > Network & Security > Key pairsにある該当のkey pairを削除。これで漏洩のリスクは無くなりました。
  2. EC2にsession managerの利用をを許可するPolicyを適用させます。
    1. roleを作成
      • Type - AWS Service
      • Service or use case - EC2を選択し、EC2 Role for AWS Systems Managerをチェック
        • session managerの利用に必要な、AmazonSSMManagedInstanceCoreが適応されることを確認
    2. ec2にroleをアタッチ
      1. EC2 > Instancesで該当のインスタンスを選択
      2. ボタン「Action」> 「Security」> 「Modify IAM role」こちらで作成した roleを設定します。
  3. Session Managerからインスタンスへ接続
    1. EC2 > Instancesで該当のインスタンスをチェック(起動していること)
    2. 「Connect」> Connect to instance > Session Manager > Connect
    3. ターミナルのような画面が表示され接続成功
りゅうたろうりゅうたろう

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を実現させる