フォーム読み込み中
この記事はソフトバンクアドベントカレンダー2023の11日目の記事です。
IBM Cloud Code Engineは、IBM Cloudで稼働する、フルマネージドのコンテナ実行環境サービスです。開発者はバックエンドのインフラストラクチャの管理や設定について心配することなく、ソースコードの作成に集中できます。
本記事では、Code Engineの基本的な使い方を実際のWebアプリケーションを作るステップに合わせて解説していきます。
Code Engineで稼働させるアプリケーションは、Webアプリケーションとし、その要件を決めましょう。
(要件)
後段のApplicationサーバはインターネット非公開であるところがポイントです。
IBMのGitHubのレポジトリに、目的に合致しているサンプルがありました。こちらを利用させてもらいましょう。authというフォルダ内のアプリケーションです。他にも用途に合わせたサンプルが多数あるのでのぞいてみて下さい。
https://github.com/IBM/CodeEngine
ファイル構成を実際に目にした方が早く理解できると思います。
まずは利用するファイルリストです。
Webレイヤーのファイル群
Applicationレイヤーのファイル群
この中から、仕組みを理解する上で必要なDockerfileとWebの設定ファイル、また、名称から想像しにくいファイルに絞って見ていきましょう。
Dockerやプログラムの詳細な解説が目的ではないため、最低限の説明にとどめています。
FROM icr.io/codeengine/nginx
# call-ngninx is just a script that'll replace "NS" in the config file with
# the proper project ID
COPY call-nginx /
# htpasswd contains the user/password info - for auth
COPY htpasswd /etc/apache2/.htpasswd
# Use our custom nginx config file
COPY nginx.conf /etc/nginx/conf.d/default.conf
# At runtime, call the wrapper script to do the "NS" substitutions
CMD ["/call-nginx"]
-snip-
listen 8080 ;
server_name *.codeengine.appdomain.cloud ;
-snip-
proxy_pass http://auth-app.NS.svc.cluster.local ;
-snip-
次の、call-nginxというスクリプトの目的が分かりにくいでしょうか。現時点では、Nginxのプロキシ先はまだ未定です。Applicationサーバをデプロイ後、Code Engineがサブドメインを払い出すため、それを確認して、Nginxのプロキシ先として暫定値を本設定値に書き換えるための簡易スクリプトです。そこだけ注意して見てください。
#!/bin/bash
set -ex
# Replace all "NS" in the config file with the Code Engine subdomain (k8s ns)
sed -i "s/NS/$CE_SUBDOMAIN/g" /etc/nginx/conf.d/default.conf
# Now run nginx
nginx-debug -g "daemon off;"
FROM icr.io/codeengine/golang:alpine
COPY app.go /
RUN go build -o /app /app.go
# Copy the exe into a smaller base image
FROM icr.io/codeengine/alpine
COPY --from=0 /app /app
CMD /app
-snip-
Hello World
-snip-
まだCode Engine固有の話ではありません。コンテナ一般の操作の解説が中心となります。
ただし、Dockerイメージの管理はIBM Cloudのプライベートコンテナレジストリを使いましょう。
IBM CloudをCLIで操作するため、コマンドによるIBM Cloudへのログインは済ませておきます。
$ ibmcloud login
IBM Cloud内のリソースグループの指定もしておきます。
$ ibmcloud target -g [リソースグループ名]
最後にIBM Cloud Container Registryへもログインします。crオプションは、container registryの略です。crオプションが使えるように必要なプラグインもインストールしておきます。
$ ibmcloud plugin install container-registry
$ ibmcloud cr login
IBMの日本リージョンのコンテナレジストリはjp.icr.ioドメインにあります。IBM Cloud上で立ち上げたコンテナレジストリサービス名として、ここではmy-container-registoryを作成済みとし、手順内で使っていきます。
$ docker build -t auth-app -f Dockerfile.app .
$ docker tag auth-app jp.icr.io/my-container-registory/auth-app
$ docker push jp.icr.io/my-container-registory/auth-app
$ docker build -t auth-nginx -f Dockerfile.nginx .
$ docker tag auth-nginx jp.icr.io/my-container-registory/auth-nginx
$ docker push jp.icr.io/my-container-registory/auth-nginx
ここまでは、コンテナのレポジトリがIBM Cloudであった点を除けば、コンテナ一般の手順でした。
ここからがいよいよCode Engine固有の操作になります。
ceオプションが使えるように必要なプラグインをインストールしておきます。ceオプションは、code engineの略です。
$ ibmcloud plugin install code-engine
次に、プロジェクト名を決めます。プロジェクトとは、Code Engine内のアプリケーションやジョブを管理する論理単位です。そのプロジェクト名を、以後の操作で作成し、指定します。
$ project_name='myProject'
$ ibmcloud ce project create --name ${project_name}
$ ibmcloud ce project select -n ${project_name}
次の手順が少し分かりにくいため少し説明を加えます。先ほどpushしたコンテナレポジトリからイメージを取得し、Code Engine内で起動させるには、その認証情報である、アクセスシークレットキーが必要になります。
Code EngineのGUIからの操作でも作成できます。今回はコマンドで操作するため、先にIAM経由でCode Engine用のAPIキーを発行し、そのAPIキーを使いアクセスシークレットキーを作ります。
$ ibmcloud iam api-key-create myApiKey -d "code engine"
$ apikey='xxx'
$ registrysecret='myregistrysecret'
$ ibmcloud ce registry create --name ${registrysecret} --server jp.icr.io --password ${apikey}
Code Engineが、アクセスシークレットキーによりコンテナレポジトリとつながります。あとはレポジトリから取得したイメージを起動をさせれば終わります。
# Applicationサーバ
$ image='jp.icr.io/my-container-registory/auth-app'
$ ibmcloud ce app create --name auth-app --image ${image} --registry-secret ${registrysecret} --cluster-local
$ NS=`ibmcloud ce app get -n auth-app -o url | cut -d '.' -f 2`
1234abcd
# 例)http://auth-app.1234abcd.svc.cluster.local
–cluster-localオプションを付与していることに注目してください。このオプションを使うと、インターネットへは公開されない、Code Engineプロジェクト内だけで疎通ができるURLが発行されます。
発行されたURLを取得します。Nginxへのプロキシ先に指定するためです。1234abcdの部分がアプリケーションごとに変わってきます。
続いてWebサーバを稼働させます。
# Webサーバ
$ image='jp.icr.io/my-container-registory/auth-nginx'
$ ibmcloud ce app create --name auth-proxy --image ${image} --registry-secret ${registrysecret} --env NS=${NS}
$ ibmcloud ce application get -n auth-proxy
https://auth-proxy.1234abcd.jp-tok.codeengine.appdomain.cloud
上記のURLへアクセスしてください。
Nginxが簡易認証ダイアログを表示し、htpassword内のユーザ名とパスワードを通すと、後段のAppサーバがHello Worldを返してくれるはずです。
以上となります。
その他利用頻度が高そうな操作コマンドを紹介しておきます。
ログの見方
アプリケーション・インスタンスのシステムイベントを取得
$ ibmcloud ce application events -n auth-proxy
$ ibmcloud ce application events -n auth-app
アプリケーション・インスタンスのログを取得
$ ibmcloud ce application logs -f -n auth-proxy
$ ibmcloud ce application logs -f -n auth-app
アプリケーションの削除
$ ibmcloud ce app delete -n auth-app -f
$ ibmcloud ce app delete -n auth-proxy -f
Code Engineが、アプリケーション開発における煩雑なタスクを解放し、生産性を向上させてくれる便利なサービスであることをイメージいただけたかと思います。ぜひ、Code Engineをアプリケーションの稼働環境として気軽に試してみて下さい。手間のかかるインフラ構築に時間を費やすことなく、アイデアを形にする作業に集中できます。積極的な採用によって、開発チーム全体の生産性向上とスムーズなアプリケーション展開を実現しましょう。
Code Engineにはまだまだ紹介しきれていない多くの機能があります。たとえば、コンテナイメージの自動ビルドやデプロイ、負荷にあわせたスケーリング設定、監視・ログ管理など、アプリケーションを効果的に管理するための多彩な機能が揃っています。ぜひそれらもお試しください。
それでは12日にバトンを渡します
条件に該当するページがございません