構成図
パブリックVPC内のEC2のWebサーバーを、
- ALB
- Internet Gateway
- CloudFront
- Route53
で公開する。
事前準備
・パブリックVPC内にEC2を立ちあげ、Webサーバー(Apache/Nginx)を公開する
開発とネットワークの流れ
- Route53・・・ドメイン取得とホストゾーン作成
- ALB・・・ターゲットグループの作成とロードバランサーの作成
- ACM・・・パブリックSSL/TLS認証書の取得・Route53のホストゾーンへ登録
- CloudFront・・・ALBをオリジンとするドメインのCDNを作成
- Auto Scaling・・・EC2/ALBのメトリクスに応じた自動スケーリングを作成・ALBのターゲットへ登録
Route53の設定
- Route53のコンソール画面を開く
https://us-east-1.console.aws.amazon.com/route53/v2/hostedzones#
1.登録済みドメインでドメインを登録を押す - 作成したいドメイン名を検索し、チェックアウトに進むを押して、ドメインを取得する
警告
自動更新をONにすると自動的に年間費用がかかり続けるため、消し忘れに注意
Application Load Balancerの設定
- ロードバランサーのコンソール画面を開く
https://ap-northeast-1.console.aws.amazon.com/ec2/home?region=ap-northeast-1#LoadBalancers:
1.ロードバランサーの作成を押す - Application Load Balancerの作成を押す
- ロードバランサー名を入力する
- アベイラビリティーゾーンを選択する
- セキュリティグループを選択する
- リスナーとルーティングのターゲットグループの作成を押す
- ターゲットグループ名を入力する
- ターゲットを登録でEC2を選択し、保留中として以下を含めるを押す
- ターゲットグループの作成を押す
- ロードバランサーのページに戻り、ロードバランサーの作成を押す
AWS Certificate Manager (ACM)の作成
- バージニア北部でACMコンソール画面を開く
https://us-east-1.console.aws.amazon.com/acm/home?region=us-east-1#/welcome - リクエストを押す
- 次へを押す
- 完全修飾ドメイン名にWebサイトのドメインを入力する
example.com - リクエストを押す
- 作成した証明書をクリックして、Route 53 でレコードを作成を押す
- 先ほど作成したRoute53のドメインを選択して、レコード作成を押す
CloudFrontの作成
- CloudFront コンソール画面を開く
https://us-east-1.console.aws.amazon.com/cloudfront/v4/home?region=ap-northeast-1#/distributions - ディストリビューションを作成を押す
- Origin domainにALBのDNSを入力する
- ディストリビューションを作成を押す
- 作成したディストリビューションを押す
- 編集を押す
- Alternative domain name (CNAMEs) - optionalにドメイン名を入力する
- Custom SSL certificate - optionalで作成したACMを選択する
- 変更を保存を押す
- ビヘイビアのタブを押す
- ビヘイビアを作成を押す
- パスパターンに/*を入れ、キャッシュキーとオリジンリクエストで下記を選択する
- オリジンのタブを押す
- オリジンを選択して、編集を押す
- カスタムヘッダーを追加 - オプションで下記を追加する
Auto Scalingの作成
- Auto Scalingのコンソール画面を開く
https://ap-northeast-1.console.aws.amazon.com/ec2/home?region=ap-northeast-1#AutoScalingGroups: - Auto Scaling グループを作成するを押す
- Auto Scaling グループ名を入力する
MyAutoScaling
- 起動テンプレートを作成するを押す
- 起動テンプレート名を入力する
- 別のタブでEC2のコンソール画面を開き、起動中のEC2のイメージを作成する
- 起動テンプレートのタブに戻り、自分のAMI -> Amazon マシンイメージ (AMI)で作成したイメージを選択する
- インスタンスタイプ、キーペア、セキュリティグループ を選択する
- 高度な設定でIAM インスタンスプロフィールでロールを選択する
- 起動時に実行するスクリプトがあれば、ユーザーデータ - オプション に記載する
Content-Type: multipart/mixed; boundary="//" MIME-Version: 1.0 --// Content-Type: text/cloud-config; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="cloud-config.txt" #cloud-config cloud_final_modules: - [scripts-user, always] --// Content-Type: text/x-shellscript; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="userdata.txt" #!/bin/bash /bin/echo "Hello World" >> /tmp/testfile.txt sudo -u ec2-user -i <<'EOF' cd /var/www/html/myapp /usr/bin/nohup /home/ec2-user/.local/bin/uvicorn main:app --host localhost --port 8000 --workers 5 & EOF
- Auto Scaling グループのタブに戻り、作成した起動テンプレートを選択する
- ネットワークでVPCとサブネットを選択する
- ロードバランシングで既存のロードバランシングにアタッチするを選択し、既存のロードバランサーターゲットグループで先ほどのターゲットグループを選択する
- Elastic Load Balancing のヘルスチェックをオンにするをチェックする
- 希望するキャパシティ、最小の希望する容量、最大の希望する容量を設定する
- 次へを何度か押す
- Auto Scaling グループを作成するを押す