はじめに
この記事はLaravelでwebサービスを公開するときに調べたものをまとめた記事になります。
ローカルのDockerでnginx, PHP, MySQLコンテナを作成したものをAWS上にデプロイしました。
利用サービスについてはすべて無料枠での利用です。
EC2
【ざっくりとした流れ】
- VPC/サブネットを作る
- インターネットゲートウェイを作る
- EC2(サーバー)を立てる
- ルーティングとセキュリティグループを設定
- SSHでEC2にアクセスする
VPCはAWSの中に作成するため、作成しただけではインターネットに接続できない。
インターネットに接続させるために作成したVPCとインターネットゲートウェイを紐付ける必要がある。
インターネットゲートウェイを作成後、画面上部のアクション
ボタンからVPCにアタッチ
を選択
その後、対象となるVPCを選択する。
AMIの選択
作成するインスタンスのマシンイメージを選択
どういうサーバーを起動するか
※今回はAmazon Linux 2 AMI(HVM)を選択
インスタタンスタイプの選択
サーバーのスペックを選択する
スペックが高くなるほど料金も高くなる
※今回はt2.miroを選択
AWSではスペックの可変が楽なため、スモールスタートができる。
必要に応じてスペックを上げていく。
インスタンスの詳細の設定
今回は基本的なインスタンスの作成のため特に変更点はなし
ネットワーク
を作成したVPCを選択
グローバルIPアドレスを割り当てるため自動割り当てパブリックIP
を有効
タグの追加
設定しなくても問題はないが、複数サーバーを立ち上げる際などネーミングをしておくことによって管理がしやすくなる。
セキュリティグループの設定
どのポートの通信を許可するかを設定する。
セキュリティグループ名に任意の名前を入力する。
今回は80(http)
22(ssh)
の2つをルールに追加
ソースを0.0.0.0/0
に設定するとすべてのIPアドレスからインスタンスへのアクセスが許可される。
キーペアの作成
EC2にsshでアクセスするときにキーペアが必要となる。公開鍵と秘密鍵みたいなもの。
新しいキーペアの作成
を選択後、キーペア名
を入力する。
キーペアのダウンロード
ボタンを押しローカルの任意場所に保存する。
※ssh接続するときにこのキーのパスを入力するため覚えておく
インスタンス作成
を押すとインスタンスが作成される
ルーティングの設定
VPCからルートテーブルを選択。
ルートテーブルの作成
から新たにルートテーブルを作成し、作成したVPCを選択する。
ルートの編集
からルートを追加し、ターゲット
を作成したインターネットゲートウェイを選択する。
通信を行うときに設定したインターネットゲートウェイをめがけて通信することでインターネットに接続できる。
サブネットの関連付けの編集
から作成したルートテーブルのルートをどのサブネットに適応させるかを選択する。
sshでEC2にアクセス
ssh -i [ダウンロードしたキーペア] ec2-user@[IPv4パブリックIP]
[ダウンロードしたキーペア]:ダウンロードしたキーペアの絶対パス
[IPv4パブリックIP]:対象インスタンスの説明
に記載されているIPv4パブリックIP
Amazon Linuxのsshのデフォルトで接続するユーザーがec2-user
接続成功!
参考記事
AWSでのEC2構築
【AWS 入門】EC2とDockerでHello Worldしよう
ポートとは?
RDS
【ざっくりとした流れ】
- DB用のサブネットグループ作成
- セキュリティグループの設定
- DB(MySQL)構築
- LaravelのDB設定変更
DB用サブネットグループ作成
RDSでDBサーバを構築するときに、インスタンスを所属させるためのサブネットグループというものを用意する必要がある。
各 DB サブネットグループには、特定の AWS リージョン内の少なくとも 2 つのアベイラビリティーゾーンにサブネットが必要です。VPC に DB インスタンスを作成するときに、DB サブネットグループを選択する必要があります。
セキュリティグループの設定
EC2からRDSへ接続するために通信許可の設定を行う。
上記で設定した80番ポート
と22番ポート
に加え、3306(MySQL)番ポート
も追加することでEC2からRDSへ接続が可能となる。
DB構築
- エンジン選択
- DB詳細の指定
マスターユーザー名とマスターパスワードはDB接続の際に必要 - [詳細設定]の設定
VPC
インスタンスが作られるVPC
サブネットグループ
上記で作成したサブネットグループ
データベースの名前
任意データベース名※DB接続で必要
LaravelのDB接続設定
Laravelアプリケーションの.env
に下記を設定
項目 | 設定値 | 説明 |
---|---|---|
DB_HOST | 作成した[データベース]のRDSのエンドポイント | 作成したRDSインスタンスの詳細ページで確認する。 |
DB_DATABASE | データベース名 | 自分で設定したデータベース名 |
DB_USERNAME | ユーザー名 | 自分で設定したDBマスターユーザ名 |
DB_PASSWORS | 作成した[データベース]のマスターパスワード | 自分で設定したDBマスターパスワード |
設定完了後php artisan migrate
実行
参考記事
RDS作成(無料枠)
AWSでウェブアプリケーション環境構築:②RDSでDBを作成し、Laravelサンプルアプリを動かす最小構成を構築
S3
【ざっくりとした流れ】
- S3用のIAMを作成
- Bucketの作成
- LaravelからS3利用
S3用のIAM作成
ユーザー追加画面からユーザー名を入力し、プログラムによるアクセス
を選択。
既存のポリシーを直接アタッチ
タブからS3
を検索し、AmazonS3FullAccess
にチェックを入れて作成。
作成後アクセスキーID
とシークレットアクセスキー
が表示される。
ストレージ接続時に必要。
Bucket作成
バケットを作成する
から新規バケットを作成
バケット名とリージョンを選択
オプションは一旦すべてオフ
アクセス権限については作成後に設定
LaravelからS3利用
S3用のパッケージをインストール
composer require league/flysystem-aws-s3-v3
.envに下記情報を記載
AWS_ACCESS_KEY_ID= ユーザーを作成した際に表示されたアクセスキーID
AWS_SECRET_ACCESS_KEY= 上記手順でユーザーを作成した際に表示されたシークレットアクセスキー
AWS_DEFAULT_REGION= ap-northeast-1 (東京リージョンで作成したため)
AWS_BUCKET= 作成したbucket名