8
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

私の3時間をあなたの5分に - OCI Functions認証編

Last updated at Posted at 2025-12-06

はじめに

実は私、こんな本のサーバレス編担当者でした。

担当者になるまでほとんど業務で触ったことありましぇんでした。

で、執筆の時に困ったのが
OCI Functions をローカルから触ろうとすると、
「これってさっき作ったキーとどう違うの?」「え、また認証するの?」という、認証について一文字も書けないスランプ状況になりました。
これ、私以外も皆さん思いませんでした??(圧)

・・・・ってことでこれを分かりやすく整理します。

【1分クッキング】OCI Functions アプリケーションのつくりかた

1. VCNの作成

※VCNは作成手順はこちらを見て30秒で作ってください。(マジで30秒)
https://oracle-japan.github.io/ocitutorials/beginners/creating-vcn/

2. OCI Functionsアプリケーションの作成

開発者サービス>Function>アプリケーションの作成画面に遷移し、アプリケーションの作成ボタンを押します。
今回は以下のように設定しました。

  • アプリケーション名:sasafanc(任意)
  • コンパートメント:ご自身のコンパートメントを選択
  • VCN:事前に作成したVCN
  • サブネット:今回はパブリック(任意)
  • シェイプ:GENERIC_X86

image.png

はい、2秒でActiveになります。

これでFunctionsの"⼊れ物"となるアプリケーションを作成しました!(ETA 1分)

問題はここからや

今回はCloud Shellを脱却し、ローカルで開発します。
かれこれ、3年間エンジニアとして働いているのでまあ余裕でしょう・・・!

作成したアプリケーション名を押し、詳細画面の左下にローカル設定ガイド詳細を押します。

image.png

長いッッッッッツ!!!!怒(図1)

図1:ローカル設定の手順
image.png

しかもさりげなく、一番めんどくさそうなところが終わったことになってるな?????(図2)

図2:恐ろしい前提条件(サラッと流していました)
image.png

実際、手順としては難しくなく基本的には図1,図2の手順をコピペしていけば終わりますが・・・・

どこで何を認証してるのか全く分からん!!! となったので整理します。(Docker loginとかConfigとかAPI署名キーとかDocker loginとか)

【2時間59分クッキング】本題に入ります

OCI Functionsを動かすには、2つの異なる認証が必要なんです。なんでや!!

結論から言うと、デプロイから実行までの3つのフェーズで、それぞれ下記の認証が使われます。

  • ①イメージのビルド&Push → Auth Token
  • ②Functionの作成 → API署名キー
  • ③関数の実行 → API署名キー
    なるほどわからん。それぞれガッツリ見ていきましょう!

①User → OCIR(イメージのビルド&Push)

何のため?

  • ローカル環境でFunctionをコンテナイメージとしてビルド
  • ビルドしたイメージをOCIR(Oracle Container Registry)にPush
  • Dockerイメージを作ってOCIR保管するフェーズ

使うもの:

  • Auth Token (パスワードみたいなもの)
  • Fn CLI + Docker(またはPodmanなどの互換ツール)

なんでAuth Tokenが必要なの?
OCIRはコンテナレジストリなので、ユーザー名+パスワードを使います。
API署名キーはDocker loginと互換性がないので、パスワード的なもの(Auth Token)が必要になります。

どうやって?

  1. OCIコンソールの「ユーザー設定 → 認証トークン」でトークン作成
    • 右上のユーザーアイコンをクリック
    • 「ユーザー設定」を選択
    • 左側メニューの「認証トークン」をクリック
    • 「トークンの生成」ボタンをクリック
    • 説明欄に「OCIR用」とか入力(後で何のトークンか分かるように)
  2. 表示されたトークンをコピー
    • 一度閉じると二度と見られません
    • 私はコピーを忘れて作り直しました(泣)
  3. docker loginでOCIRにログイン
    • ユーザー名: <テナンシー名>/<ユーザー名>
    • パスワード: さっきコピーしたAuth Token

コマンド例:

# OCIRにログイン(Auth Token使用)
docker login nrt.ocir.io -u 'my-tenancy/oracleidentitycloudservice/taro@example.com' -p '<Auth Token>'

