いい加減AWSをやっていく記事
今回は、サインアップ〜Elastic Beanstalkを使ってみよう、まで
思ったより書くことが多いので、記事を分割する
用意するものと前提知識
- クレジットカード(一年は無料の範囲で遊べる)
- 住所と電話番号
- AWS の簡単な知識(EC2とは、S3とは程度)
- レンタルサーバーでデプロイした経験と、たくさんの時間
サインアップ
ここに大体書いてある
以下リンクより、「無料アカウントを作成」を選択する
https://aws.amazon.com/jp/free/
- メールアドレスと、アカウント名を登録する
- メールアドレスに検証コードが届いているので、それを入力
- [step1] root ユーザーのパスワードを登録する
- [step2] AWSの利用用途と連絡先を選択する
- AWSの無料枠は、会社ごとらしいので複垢に注意
- 住所は英語で入力する
- [step3] クレジットカード情報を登録する
- [step4] 電話かSMSで本人確認をする
- この時の番号は、step2の連絡先とは別のものが指定可能
- [step5] サポートプランを登録する
- ベーシックでよくないか?
わーい簡単に作れた!
AWS にはリージョンという考え方があり、それぞれに別の環境が用意できる
もし「東京」や「大阪」になっていないなら右上の赤丸から変えよう
この記事では ap-northeast-1
東京を前提に進める
最低限の用語
-
EC2
- サーバー
- Linux とか Ubuntu とかだと思えばOK
-
RDS
- データベース mysql / PostgreSQL 色々対応している
- AWS では、データベース用のサーバーを別に立てる
- スナップショットが撮れたりとても便利
-
S3
- ファイルサーバー
- Google Drive みたいなもの
- AWS にて、ファイルはここに保管する
-
CloudWatch
- ロガーサービス
- AWS 全てのログはここに集約させるイメージ
-
IAM
- AWS を利用するアカウント
- AWS は権限がとても細かく分かれている
- 用途ごとに必要最低限の権限を付与して利用する
- アプリケーションも、このIAMを利用してAWSの機能にアクセスする
環境の立ち上げ
Amazon Elastic Beanstalk
というものを使用する
これはサーバー環境とファイルを自動的に管理してくれるもの
公式チュートリアルもあるのだが、時代がだいぶ変わったみたいでそのままでは動かない...
備忘録をかねて手順を記載する
1. EC2 ロールの作成
まず、EC2 を運用するための権限を作成する
IAM
というサービスから「ロール」のページを開き、「ロールを作成」を選択する
「EC2」のロールを作成する
どの権限を付与するか聞かれるので、以下の三つの権限を検索して付与する
付与にはチェックボックスを選択する
- AWSElasticBeanstalkWebTier
- AWSElasticBeanstalkWorkerTier
- AWSElasticBeanstalkMulticontainerDocker
権限の名前は aws-ec2-service-role
にしてみる
できた!
2. EC2 のキーペアを作成する
SSH 用の鍵を先に生成する
本来 AWS は、インスタンスにアクセスしないように設定するのが正攻法らしいが、
今回は実験なので SSH アクセスできるようにしておく
EC2
から「キーペア」のページを開き、「キーペアを作成」を選択する
鍵の名前は macbook-aws
にした 安直
タイプは安全性を考え ED25519
が良いかと
鍵の形式は、windows なら ppk
がおすすめだが、まぁどっちでも大丈夫だと思う
鍵がダウンロードされた
SSH
接続する際に使用するので、大切に保管しておこう
3. Elastic Beanstalk の環境を作成する
この機能を使って環境を作ると、サーバー自体の更新やデプロイが自動的にできる!
スケーリングも可能!
その代わり、あらかじめ用意されたプリセットしか使用できないみたい
(CloudFormation
ってやつの簡単版)
EB は、一つのアプリケーションに複数の環境が設定できる
(環境:本番、ステージング、テスト)
EB
から「環境」のページを開き、「環境を作成」を選択する
[STEP1] 環境を設定
まずは環境設定をするみたい
laravel-aws
という名前で作ってみる
プラットフォーム
にて、使用したい環境を設定する
ここを マネージドプラットフォーム
にする
例えば PHP だと以下の環境から選ぶ形となる
用意されているものしか使用できないが、逆に言うと用意されていたらそのまま利用できる
アプリケーションコード
は、まずは サンプルアプリケーション
とする
[STEP2] サービスアクセスの設定
AWSを操作する際のロールを設定する
サービスロール
はまだ作成していないので、自動生成させる
次回からは生成したものを利用すれば良い
EC2キーペア
には先ほど作成した macbook-aws
を指定
ただこの鍵、ここで指定すると Port22 が 0.0.0.0/0
で解放されるらしいので要注意
EC2インスタンスプロファイル
には先ほど作成した aws-ec2-service-role
を指定
[STEP3] ネットワーキング、データベース、およびタグをセットアップ
サーバーの周辺環境を設定する
VPC
は、環境をAWS内の仮想的なネットワークに閉じ込めることで、さらに安全に運用するものみたい
データベース
は使うDBを設定する
今回は postgres
を選択した
無料で使用可能なインスタンスは db.t3.micro
db.t4g.micro
、ストレージは 20GB
まで
t3
はintel CPU、t4g
は arm CPU らしい
そして データベース削除ポリシー
ここが重要みたいで、削除を選択すると、EB環境を消したら連動してデータも消えてしまう
スナップショットか保持、好きな方を選択しよう(なお消し忘れに注意)
[STEP4] インスタンスのトラフィックとスケーリングを設定
サーバー自体の設定をする
ルートボリューム
は、サーバーのメインディスクの容量
AWS は基本的に EC2 には何も書き込まないように使うので、デフォルト 8GB
で十分かと
RDS や S3、CloudWatch を利用しよう
EC2 に書き込むデータは消えるものとして考える
容量
がインスタンスやスケーリングの設定
AWS の推奨設定が変わったのか「スポットインスタンス」にしないとサーバー起動しない
罠 多分この通知がそれを言ってる
5. 更新、モニタリング、ログ記録を設定
その他の設定
マネージドとかローリングとかあるが、要するに自動デプロイの設定
OSのアプデとかも空き時間を使って勝手にやってくれるんだって
今は1インスタンスしかないので、特に意味のない設定
プラットフォームソフトウェア
が http サーバーの設定
Apache と Nginx で選べるが、素直に Nginx
にしておこう
あと Eメール通知
だけちゃんと設定した
[STEP5] レビュー
最終確認ページ
まぁ間違ってても後で直せるからせーふ
起動中...
ほんとに時間がかかるのでお茶でも飲んで待つ
イベントタグでも眺めておこう
起動に成功したら、「ドメイン」のURLをクリック!
もしうまくいかなかったら「イベント」タブにエラーが出ていないか確認すると良い
やったーここまで長かった......
参考サイト
参考サイト:
- Laravel + AWS Elastic Beanstalkの環境構築
- 【初心者向け】AWSのキーペアタイプとプライベートキーファイル形式について | DevelopersIO
- flask - The instance profile associated with the environment does not exist - Stack Overflow
- Elastic BeanstalkでWeb環境を作成し、アプリケーションをデプロイしてみる | DevelopersIO
- Creating an Elastic Beanstalk without success | AWS re:Post