はじめに
本記事は、Oracle CloudでOracle Functionsを使用するための必要な設定方法について記載しています。
2019年8月1日に、正式サービスとしてOracle Cloudのサーバレスを実現するための**Oracle Functionsと、Oracle Functionsで作成した関数をイベントドリブンで呼び出せるOracle Cloud Infrastructure Events**のリリースが発表されました。
Oracle Functionsの公式マニュアルはWebから参照できますが、設定に関して一連の流れがまとまっていないため、初見の場合とても分かりずらいです。
本記事は、最短距離でOracle CloudのOracle Functionsを使用するための設定手順について簡潔にまとめています。
サーバレス
はじめに、サーバレスについて簡単に解説します。
一般的なサーバレスの技術は、FaaS(Function as a Service)として分類されます。
他のクラウドサービスで言うと、AWS Lambdaがメジャーです。
実行時間に応じて課金されるため、コード(関数)が実行されていないときには料金は発生しません。スクリプトの実行環境のみ提供されるので、IaaSに比べて大分保守コストは下がります。
実用的には、イベントに連動してトラフィックやパフォーマンスが求めれる、現代型のクラウドを使用したアーキテクチャと親和性が高い技術になります。
ホスティングするクラウドサービスも増えてきているので、サーバレスが進むと、システムの抽象化もより進み、インフラの概念は大きく変わることでしょう。
Oracle Functions
Oracle Functionsを使用するためには、Oracle FunctionsとOracle Cloud Infrastructure Eventsの設定が必要ですが、その他にも準備作業があります。
全体的に以下の作業が必要です。
- アクセス権の設定
- OCIRリポジトリの作成
- Oracle Functionsの作成
- Oracle Eventsの作成
本記事では、Oracle Functionsを使うために必要な上記、「アクセス権の設定」と「OCIRリポジトリの作成」について記載しています。
アクセス権の設定
ファンクションを作成するには、ユーザー・アカウントに、少なくとも1つのOCIRリポジトリと関連イメージに対するアクセス権が必要です。はじめに、アクセス権を設定するためのユーザを作成(※)します。
(※)既存ユーザを使用する場合は、ユーザ作成は不要
ユーザ
はじめに、Oracle Functionsで使用するユーザを作成します。
このユーザは、compartment単位で考えます。
また、APIの公開キーとトークンも合わせて設定します。
- APIの公開キー作成手順は、Required Keys and OCIDsを参照
- トークンの作成は、Docker CLIを使用したイメージのプッシュを参照
グループ
ユーザ作成後、ユーザが所属するグループを作成(※)し、グループに先ほど作成したユーザを追加します。
(※)既存グループを使用する場合は、ユーザ作成は不要
ポリシー
グループ作成後、親コンパートメントのポリシーに以下のポリシー・ステートメントを設定します。
allow group <グループ名> to manage repos in tenancy
allow group <グループ名> to manage cloudevents-rules in tenancy
- 設定画面
- 設定後の画面例
OCIRリポジトリの作成
次に、OCIRリポジトリと関連イメージを作成します。
OCIRリポジトリの作成
必要に応じて、OCIRリポジトリを作成します。
なお、OCIRリポジトリが存在しない場合は、docker push
コマンド実行時にリポジトリが作成されます。
イメージのアップロード
以下のコマンドを実行し、Oracle Cloud Infrastructure Registryにログインします。
# docker login nrt.ocir.io
Username: <コンパートメント名>/<リポジトリ名>
Password:
Login Succeeded
以下のコマンドを実行し、Oracle Cloud Infrastructure Registryにプッシュするタグをイメージに付けます。
# docker tag <コンテナID> nrt.ocir.io/<コンパートメント名>/<リポジトリ名>/<イメージ名>:<タグ名>
以下のコマンドを実行し、Oracle Cloud Infrastructure Registryにプッシュします・
# docker push nrt.ocir.io/<コンパートメント名>/<リポジトリ名>/<イメージ名>:<タグ名>
docker pushコマンドが失敗する場合は、ポリシーの設定に不備があります。ポリシーを設定しているコンパートメントの場所にも考慮が必要です。
- docker pushコマンド失敗の例
denied: User UserId(ocid1.user.***) cannot UploadDockerLayer on resource mytenant/myproject
おわりに
上記、準備作業が終わったら、Oracle Functionsの作成とOracle Eventsの作成を行います。