# ログイン成功!
# Login Succeeded

ユーザー名の形式に注意!

  • テナンシー名は「Object Storageのネームスペース」と同じ

  • 図1「ローカル設定ガイド」に書いてある形式をコピーするのが確実

Login Succeeded って出たら優勝です。

②User → Functions(Functionの作成)

何のため?

  • fn deployコマンドでFunctionを作成・更新
  • Functionsに「OCIRのどのイメージを使うか」を伝える

使うもの

  • API署名キー(OCI Config)
  • ~/.oci/config (設定ファイル)

なんでAPI署名キーが必要なの?
Functionの作成・更新は「OCI APIを操作する」ことになります。
OCIのリソース(Functions、Network、Storageなど)を安全に操作するために、API署名キー認証が使われます。

どうやって?

  1. oci setup configコマンドで~/.oci/configを作成
    • リージョンはどこ?(例:ap-tokyo-1)
    • ユーザーのOCIDは?(OCIコンソールで確認)
    • テナンシーのOCIDは?(これもコンソールで確認)
  2. 鍵ペアが自動生成される
    • 秘密鍵: ~/.oci/oci_api_key.pem
    • 公開鍵: ~/.oci/oci_api_key_public.pem
  3. OCIコンソールの「ユーザー設定 → APIキー」に公開鍵を貼り付け
    • cat ~/.oci/oci_api_key_public.pemで内容を表示してコピペ
    • フィンガープリントが表示されるので、~/.oci/configのものと一致してるか確認
  4. fn deployコマンドを実行

コマンド例:

# Functionを作成・更新(API署名キー使用)
fn deploy --app myapp

OCI Configには何が書かれてる?
~/.oci/configには以下の情報が保存されます

  • user: ユーザーOCID
  • tenancy: テナンシーのOCID
  • region: リージョン(例:ap-tokyo-1)
  • key_file: 秘密鍵のパス
  • fingerprint: 公開鍵のフィンガープリント

動作確認:

oci os ns get

Namespaceが取得できたら成功しています。またもや優勝です。


③User → Functions(関数の実行指示)

何のため?

  • fn invokeコマンドで関数を実行
  • 実行指示を受けたFunctionsが、OCIRから該当イメージを取得してサーバーレス環境上で起動

使うもの:

  • API署名キー(OCI Config)

なんでまたAPI署名キーが必要なの?
関数の実行指示も「OCI APIを操作する」ことになります。
「この関数を実行してください」というリクエストをOCI APIに送るので、ここでもAPI署名キー認証が使われます。

どうやって?(一例)

# 関数を実行(API署名キー使用)
echo '{"name":"World"}' | fn invoke myapp hello

# レスポンスが返ってくる
{"message":"Hello World"}

Functionsが裏側でやってること

  1. あなたのAPI署名キーで実行指示を認証
  2. OCIRから指定イメージを取得
  3. サーバーレス環境でコンテナを起動
  4. リクエストを処理
  5. レスポンスを返す

まとめ:結局なにがなんなの?

image.png

①User → OCIR:イメージのビルド&Push

  • ローカル環境でFn CLIとDockerを使ってFunctionをコンテナイメージとしてビルド
  • ビルドしたイメージをOCIR(Oracle Container Registry)にPush
  • 使う認証:Auth Token - OCIRへのログイン専用の資格情報(Dockerのパスワード代わり)

②User → Functions:Functionの作成

  • fn deployコマンドでFunctionを作成・更新
  • Functionsに「OCIRのどのイメージを使うか」を伝える
  • 使う認証:API署名キー(OCI Config) - OCI APIを操作するための認証情報

③User → Functions:関数の実行指示

  • fn invokeコマンドで関数を実行
  • 実行指示を受けたFunctionsが、OCIRから該当イメージを取得してサーバーレス環境上で起動
  • 使う認証:API署名キー(OCI Config) - OCI APIを操作するための認証情報

このフローの中で、2つの認証(Auth TokenとAPI署名キー)が両方使われてるのが分かりますね。
だから両方必要なんですね~。

・・・・
・・・・

1つにしてくれ。PCの顔認証と同じにしてくれ。

参考リンク

8
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?