ちょっと話題の記事

[アップデート] Amazon Lightsail でコンテナが利用可能になりました!

めっちゃ簡単にコンテナ使いたい方にはオススメです
2020.11.14

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

本日のアップデートで Amazon Lightsail でコンテナが利用できるようになりました。

純粋にコンテナだけを使う

AWS でコンテナを利用する場合、Amazon EC2、Amazon ECS(EC2/AWS Fargate)、Amazon EKS のいずれかを利用されていたかと思いますが、これらに加えて Amazon Lightsail が選択肢として追加されました。

AWS Fargate の登場でコンテナホストの管理から解放されるなど、随分とシンプルにコンテナ環境を利用できるようになりましたが、それでもまだ IAM ロールやログといったインフラ部分の管理を行う必要があります。

Amazon Lightsail はデベロッパーがウェブサイトやウェブアプリケーションをクラウドにデプロイし、管理するのに必要なコンピューティング性能、ストレージ容量、ネットワーキング機能が提供されている仮想プライベートサーバー(VPS)のサービスです。Lightsail コンテナサービスでユーザーが用意するのはコンテナイメージのみです。その他の IAM、ログ、ロードバランサーなどを管理する必要はありません。

スモールな環境でサクッとコンテナを使いたい、インフラのことは考えずに使いたい、そういった方にはオススメになりそうですね!

ロードバランサーもついてるぜ

Lightsail では Lightsail ロードバランサーが提供されていますが、コンテナサービスをオリジンに指定することは出来ません。というのも、コンテナサービスは以下の図のようにデフォルトでロードバランサーが含まれています。

