Lightsailことはじめ
Dify推しの人の記事でLightsail上にデプロイする方法が紹介されていた。
いろいろ他の方法も考えてみたのだけど、なるべくライトにサクッとDifyを動かすならば、Lightsailは悪くないチョイスかなと思ったので使ってみる。ただし、Lightsail全く使ったことないのと管理画面が独自なので、そもそもLightsailで何ができるのかとかそのへんも踏まえつつ。
マネージメントコンソールからLightsailのメニューを開く
マネージメントコンソールとは違うLightsail専用のコンソール画面に飛ぶ。"Create instance"をクリック
インスタンスの設定を行う。冒頭の記事ではUbuntuが使用されているようだけども、サポート期間も踏まえてAmazon Linux 2023でやってみる。うまくいかなかったらその時に考える。
今月からIPv4 IPアドレスの費用が追加されているようだ。
インスタンスが作成される。"Pending"となっている場合はまだ作成中。
しばらく待ってリロードしてみると"Running"になった。
さて、ここからはしばらくLightsailで何ができるのかを見ていく。
インスタンスのターミナルらしきアイコンをクリック。
ブラウザでSSHログインができる。EC2と同じく内部IPも振られている。
三点リーダーのアイコンをクリックすると、インスタンスの起動や停止、削除が行える。
では設定を見ていく。上記の"Manage"をクリックするか、インスタンス名をクリック。
メニューには"Connect" / "Metrics" / "Snapshots" / "Storage" / "Netwoking" / "Domains" があり、"Connect"の画面が表示される。ここでは、接続に必要なIPアドレスの情報やSSHの秘密鍵のダウンロードなどが行える。
"Metrics"画面ではインスタンスのリソース使用状況が確認できる。初期はCPUの概要が表示されている様子。アラームも追加できるみたい。
CPU以外はこういう項目が見える。
とりあえずCPU使用率のページを見てみた。なるほど、アラームは個々のページで設定するような感じらしい。
"Snapshots"画面ではインスタンスのスナップショットが取れる。手動と自動がある。
"Storage"画面ではディスクの追加ができる。おそらくEBSが追加されるのだろう。なお、"Snapshots"画面の説明を見る限りは追加されたディスクについてもスナップショットが取れる様子。
"Netwoking"画面では、割り当てられたIPアドレス情報やファイアウォールの設定等が行える。
- EC2と同じで、パブリックなIPv4アドレスは停止・起動で変更されるので、ホスティングで使用したいなら静的なIPv4アドレスを割り当てる必要がある。
- ファイアウォールはingressだけ。デフォルトだとHTTPとSSHが空いている。なお、一応ソースIP指定ぐらいはできるっぽい。
- あとは下の方に、xLB足して他のインスタンスと分散させたり、CloudFrontのディストリビューションを追加したりってのができるっぽい。
"Domains"画面ではドメインの設定ができるっぽい。ただこれはRoute53でもできそう。
あとここにも3点リーダーアイコンがあって以下のようなメニューがある。ここはまあ見たらわかると思うので割愛。
ここまではインスタンスのメニューだったけど、それ以外のメニューも多少関連する部分があると思うので軽く見ておく。Containersは興味あるけどもこれはインスタンスと同列で考えるものだと思うので、今回はちょっと割愛。
"Databases"ではデータベースの作成ができる。おそらくRDSのインスタンスが作られるのだろうと思う。
"Networking"では、静的IPv4アドレス、ロードバランサー、CloudFrontディストリビューションが作成できる。
"Storage"ではインスタンスにアタッチできるディスクと、インスタンスから利用できるオブジェクトストレージ画作成できる。
"Domains & DNS"ではドメインの登録、ゾーンの作成等ができる。
"Snapshots"ではインスタンスで取得したスナップショットがおそらく管理できるのだろうと思う。
"Exports"では取得したスナップショットをエクスポートしてそれを使ってEC2インスタンスに移行できるっぽい。
どのメニューも基本的にはLightsailの世界で簡単に使えるようにしたAWSサービスの機能限定版って感じだと思う。逆に言うと一般的なユースケースではそれで十分なケースが多いとも言える。
あとおそらくAWSのマネジメントコンソールでは多分出てこないと思うので、使い勝手とか含めてユースケースで考えれば良いと思う。
料金は月額ベースなのでわかりやすい。
最低限やっておかないといけないのは、静的IPv4アドレスをアタッチしておく、ところかな。
へぇ、月の途中で削除したりした場合は日割り計算になるっぽい。
プランに対して課金されるのは、どのようなときですか?
Lightsail インスタンスとマネージドデータベースは、削除されるまで料金が発生します。月末までに Lightsail インスタンスまたはマネージドデータベースを削除した場合、その月に Lightsail インスタンスまたはマネージドデータベースを使用した合計時間数に基づいて日割り計算された費用のみが請求されます。たとえば、最も安価な Lightsail インスタンスプランを 1 か月で 100 時間使用した場合、46 セント (100*0.0046) が課金されます。
あとこの辺もまとまってた。転送量が大きすぎる場合とCPUにキャップがある点については注意って感じ。CPUのキャップはT系インスタンスの特徴でもあるので、まあそれはそう。まあそこまで使い込むならば素直にEC2でやればいいと思う。
IaCでやるならば、CloudFormation/CDK/Terraformとかになるっぽい。
ただいずれの場合でもインスタンスタイプの場合は中身まではできないと思うので(cloud-init設定すればある程度はできそうな気がするけれども)、そこはAnsible等を組み合わせる感じになるかなと思う。
Lightsail ContainerならIaCはやりやすい。
そういえばAmazon Linux 2023も触ったことなかった。yumからdnfに変わってた。
IaC設定したいけど、まずは普通に触ってみる。
Lightsailインスタンスにdockerをインストール。インストール方法は色々あるけど、個人的にはセットアップスクリプト方式はあんまり好きではないし、せっかくAmazon Linux 2023なのでdnfで。
$ sudo dnf update
$ sudo dnf install -y docker
$ sudo gpasswd -a $(whoami) docker
$ sudo systemctl start docker
$ sudo systemctl enable docker.service
$ sudo systemctl enable containerd.service
一旦シェルから抜けて再度入り直す。
$ docker version
Client:
Version: 25.0.3
API version: 1.44
Go version: go1.20.12
Git commit: 4debf41
Built: Mon Feb 12 00:00:00 2024
OS/Arch: linux/amd64
Context: default
Server:
Engine:
Version: 25.0.3
API version: 1.44 (minimum version 1.24)
Go version: go1.20.12
Git commit: f417435
Built: Mon Feb 12 00:00:00 2024
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.7.11
GitCommit: 64b8a811b07ba6288238eefc14d898ee0b5b99ba
runc:
Version: 1.1.11
GitCommit: 4bccb38cc9cf198d52bebf2b3a90cd14e7af8c06
docker-init:
Version: 0.19.0
GitCommit: de40ad0
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
docker-composeをインストール。バージョンはこちらから最新を選択した。
$ echo 'export DOCKER_CONFIG=${DOCKER_CONFIG:-/usr/local/lib/docker}' >> ~/.bash_profile
$ exec $SHELL -l
$ sudo mkdir -p $DOCKER_CONFIG/cli-plugins
$ sudo curl -SL https://github.com/docker/compose/releases/download/v2.27.0/docker-compose-linux-x86_64 -o $DOCKER_CONFIG/cli-plugins/docker-compose
$ sudo chmod +x /usr/local/lib/docker/cli-plugins/docker-compose
$ docker compose version
Docker Compose version v2.27.0
参考
それ以外にもいろいろ変わってるのよね。systemdに集約されつつある感。
とりあえずcronieはいれた。
$ sudo dnf install -y cronie
$ sudo systemctl start crond.service
$ sudo systemctl enable crond.service