Mobingi Advent Calendar 2018 18日目の記事です。

前回の記事では Mobingi ALM の基本的な使い方をご紹介しましたが、今回は少し脱線して、Mobingi ALM で構築したアプリケーションをHTTPS化する方法をご紹介します。
AWSが提供する SSL/TLS証明書の管理ツールである AWS Certificate Manager と、無料で独自ドメインが取得できるサービス Freenom を使えば、お手軽にHTTPS環境を手に入れることができます。

必要なサービス、アカウント

  • Mobingi ALM
  • Freenom
  •  AWS
    • AWS Certificate Manager
    • Amazon Route53
    • EC2(ロードバランサ、インスタンス)

目次

  1. アプリケーションの構築
  2. 独自ドメインの取得とDNSの設定
  3. SSL証明書の発行
  4. SSL証明書をELBにデプロイ
  5. DNSレコードの追加

1. アプリケーションの構築

AWS上にシンプルなWebアプリケーションを構築します。
Mobingi ALM を使えば、VPC、サブネット、インスタンス、ロードバランサなどWebアプリケーションに必要な機能を一括で用意することができるので、ここでは ALM を使って環境を構築していきます。

ALM のアカウント作成や基本的な使い方については アカウント作成からアプリケーション構築まで!Mobingi ALM入門 の記事をご参照ください。ここでは、ユーザーの作成、AWSの認証設定が完了しており、スタックが作成できる状態から開始します。

ALM のトップページ左メニューより「スタックの作成」をクリックし、タブの「Json Editor」をクリックします。

以下のJSONデータから「your-credential-name-here」をご自身のクレデンシャルに書き換えてから、コピーしてEdidorに貼り付けます。

{
    "version": "2017-03-03",
    "label": "example template version label #1",
    "description": "Mobingi ALM Stack.",
    "vendor": {
        "aws": {
            "cred": "your-credential-name-here",
            "region": "us-east-1"
        }
    },
    "configurations": [
        {
            "role": "web",
            "flag": "PHPApp",
            "provision": {
                "instance_type": "t2.micro",
                "availability_zone": "us-east-1a",
                "auto_scaling": {
                    "min": 1,
                    "max": 2,
                    "spot_min": 1,
                    "spot_max": 2,
                    "spot_range": 50,
                    "availability_zones": "us-east-1a",
                    "cooldown": "360",
                    "healthcheck_grace_period": "360"
                },
                "keypair": true,
                "instance_count": null,
                "load_balancer": {
                    "scheme": "internet-facing",
                    "listeners": [
                        {
                            "load_balancer_port": "443",
                            "instance_port": "80",
                            "protocol": "HTTP"
                        }
                    ],
                    "health_check": {
                        "healthy_threshold": "2",
                        "interval": "10",
                        "target": "TCP:80",
                        "timeout": "5",
                        "unhealthy_threshold": "10"
                    }
                },
                "subnet": {
                    "cidr": "10.0.1.0/24",
                    "public": true,
                    "auto_assign_public_ip": true
                }
            },
            "container": {
                "container_image": "mobingi/ubuntu-apache2-php7:7.2",
                "container_code_dir": "/var/www/html",
                "container_ports": [
                    80
                ],
                "container_git_repo": "https://github.com/mobingilabs/default-site-php.git",
                "container_git_reference": "master"
            }
        }
    ]
}

 

