(第2回)【Oracle Cloud】OKE + FSSのマネージドな環境でASP.NET Core Webアプリを稼働する

(第2回)【Oracle Cloud】OKE + FSSのマネージドな環境でASP.NET Core Webアプリを稼働する

目次

前回の振り返り
アイデンティティユーザーを作成する
ポリシーを作成する
OCIレジストリの設定
作業用インスタンスの準備
DockerイメージをOCIRへPush
今回のまとめ

前回の振り返り

前回は稼働させるWebアプリケーションとして、ASP.NET Core Webアプリケーション (MVC)を使用してファイルをアップロードするサービスを作成しました。今回はOCIリポジトリに作成したアプリを登録していきます。

  • Webアプリケーションを開発する(完了)
  • アイデンティティユーザーを作成しポリシーを設定する ←今回
  • OCIレジストリにDockerイメージを登録する ←今回
  • File Storage Serviceを設定する
  • OKEを設定する
  • 稼働!完成!

アイデンティティユーザーを作成する

OKE用にまずはアイデンティティユーザーを作成しトークンを発行します。

ユーザーの作成

続いて、作成したOKE用のユーザーで「認証トークン」を生成します。OKEがOCIRへアクセスするためには認証トークンが必要になります。

トークンの生成1

生成しましたらトークンの内容をコピーしておきます。トークンの内容は1度しか表示されないので、忘れないように注意します。(もし忘れた場合はトークンを新しく生成しなおす必要があります)

トークンの生成2

ポリシーを設定

OKEとOCIRを利用するためにポリシーを設定します。
本記事では、前提としてコンパートメント名は「itport」、ユーザー名は「itport-user」、グループ名は「itport-group」としております。

Allow service OKE to manage all-resources in tenancy
Allow group itport-group to manage repos in tenancy
Allow group itport-group to manage cluster-family in compartment itport
Allow group itport-group to manage virtual-network-family in compartment itport
Allow group itport-group to manage instance-family in compartment itport
Allow group itport-group to inspect compartments in compartment itport

※ 上記のポリシーはコンパートメント内のネットワーク管理権限などを与えておりますので、自身の環境に合わせてポリシーを調整ください。
ポリシーのリファレンスは公式ドキュメントに記載されております。

OCIレジストリの設定

前回作成したWebアプリケーションをDockerイメージとしてOCIRに登録するため作業環境を作ります。
まずは、OCIコンソールでリポジトリを作成しておきます。アクセスはプライベートを選択しておきます。

リポジトリ作成

作業用インスタンスの準備

OCIのComputeで作業用インスタンスを起動します。
OCIではComputeを作成時に自分でキーペアを用意する必要があります。備忘録も兼ねてSSH用キーペア作成のコマンドを記載しておきます。手元の端末がWindowsの場合、Windows Subsystem for Linux を利用すると便利です。

ssh-keygen -t rsa -N "" -b 2048 -C "<key_name>" -f <path/root_name>

では イメージをOracle Linux 7.7 にしてComputeを起動しておきます。

コンピュート・インスタンスの作成

インスタンスが作成されたら、SSHで接続して、必要な物をどんどん入れていきます。
まずはdotnet-sdk-3.1をインストールします。(2020年3月時点の最新バージョンとなります)

  sudo rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm
  sudo yum install dotnet-sdk-3.1

dotnet-sdkがインストールできたら、Webアプリケーションが動くか確認してみます。
ソリューションごとソースをサーバーへアップロードし、プロジェクトフォルダー(.cspojがある階層)で以下のコマンドで実行します。

dotnet run

問題なく実行できました。dotnet runはフォアグラウンドで実行されます。Ctrl + c で実行が終了されます。
次にDockerのインストールに進みます。

# docker-ce
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce -y
sudo systemctl enable docker
sudo systemctl start docker
sudo usermod -aG docker opc

Dockerをインストールしたらビルドしイメージを作成します。Dockerfileがある場所まで移動し以下のコマンドでビルドします。(Dockerfileの場所は前回の記事を参考ください)

docker build -t file_upload_web_app .

ビルドが成功したら次はkubectlをインストールしておきます。

# kubectl
curl -LO https://storage.googleapis.com/kubernetes-release/release/`curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt`/bin/linux/amd64/kubectl
chmod +x ./kubectl
sudo mv ./kubectl /usr/local/bin/kubectl
mkdir ~/.kube

DockerイメージをOCIRへPush

ビルドしたイメージをOCIRへPushします。レジストリに登録したイメージは後々OKEで利用します。

# OCIRにログインする
docker login nrt.ocir.io

#ビルドしたイメージのIDを確認します
docker images

#イメージにタグを付けます
docker tag <IMAGE ID> nrt.ocir.io/<tenancy-namespace>/file_upload_web_app:v01

#イメージをOCIRへPushします
docker push nrt.ocir.io/<tenancy-namespace>/file_upload_web_app:v01

OCIコンソール上のOCIRサービスの画面でアップロードしたイメージが反映されておりました。

OCIコンソール OCIR画面

今回のまとめ

ASP.NET CoreアプリケーションをDockerのイメージにし、OCIRにPushするところまで出来ました。
docker build コマンドがうまくいかない場合は、dotnet-sdkのバージョンの違いや、ビルド実行時のカレントディレクトリが誤っており、Dockerfile内に記載されたコマンドが通っていない場合もありますので、ご自身の環境に合わせてご確認ください。