Build 2018でACR Buildがプレビューリリースされたので試しました。
ついでに作ったイメージをContainer Instancesで起動させます。
ACR Buildとは?
Azure Container Registryは、Dockerイメージを格納する為のプライベートレジストリです。
Dockerイメージを格納するためのものなので、どこか別の場所でDockerfileをビルドする必要がありました。
今回のリリースで、Azure CLIさえあれば、手元でdocker buildコマンドを実行する必要がなくなります。
ACR作成
2018年5月時点でBuild機能が使えるリージョンは「米国東部」「ヨーロッパ西部」のみなのでどちらかで作成します。
Dockerfile準備
ビルド対象のDockerfileを作っていきます。作成はCloud Shell上で行います。
Cloud Shell Bashを選択します。手順は公式ページ参照。
Cloud Shell クイックスタート場所はどこでもいいんですが、File Storage上にDockerfileを作ることにします。Cloud Shellで以下のコマンドを実行します。
cd clouddrive
mkdir test
cd test
vi Dockerfile
- 今回はAWS CLIを実行するコンテナを作って、Azure Container InstancesからAWS EC2を操作してみたいと思います。
- 以下のDockerfileを作って保存します。
FROM alpine:latest
RUN apk update && \
apk add python py-pip jq && \
pip install awscli
ACR Build実行
- az acr buildコマンドでイメージをビルドして、ACRにPushします。
az acr build --registry kwhracrtest --image awscli:v1.0 .
※Cloud Shellではなくて自分でインストールしたAzure CLIを利用している場合は、az acr buildオプションが存在しないかもしれません。その場合は最新のAzure CLIをインストールしてください。
Container Instancesで実行する
それではこのACRに格納されたDockerイメージを使って、実際にコンテナを起動してみます。
今回試すのでAWS CLIなので、EC2を起動してみたいと思います。
まずはACRからのイメージPullに必要なACR管理者ユーザ名とパスワードを控えておきます。ポータルのACRから[アクセスキー]を選択してください。
今回はAWS CLIを使うので、EC2起動権限のあるIAMのアクセスキー、シークレットキーを事前に入手しておいてください。また、起動対象EC2のインスタンスIDも入手しておいてください。
Cloud Shellで以下のコマンドを実行します。
az container create --name kwhrawscli \
--image kwhracrtest.azurecr.io/awscli:v1.0 \
--cpu 1 \
--memory 1 \
--registry-login-server kwhracrtest.azurecr.io \
--registry-username kwhracrtest \
--registry-password [Your ACR Password] \
--ip-address public \
-g kwhracrtest \
--restart-policy Never \
-e AWS_ACCESS_KEY_ID=[Your IAM AccessKey] \
AWS_DEFAULT_REGION=ap-northeast-1 \
AWS_SECRET_ACCESS_KEY=[Your IAM SecretKey] \
--command-line \
"aws ec2 start-instances --instance-ids [Your EC2 Ids]"
結果確認
先程実行したコンテナーインスタンスが作られているかと思いますので、それを選択します。
結果が表示されています。ACRからイメージをPull→コンテナ作成→コンテナ起動→コンテナ破棄の順に動いていることが分かります。
コンテナの状態が「Terminated」になっているのは、今回作ったコンテナイメージが実行後すぐに破棄される作りになっているからです。「Terminated」になっている間は課金されません。
Container Instancesの料金は?
コンテナー実行時間に対して秒単位で課金されるようです。
Container Instances料金
今回の実行でいくら掛かったのか計算してみたいと思います。
イベントを見てみると、Pulling/Pulled/Created/Started/Killingと5つのステップが実行されており、それぞれ1秒で完了しています。
つまり実行時間は5秒となります。
az container createコマンドで、vCPU 1、メモリ 1GB と指定して実行しました。
以上より、条件式に当てはめると以下のような料金になります。
メモリ使用時間
1(コンテナーグループ) * 5(秒) * 1(GB) * 0.00056(円)
= 0.0028 円
vCPU使用時間
1(コンテナーグループ) * 5(秒) * 1(vCPU) * 0.001456(円)
= 0.00728 円
課金合計
0.0028 + 0.00728
= 0.01008 円
安いですね。
今回のケースでは問題ないですが、vCPU/メモリをそれなりのスペックで起動しっぱなしにした場合は、結構な金額になってしまうので注意が必要です。