図解で、IBM Code Engine （コンテナから起動）

# 図解で、IBMCloud, Code Engine（コンテナ編）
IBM Cloud の Code Engineは、サーバーレスのアプリ実行環境。アプリは、（１）コンテナイメージ、（２）ソースコード、（３）バッチジョブのいずれかから起動できる。AWSならBeanstalk、AzureならWebAppと同じかと思いきや、AWS Fargate, Lambda, Beanstalk そして Azure WebApp, Functions, Batch と同じことを IBM Cloud なら Code Engine ひとつだけで実行できるというので検証してみる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/8f9c5478-eebe-8d44-10f5-f988d5721051.png)

## Code Engine の中身
複数の仮想サーバーや物理サーバー上で稼働している複雑なコンテナ実行環境（Kubernetes + Knative + Istio + 他）は、クラウドベンダーが管理・運用するマネージドサービスとして提供されるため、利用者はアプリをデプロイしたらすぐにインターネットからアプリにアクセスできる。アプリをインターネット公開するためのドメイン(URL)、SSLサーバー証明書、通信を暗号化するhttpsも全て備わっており、利用者が準備しなくてよい。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/c5a40bf8-91fc-8cbf-7082-2e6fa7704e71.png)

## （１）コンテナイメージを準備
- Code Engine で実行するアプリは、Docker チュートリアルの ToDoアプリ を使う
- Windows10 にインストールした Docker Desktop でコンテナイメージを作成
- 作成したコンテナイメージは下記 Docker Hub に保存した
- [https://hub.docker.com/repository/docker/ichirokano/todo-app](https://hub.docker.com/repository/docker/ichirokano/todo-app) 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/7b4db501-90dd-870e-cd36-04bf7a809950.png)

## （２）IBM Code Engine を準備
IBMCloud 管理ポータルにログインしたら、新しいリソース Code Engine を作成する。
(2)-1. リージョンやプロジェクト名などを決めて Code Engine のプロジェクトを作成する
(2)-2. アプリを作成する（作成したプロジェクトの中に、複数のアプリを作成できる）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/22f3b2ed-0ce0-5614-7b48-862295ab3384.png)

(2)-3. アプリの作成は、docker hub のコンテナイメージを選んだ
(2)-4. コンテナイメージの構成を確認する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/e594a32c-f2e2-02c1-ca18-3ec77dee3cdc.png)

(2)-5. アプリ実行環境を設定する（オートスケール等）
課金抑制するためアプリを動かさないときはインスタンス数をゼロにしておく。アクセスしたとき素早くアプリ起動するなら1にした方がいい。インスタンス１個あたりの同時アクセス上限は「要求」項目の「並行性」で決める［デフォルト:100］（いつもながら、なんて分かり難い翻訳なんだ）。次に最大同時アクセス数を満たすようにオートスケールの「インスタンスの最大数」を決める［デフォルト:10］。デフォルトの最大同時アクセス数は、1000個 = 同時100リクエスト x 10インスタンス。
- インスタンス数：0～最大250（デフォルト 0～10）
- インスタンスリソース：最小[0.125 vCPU/メモリ0.25GB]　～　最大[8 vCPU / メモリ32GB]
- リクエスト：１～1,000リクエスト/インスタンス（デフォルト100）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/449bbd85-d6f6-e8ff-fbbe-833a5200bc15.png)

(2)-6. アプリの設定を保存してデプロイする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/0d188618-ad6b-d105-48b2-b7475d909e08.png)

## （３）アプリにアクセスする
はじめてアプリにアクセスするとき、最小インスタンス数がゼロの場合は、アプリ起動に時間がかかります。ブラウザでURLをクリックしたら数秒待ちます。起動後はアプリがサクサク動きますが、しばらく使わないとすぐにインスタンス数がゼロに戻ります。いつでも素早く使うなら料金かかるけど最小インスタンス数を１以上にしないとダメですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/899eacb8-0a1f-1a3c-b806-f4d876d23847.png)

起動しているインスタンス数は、IBMCloud管理ポータルで確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/d333db99-a746-16a8-0cb2-4dc80216498c.png)

## （４）ドメインとSSLサーバー証明書を見る
ドメインは、*.jp-tok.codeengine.appdomain.cloud、
SSLサーバー証明書の認証局は、Let's Encript のDV認証のようです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/66606290-a371-8b4c-de0b-ebf161b6de15.png)

##（５）残り作業
本番公開するときは分かりやすいURLにするだろうから、独自ドメインとDNSでCNAME登録する。

# まとめ
コンテナイメージにビルドしてあるアプリなら、サーバーやOSなどのインフラ知識がなくても IBM Code Engine サービスを使って簡単に素早くWEBアプリを起動できました。近い将来、仮想サーバー(IaaS)やKubernetesコンテナ基盤を構築して運用するインフラ担当の仕事は無くなってしまいそうです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/277cf6b9-90c7-6a23-0ccf-154842062627.png)