この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
先日に続き、Amazon Lightsail コンテナサービスのネタです。アップデート記事は以下を参照ください。
上記のエントリーで「使用できるコンテナレジストリはパブリックコンテナレジストリのみ」と書いています。
「え、パブリックレジストリしか使えんのやったら、業務アプリとかアカンやん」
と思われたかもしれませんが、そのような場合は Lightsail コンテナサービスに直接 push することでプライベートなコンテナイメージも使用することが出来ます、というのが今回の記事になります。
Lightsail へのイメージ push の準備
以下のツールが必要になりますので、これらをインストールします。
- AWS CLI v2.1.1 以降
- AWS CLI v1 では Lightsail コンテナサービスへの push がサポートされていません
- LightsailControl プラグイン
AWS CLI v2 インストール
まずは AWS CLI v2 をインストールします。以下、macOSの手順ですがその他 OS については公式ガイドを参考にしてください。
$ curl "https://awscli.amazonaws.com/AWSCLIV2.pkg" -o "AWSCLIV2.pkg"
$ sudo installer -pkg AWSCLIV2.pkg -target /
$ aws --version
aws-cli/2.1.1 Python/3.7.4 Darwin/19.6.0 exe/x86_64
LightsailControl プラグイン
LightsailControl プラグインをインストールします。こちらも macOS の手順ですのでその他 OS については公式ガイドを参考にしてください。
$ sudo curl "https://s3.us-west-2.amazonaws.com/lightsailctl/latest/darwin-amd64/lightsailctl" -o "/usr/local/bin/lightsailctl"
$ sudo chmod +x /usr/local/bin/lightsailctl
$ xattr -c /usr/local/bin/lightsailctl
IAM 権限
最低限、以下の IAM 権限があればイメージを push できます。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"lightsail:CreateContainerServiceRegistryLogin",
"lightsail:RegisterContainerImage"
],
"Resource": "*"
}
]
}
Lightsail にコンテナイメージを push
ローカルの Docker 環境にコンテナイメージを準備しておきます。
$ docker images lightsail-hello-world
REPOSITORY TAG IMAGE ID CREATED SIZE
lightsail-hello-world latest 4e96c574653c 2 minutes ago 899MB
イメージの push は aws lightsail push-container-image
コマンドを使用します。
$ aws lightsail push-container-image ¥
--region <Region> ¥
--service-name <ContainerServiceName> ¥
--label <ContainerImageLabel> ¥
--image <LocalContainerImageName>:<ImageTag>
今回はコンテナサービス container-service-1
に lightsail-hello-world:latest
イメージを push します。ラベル名は testlabel
としました。
$ aws lightsail push-container-image ¥
--region ap-northeast-1 ¥
--service-name container-service-1 ¥
--label testlabel ¥
--image lightsail-hello-world:latest
bc153fd226de: Pushed
c3ab11b5270a: Pushed
431fc29f78ab: Pushed
641e75738194: Pushed
c4fc3bd6e3cb: Pushed
5f03d9827383: Pushed
6f7043721c9b: Pushed
a933681cf349: Pushed
f49d20b92dc8: Pushed
fe342cfe5c83: Pushed
630e4f1da707: Pushed
9780f6d83e45: Pushed
Digest: sha256:ae3a0a02024182d2279c0100953634f22e1b825edac387951f98ae75cb795834
Image "lightsail-hello-world:latest" registered.
Refer to this image as ":container-service-1.testlabel.1" in deployments.
Lightsail コンテナサービスにストアされるイメージ名は <コンテナサービス名>.<ラベル名>.<バージョン番号>
という形になります。イメージが push されると [イメージ] タブが表示されるようになります。
Lightsail コンテナサービスにストアされているイメージを使用する場合は、保存したイメージを選択
をクリックして選択するだけです。
その他、必要なパラメータを指定し 保存とデプロイ
でデプロイします。
$ curl https://container-service-1.XXXXXXXXXXXXX.ap-northeast-1.cs.amazonlightsail.com/
{"message": "Hello Flask API World!"}
パブリックコンテナレジストリを使わずに Lightsail コンテナサービスでコンテナを動かすことが出来ましたね!検証は以上です。
さいごに
あくまで「コンテナレジストリ」としてはパブリックコンテナレジストリのみがサポートされているのであって、プライベートなコンテナイメージを利用することは可能ですよ! ということをお伝えしたく記事にしました。
ECR などプライベートコンテナレジストリのサポートは今後のアップデートに期待しつつ、個人的には直接 Lightsail にイメージを push して利用できるのもシンプルで Lightsail らしい使い方かな、と思います。
以上!大阪オフィスの丸毛(@marumo1981)でした!