ライセンス持込みコンテナ

ジョブおよびジョブ実行の作成時に使用するカスタム・コンテナ(Bring Your Own ContainerまたはBYOC)を作成して使用できます。

ジョブで使用できるコンテナ・イメージの最大サイズは25 GBです。コンテナ・イメージのサイズは、コンテナ・レジストリからコンテナ・プルするため、ジョブのプロビジョニング時間が遅くなります。可能なかぎり最小のコンテナ・イメージを使用することをお薦めします。

ジョブを実行するには、独自のDockerfileを作成し、イメージを作成する必要があります。Pythonスリム・イメージを使用するDockerfileから開始します。Dockerfileは、ローカルおよびリモートのビルドを作成できるように設計されています。ローカル・ビルドは、コードに対してローカルでテストするときに使用します。ローカル開発中、コードの変更ごとに新しいイメージを作成する必要はありません。
ノート

/home/datascienceディレクトリにファイルを格納しないでください。コンテナがプロビジョニングされ、ジョブ実行として実行されると、このディレクトリ内でオーバーライドされます。

コードが完成し、このDockerfileの例のようにジョブとして実行する場合は、リモート・オプションを使用してDockerfileを実行します。

ARG type

FROM python:3.8-slim AS base

ENV DATASCIENCE_USER datascience
ENV DATASCIENCE_UID 1000
ENV HOME /home/$DATASCIENCE_USER

RUN python -m pip install \
        parse \
        oci


FROM base AS run-type-local
# nothing to see here

FROM base AS run-type-remote
COPY job_logs.py .
CMD ["python", "job_logs.py"]

FROM run-type-${type} AS final

次に、job_logs.pyファイルの例を示します。

import oci
import datetime
import os
import time
import sys
import uuid
from oci.loggingingestion import LoggingClient
from oci.loggingingestion.models import PutLogsDetails, LogEntryBatch, LogEntry

OCI_RESOURCE_PRINCIPAL_VERSION = "OCI_RESOURCE_PRINCIPAL_VERSION"
JOB_RUN_OCID_KEY = "JOB_RUN_OCID"

# switch
class Job:
    def __init__(self):
        rp_version = os.environ.get(OCI_RESOURCE_PRINCIPAL_VERSION, "UNDEFINED")
        if not rp_version or rp_version == "UNDEFINED":
            # RUN LOCAL TEST
            self.signer = oci.config.from_file("~/.oci/config", "BIGDATA")
        else:
            # RUN AS JOB
            self.signer = oci.auth.signers.get_resource_principals_signer()


job = Job()

print(
    "Start logging for job run: {}".format(
        os.environ.get(JOB_RUN_OCID_KEY, "LOCAL")
    )
)
print("Current timestamp in UTC: {}".format(str(datetime.datetime.utcnow())))

print("Delay 5s")

time.sleep(5)

print("... another stdout")

print("Print all environment variables and values")

for item, value in os.environ.items():
    print("{}: {}".format(item, value))

print("Docker Job Done.")
ヒント

開始に役立ついくつかの例が提供されています。

Oracle Cloud Infrastructure Registry (コンテナ・レジストリとも呼ばれる)に対してイメージをプッシュおよびプルする前に、Oracle Cloud Infrastructureの認可トークンが必要です。認証トークン文字列は作成時にのみ表示されるため、認証トークンを安全な場所にただちにコピーするようにしてください。

  1. 詳細を表示するには: ナビゲーション・バーで、「プロファイル」メニューを選択し、表示されるオプションに応じて「ユーザー設定」または「マイ・プロファイル」を選択します
  2. 「認証トークン」ページで、「トークンの生成」をクリックします。
  3. 認証トークンのわかりやすい説明を入力します。機密情報の入力は避けてください。
  4. 「トークンの生成」をクリックします。新しい認証トークンが表示されます。
  5. 認証トークンをすぐに安全な場所にコピーし、後で取り出せるようにします。コンソールに認証トークンが再び表示されることはありません。
  6. 「トークンの生成」ダイアログを閉じます。
  7. ローカル・マシンでターミナル・ウィンドウを開きます。
  8. コンテナ・イメージを構築、実行、テスト、タグ付けおよびプッシュできるように、コンテナ・レジストリにサインインします。
    docker login -u '<tenant-namespace>/<username>' <region>.ocir.io
    オプション説明
    ローカル実行

    dockerファイルをビルドしますが、クイック実行やデバッグなどのコードは含まれません。

    docker build --build-arg type=local -t byoc .
    ジョブとして実行

    ジョブとして実行する準備ができたコードでdockerファイルをビルドします。

    docker build --build-arg type=remote -t byoc .
    オプション説明
    コードの場所がマウントされたローカル・テスト

    dockerホーム・ユーザー・ディレクトリ./ociへのAPI認可キーがマウントされます。dockerイメージで別のユーザーを使用する場合は、/home/datascience/.ociパスを変更する必要があります。たとえば、rootアカウントを使用する場合は、パスを/root/.ociに変更します。

    docker run --rm -v $HOME/.oci:/home/datascience/.oci -v $PWD:/app byoc python /app/job_logs.py
    
    コードを使用したローカル・テストはコンテナにあります

    remoteオプションを使用してコンテナがイメージにコードを格納して構築されている場合でも、ローカル実行にはOCI API認証トークンが必要です。

    docker run --rm -v $HOME/.oci:/home/datascience/.oci -v $PWD:/app byoc
  9. コンテナ・コードを入力して参照します
    docker run -it byoc sh
    ls
    exit
  10. ローカル・コンテナ・イメージをタグ付けします:
    docker login -u '<tenant-namespace>/<username>' <region>.ocir.io
    docker tag byoc:latest<region>.ocir.io/<tenancy-name>/byoc:1.0
  11. コンテナ・イメージをプッシュします:
    docker push <region>.ocir.io/<tenancy>/byoc:1.0
  12. ジョブに、イメージを格納したコンパートメントからOCIRを読み取ることができるリソース・プリンシパルに対するポリシーがあることを確認します。
    allow dynamic-group {<your-dynamic-group-name>} to read repos in compartment {<your-compartment-name>}
  13. (オプション)コンテナ・イメージを署名します。これは、イメージ署名検証を使用している場合にのみ必要です。
  14. (オプション)ジョブに、イメージ署名のボールト・キーが格納されているコンパートメントのボールト・サービスを使用できるようにするリソース・プリンシパルのポリシーがあることを確認します。ポリシーは、イメージ署名の検証にのみ必要です。
    Allow dynamic-group <dynamic-group-name> to use vaults in compartment <compartment-name>
    Allow dynamic-group <dynamic-group-name> to use keys in compartment <compartment-name>
    Allow dynamic-group <dynamic-group-name> to use secret-family in compartment <compartment-name>
  15. 次のオプションのいずれかを選択して、ジョブを作成します。
    • BYOCバージョン2: 「環境」構成ウィンドウのポップアップを使用してジョブを作成します。「ジョブの作成」のステップ9を参照してください。
    • BYOCバージョン1: ジョブ環境変数を使用してジョブを作成し、OCIR内のコンテナ・イメージの場所を指してジョブとして実行します:
      CONTAINER_CUSTOM_IMAGE=iad.ocir.io/mytenancyname/byoc:1.0
      ノート

      BYOCバージョン1は現在非推奨であり、推奨メソッドではありません。