(引用元:Container services in Amazon Lightsail

ロードバランサーも含みで $7/月 から利用できると考えると、なかなか良い選択肢になりそうな気がしますね。

注意点

コンテナサービスを利用する際の注意点の一例です。

  • コンテナサービスあたり最大 10 個のコンテナを指定可能。ただし、パブリックエンドポイントに紐づくコンテナは 1 つのみ
  • 月あたり 500GB のデータ転送量が料金に含まれています
    • データの IN/OUT でカウントされます
    • 500 GB 超過分は、コンテナサービスからインターネットまたは別のリージョン、または同じリージョン内の AWS リソースへのデータ転送 OUT に対して課金されます
  • コンテナサービスは無効化していても課金されます
  • 使用できるコンテナレジストリはパブリックコンテナレジストリのみ
    • ローカルマシンから Lightsail にプッシュすることで非公開にカスタムコンテナイメージを利用することも出来ます
    • プライベートなコンテナイメージの利用方法は別途、記事にいたしましたのであわあせてお読みください

  • Lightsail ロードバランサーのオリジンにコンテナサービスを指定することはできません。ただし、コンテナサービスにはロードバランサーが含まれています。
  • Lightsail CDN ディストリビューションのオリジンにコンテナサービスを指定することはできません。よって CDN が必要な場合は CloudFront を利用します。

やってみる

コンテナイメージの準備

コンテナイメージは以下の公式ブログを参考に lightsail-hello-world をローカル環境に準備しました。

$ docker images lightsail-hello-world   
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
lightsail-hello-world   latest              6ed154fce985        2 minutes ago       899MB

現在 Lightsail がサポートしているコンテナレジストリは Docker-Hub などのパブリックコンテナレジストリのみです。先日、AWS でもパブリックコンテナレジストリを提供するとの発表がありましたが、現時点で Amazon ECR はパブリックコンテナレジストリとして利用できませんので今回は Docker-Hub に push します。(marumo1981の部分は各自のアカウント名に置き換えてください)

$ docker tag lightsail-hello-world marumo1981/lightsail-hello-world
$ docker login
$ docker push marumo1981/lightsail-hello-world

なおコンテナレジストリを利用せず、Lightsail コンテナサービスに直接 push することも可能です。

コンテナサービスを作成

Lightsail の管理コンソールを開きます。コンテナ タブが追加されていますね。コンテナサービスの作成 をクリックします。

リージョンおよびコンテナサービスの容量を選択します。とりあえず試してみる場合は最初の3ヶ月間無料枠で利用可能な Micro を選ぶのが良いでしょう。

デプロイの作成で カスタムデプロイを指定 を選択します。任意のコンテナ名を入力、イメージには先程 push したコンテナイメージを指定します。起動コマンドや環境変数も指定することができますが、今回はスキップします。ポートおよびプロトコルを指定します。

パブリックエンドポイントは HTTPS のみをサポートしますので、プロトコルで HTTP を指定しても HTTPS にリダイレクトされます。またデフォルトドメインの証明書は自動的に設定、管理されますのでユーザーによる管理は不要です。

パブリックエンドポイントとなるコンテナとして今回は hello-world を指定します。

サービス名を指定し コンテナサービスを作成 をクリックします。サービス名はデフォルトドメインの先頭部分に含まれます。

しばらくすると、デプロイメントがアクティブになります。

作成されたパブリックエンドポイントにアクセスしてみます。

$ curl https://hello-world.hqu75XXXXXXXX.ap-northeast-1.cs.amazonlightsail.com/
{"message": "Hello Flask API World!"}

正常に動作していますね。めっちゃ簡単にコンテナアプリケーションをリリースできることがおわかりいただけたでしょうか!

ログを開く からコンテナログを確認することができます。表示期間の指定や、フィルターも可能です。

新しいバージョンのデプロイ

次に新しいコンテナバージョンのデプロイを確認してみます。表示されるメッセージを Hello Classmethod API World! に変更したものを v2 として Docker-Hub に push しておきます。

$ docker push marumo1981/lightsail-hello-world:v2

Lightsail の管理コンソールにもどり デプロイの変更からイメージの指定を新しいコンテナイメージに変更し 保存とデプロイ をクリックします。これだけです。

しばらくすると新しいデプロイバージョンが有効になり、以前のバージョンは無効になっていることがわかります。

パブリックエンドポイントにアクセスしてみましょう。

$ curl https://hello-world.hqu75XXXXXXXX.ap-northeast-1.cs.amazonlightsail.com/
{"message": "Hello Classmethod API World!"}

新しいコンテナイメージで動作していますね!

スケールアウトも簡単

冒頭でご紹介したとおりコンテナサービスはロードバランサーが含まれています。パブリックエンドポイントを dig で確認してみると、複数のターゲット IP が表示されることからもわかります。3つの IP が表示されているので 3 AZ で動作していそうですね。

$ dig hello-world.hqu75XXXXXXXX.ap-northeast-1.cs.amazonlightsail.com +short
18.177.207.254
3.115.199.136
54.178.181.151

ロードバランサーはユーザーが管理する必要はありませんので、このように容量を変更するだけで簡単にスケールアウトすることも出来ます。

ホストの IP アドレスが表示されるようにコンテナイメージを変更しデプロイしました。この状態で複数回リクエストを送ってみます。

$ curl https://hello-world.hqu75XXXXXXXX.ap-northeast-1.cs.amazonlightsail.com/
"172.26.13.85"
$ curl https://hello-world.hqu75XXXXXXXX.ap-northeast-1.cs.amazonlightsail.com/
"172.26.18.212"
$ curl https://hello-world.hqu75XXXXXXXX.ap-northeast-1.cs.amazonlightsail.com/
"172.26.33.153"

3つのホストで稼働していることがわかりますね!

モニタリングは心もとないかも

提供されているメトリクスは CPU 使用率およびメモリ使用率だけです。またアラームの設定はできません。このあたりのモニタリングは心もとないかもしれませんね。

さいごに

とりあえずコンテナ環境をサクッと作って、ウェブサービス、アプリケーションをはじめたい場合に非常にお手軽で良いですね。Dockerfile があれば、ものの数分で公開できます。

モニタリングやCI/CDなどの課題が出てきたら、ECS などをその他のコンテナサービスを検討するとして、それまでは Lightsail コンテナサービスでとりあえずはじめてみる、ってものアリかと思います。

まだプライベートコンテナレジストリからの pull に対応していない(非公開で利用したい場合は aws cli で lightsail に push)など、使いにくい部分もありますが今後のアップデートに期待したいサービスですね!

以上!大阪オフィスの丸毛(@marumo1981)でした!