【AWS】ECSで作ったDocker（Laravel）プロジェクトをRoute53、ALB、ACM、お名前ドットコムを使ってHTTPS化してみた

皆さんこんにちは！

今回はDockerで作ったLaravelプロジェクトをRoute53とALB（ApplicationLoadBalancer）とACM（AmazonCertificateManager）を使ってHTTPS化してみたいと思います！

#前提条件#

・既にDockerで作ったコンテナをECSで作成していること
・お名前ドットコムでドメインを登録していること

##補足##

DockerをまだECSで作成していない方は以下の記事をご覧ください。

[【AWS】AWS超初心者が、頑張ってDockerで作ったLaravelプロジェクトをECR、ECS、EC2を使ってAWS上で動かしてみた](https://qiita.com/akki-memo/items/c743fca8088ccdcce300)

また、お名前ドットコムでドメインを登録していない方は登録してから本記事をご覧ください。（お名前ドットコムでない場合も可ですが、その場合説明が異なる部分があると思うのでご了承ください）

##リッスンポート##

```nginx/default.conf
server {
    listen 80;
    root /work/laravel/public;
    index index.php;
    charset utf-8;
    error_log /var/log/nginx/error_test.log;

    location / {
        root /work/laravel/public;
        try_files $uri $uri/ /index.php$is_args$args;
    }

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass app:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }
}
```

``nginx``のコンテナでは``listen 80;``としているように、80番のポートをリッスンしています。

ここが``443``になっている場合は適時変えて頂くか、上記のように``listen 80;``としてください。

#参考記事#

本記事を書くにあたって下記の記事を参考させて頂きました。

[AWSでWebサイトをHTTPS化 その1：ELB(+ACM発行証明書)→EC2編](https://recipe.kc-cloud.jp/archives/11084)

僕が説明不十分なところもあるので、分からない点がある場合はこちらの記事を見て頂くとよいかと。

それでは早速説明していきます！！

#ACMでSSL証明書の発行#

まず初めにHTTPS化するには、SSL証明書の発行を行います。

AWSはこのSSL証明書の発行が無料となっております。（AWS神）

サービス検索欄で「CertificateManager」を入力しましょう。

1. 「証明書のリクエスト」をクリック
2. 「パブリック証明書のリクエスト」を選択
3. ドメイン名を入力（この後Route53で登録するドメインを入力。現段階ではRoute53にECS用のドメインを登録していないので、お好きなドメインをご入力ください。以下、説明用としてここで入力したドメイン名を``www.example.com``とします。）
4. 「DNSの検証」を選択
5. タグは登録してもしなくてもどちらでもいいです
6. 「確定とリクエスト」をクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/954754/1b61ec70-9417-49f0-a285-869c8bfc4ca0.png)

すると画像のように名前や値が表示されます。

これをお名前ドットコムで登録します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/954754/1323f840-9443-2a96-f9b6-9580115f85bd.png)


「ドメインのDNS設定」から「DNSレコード設定を利用する」をクリック

![無題.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/954754/0193a503-5319-8a20-2def-bfd0cc296832.png)

そして画像のように先ほどCertificateManagerで発行した名前（ホスト名）と値（VALUE）を登録します。（画像のホスト名や値は適当です）

そしてAWSに戻ってRoute53で先ほどCertificateManagerで登録したドメイン名のホストゾーンを作成します。例で言うと``www.example.com``と言う名前で登録します。

<font color="red">※注意</font> 既にホストゾーンを作成している場合は、新たにホストゾーンを作成しないでください。後ほど、既に作成してあるホストゾーンで先ほど作成したドメイン名をレコード名として作成してください。

そしたら、作成したホストゾーンの「レコードを作成」をクリック。

タイプを「CNAME」にしてお名前ドットコムで登録したときと同じように名前と値を入れて下さい。

CertificateManagerに戻り、「状況」が「発行済み」になればOK！（時間がかかる場合があります）

#ALBでHTTPS登録#

サービス検索欄で「ECS」と検索し、左のメニュー欄の「ロードバランシング」にある「ロードバランサー」をクリック。

「ロードバランサーの作成」をクリック。

1. 「Application Load Balancer（HTTP、HTTPS）」を選択
2. 手順１：名前を入力し、「ロードバランサーのプロトコル」を**HTTPS**にする（ポート番号が443になる）。「アベイラビリティーゾーン」の「VPC」はECSインスタンスで使用しているVPCを選択。「アベイラビリティーゾーン」にいくつかの候補が出るのですべてにチェック
3. 手順２：「証明書タイプ」で「ACMから証明書を選択する」にチェック。「証明書の名前」で先ほど作成した証明書を選択
4. 手順３：「新しいセキュリティグループを作成する」にチェック。適当にグループ名を入力し、「タイプ」を「HTTPS」にする
5. 手順４：名前を適当に入力し、プロトコルは「HTTP」を選択
6. 手順５：利用するインスタンスを選択し「登録済みに追加」をクリック
7. 手順６：「作成」をクリック

無事作成されればOK!

#EC2インスタンスのセキュリティ登録#

これで最後になるので、あともう一息頑張りましょう！

サービス検索欄で「EC2」と検索。

左のメニューの「インスタンス」の「インスタンス」をクリック。

利用するインスタンスの「インスタンスID」をクリック。

![無題.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/954754/5fab93c9-0662-4ba6-15a3-ea94b789300d.png)

下にある「セキュリティ」タブから「セキュリティグループ」をクリック。

下の「インバウンドルール」から「インバウンドルールを編集」をクリック。

「タイプ」は「HTTP」、「ソース」は先ほど作成したALBのグループ名を選択。

「ルールを保存」をクリック。

これで、独自ドメインかつHTTPS化されたサイトにアクセスすることができます。

例で言うと[https://www.example.com](https://www.example.com)にアクセスするとDockerで作ったLaravelのサイトが開くようになります。

いかがだったでしょうか？？

少し説明不足のところもあると思うので、何かご不明な点があれば遠慮せずにコメント欄にてお申し付けください。

以上、「【AWS】ECSで作ったDocker（Laravel）プロジェクトをRoute53、ALB、ACM、お名前ドットコムを使ってHTTPS化してみた」でした！

良ければ、LGTM、コメントお願いします。

また、何か間違っていることがあればご指摘頂けると幸いです。

他にも初心者さん向けに記事を投稿しているので、時間があれば他の記事も見て下さい！！

あと、最近「ココナラ」で環境構築のお手伝いをするサービスを始めました。

気になる方はぜひ一度ご相談ください！

Thank you for reading