ALM経由でAWS上にデプロイする内容を解説します。

  • PHP製のWebアプリケーション(https://github.com/mobingilabs/default-site-php)を 米国東部(バージニア北部)リージョンにデプロイします。
  • AWS Certificate Manager で発行したSSL証明書を ELB にデプロイすることでHTTPSでアクセス可能となります。なので ELB の設定を付与しています。
  • 無駄にオートスケールの設定をしています。
  • インスタンスの50%をスポットインスタンスで運用する設定をしています。こちらはスポットインスタンスをダウンタイムなしで利用することが可能なので、コストを節約することが可能です。Mobingi ALM 便利!

「スタックをデプロイ」をクリックし、Webアプリケーションが起動するまでしばらく(約5分)待ちます。

トップページ左メニューから「スタック一覧」をクリックし、先ほど作成したスタックをクリックします。
コンテナが「complete」(緑色)になっていることを確認したら、画面下のJSONファイルの「elb_address」のアドレスをコピーし、ブラウザからアクセスします。

以下のようなWebアプリケーションが表示されたら、ALM経由でのWebアプリケーション構築は成功です。

2. 独自ドメインの取得とDNSの設定

Freenom から無料で独自ドメインを取得します。

https://www.freenom.com にアクセスし、テキスト欄に取得したいドメイン名を入力し、「Check Availability」をクリックすれば取得可能なドメイン一覧が表示されます。
その中から一つドメインを選択し、「Checkout」をクリックします。

次の画面で細かな設定を行う必要があるのですが、それは一旦飛ばして、ブラウザの別タブで Amazon Route53 のコンソールに移動します。
「Create Hosted Zone」をクリックして、先ほど選択したドメインを登録し、「Create」をクリックします。

設定したドメインにNSレコードが付与されることを確認します。

Freenomの画面に戻り、下の画像の通りに設定していきます。
Nameserver の入力欄が二つしかないので、どれか二つを入力します。あとは個人情報など諸々の項目を埋めていけばあなたの独自ドメインが無料で取得できます。

3. SSL証明書の発行

AWS Certificate Manager にて、SSL証明書を発行します。

AWS Certificate Manger とは SSL/TLS 証明書のプロビジョニング 、管理、デプロイを行うツールなのですが、大きく分けて二つの機能があります。

– AWS Certificate Manager(ACM)
AWSプラットフォーム上で運用するWebアプリケーションに対してSSL/TLSを有効にするパブリック証明書の更新とデプロイの管理

– ACM プライベート認証機関(CA)
プライベート証明書のライフサイクル管理

両方とも、AWSリソース(ELB、API Gateway、CloudFrontなど)にデプロイ可能です。
今回は一つめの AWS Certificate Manager(ACM)を使います。

ACMのコンソールに移動します。リージョンは 米国東部(バージニア北部)です。
Provision certificates の方の「Get started」をクリックします。

今回はパブリック証明書を発行をしたいので、左側の「Provision certificates」の方の「Get started」をクリックします。次の画面に進み「Request a certificate」をクリックします。

先ほど取得したドメインを入力します。
ルートドメインとサブドメインに対して証明書をリクエストしたいので、「hikamaru.tk」と「*.hikamaru.tk」の二つを入力しました。

Step 2 ではリクエスト中のドメインの検証方法を選択します。
対象のドメインはすでに Route 53 での管理下にあるため「DNS validation」を選択します。
Step 3 にてリクエスト内容のレビューを行い、良ければ「Confirm and request」をクリックします。
Step 4 にて、「Create record in Route 53」というボタンが表示されるので、それをクリックすると自動的にドメインに対して DNS レコードを付与されます。

4. SSL証明書をELBにデプロイ

EC2 のコンソールに移動し、ロードバランサーを選択→ロードバランサー一覧を表示します。
Mobingi ALM で作成したロードバランサーを探し出し(スタックIDで検索すればおそらく一発で発見できます)、選択します。
「Listeners」タブをクリック→「Edit」ボタンをクリックし、リスナーを追加します。
「Load Balancer Protocol」は「HTTPS (Secure HTTP)」を選択します。
「Cipher」はデフォルトの設定で良いと思います。

「SSL Certificate」の項目で、先ほど ACM で作成したSSL証明書を指定し、保存します。

5. DNSレコードの追加

最後に Route 53 にて、作成したドメインから ELB にアクセスできるように、ALIASレコードを追加します。
私は website.hikamaru.tk のようにサブドメインで指定することにしました。

しばらく待ってから、 https://website.hikamaru.tk にアクセスすると、Mobingi ALM で作成したアプリケーションが表示されることが確認できました。

最後に

外部に公開するアプリケーションを気軽にSSL対応することができました。
SSL化がデフォルトで求められてきている現代では AWS Certificate Manager のようなサービスはとてもありがたいです。