2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【OCI Functions】事前構成済みファンクション Document Generator 試してみた

Last updated at Posted at 2024-03-15

はじめに

1か月ほど前に新たに追加された事前構成済みファンクションの「Document Generator」をマニュアルをなぞりながら使ってみました。
事前構成済みなので自分でコードを書くことなく機能を使うことができます。

概要

OfficeテンプレートおよびJSONデータに基づいてPDFドキュメントを生成するFunctionsです。
オブジェクト・ストレージに保存した.docx形式のテンプレートファイル中の変数(タグで指定します。後述)をJSONファイルで定義したデータで置換します。文字列、画像に対応しているようです。

検証

検証構成

image.png
今回主に利用するリソース一覧を整理しました。非常にシンプルと思います。
構成図にまでする必要なかったかと思うのですが、dwaw.ioの練習がてら作成してみました。
事前構成済みのファンクションの場合はOCIRでイメージ管理されないようなので構成図にも記載していません。
また、簡単のためにファンクションの起動にはCloud ShellからOCI CLIを利用、PDFの出力先はWordテンプレートを配置したバケットと同じ、置換用JSONはオブジェクト・ストレージに保存せずファンクション呼び出しの際の引数としました。

事前準備・前提条件など

事前に構成図中の以下リソースは作成済みとする。

  • VCN
    • プライベート・サブネット
    • サービス・ゲートウェイ
  • プライベート・バケット
    • .docx形式のWordテンプレート
      Hello {customer.first_name} {customer.last_name}!とだけ記入したただのワードファイルを今回は使いました。
      image.png

追加でプライベート・サブネットからのOracle Services Networkへの通信がサービス・ゲートウェイに向くようにルート・テーブルやセキュリティ・ルールを適切に設定しておきます。

事前構成済みファンクションの作成

コンソールからポチポチして作成。

「Document Generator」
image.png
「関数の作成」
image.png
「新規アプリケーションの作成」->VCNやサブネットを選択。シェイプはGENERIC_X86を選択必須。他はデフォルト。IAMポリシーも自動作成。
image.png
「動的グループとIAMポリシーを作成しないでください」にチェックを入れなければ自動作成されたリソースの情報がでてくる。
image.png
自動作成されたポリシー
image.png
自動作成された動的グループ
image.png

自動の場合、動的グループは現在ログインしているユーザーのアイデンティティ・ドメインでなくデフォルト・ドメインで作成されるので注意。自分でポリシーや動的グループを管理したい場合は手動で実施。

Cloud Shellからファンクション呼び出し

Cloud ShellにはデフォルトでOCI CLIがインストールされており、さらに認証情報の設定も構成済みのためすぐにCLIコマンドを実行することができます。

JSONファイルの準備

Wordファイル中のタグ変数をJSONデータで置換するのですが、今回はテンプレート置換用のJSONをオブジェクトストレージに置かず、インラインで指定して実行しました。
マニュアルの例をそのまま利用しています。

置換用JSONファイル

{
  "customer": {
    "first_name": "Jack",
    "last_name": "Smith"
  }
}

CLIのリクエストパラメータに投げるJSON

{
  "requestType": "SINGLE",
  "tagSyntax": "DOCGEN_1_0",
  "data": {    
    "source": "INLINE",
    "content": {
		"customer": {
			"first_name": "Jack",
			"last_name": "Smith"  
		}
	}
  },
  "template": {
    "source": "OBJECT_STORAGE",
    "namespace": "<オブジェクト・ストレージのネームスペース>",
    "bucketName": "<バケット名>",
    "objectName": "<テンプレートWordファイル名>"
  },
  "output": {
    "target": "OBJECT_STORAGE",
    "namespace": "<オブジェクト・ストレージのネームスペース>",
    "bucketName": "<バケット名>",
    "objectName": "<PDFファイル名>",
    "contentType": "application/pdf"
   }
}

CLIでファンクション呼び出し(結局長くなったからJSONファイルで別だししてもよかった)

oci fn function invoke --function-id <ファンクションのOCID> --body '{"requestType":"SINGLE","tagSyntax":"DOCGEN_1_0","data":{"source":"INLINE","content":{"customer":{"first_name":"Jack","last_name":"Smith"}}},"template":{"source":"OBJECT_STORAGE","namespace":"<オブジェクト・ストレージのネームスペース>","bucketName":"<バケット名>","objectName":"<テンプレートWordファイル名>"},"output":{"target":"OBJECT_STORAGE","namespace":"<オブジェクト・ストレージのネームスペース>","bucketName":"<バケット名>","objectName":"<PDFファイル名>","contentType":"application/pdf"}}' --file "-"

実行結果

意外とレスポンスくるまでに時間がかかった印象。1-2分くらい?初回だからか。

{"responseType":"SINGLE","code":200,"status":"OK","metadata":{"version":"1.0.1","configurationParameters":{"FN_FN_NAME":"DocGenFunc","FN_APP_NAME":"DocGenApp","FN_TYPE":"sync","FN_APP_ID":"ocid1.fnapp.oc1.ap-osaka-1.xxx","OCI_REGION_METADATA":"{\"realmDomainComponent\":\"oraclecloud.com\",\"realmKey\":\"oc1\",\"regionIdentifier\":\"ap-osaka-1\",\"regionKey\":\"KIX\"}","FN_FN_ID":"ocid1.fnfunc.oc1.ap-osaka-1.xxx","FN_MEMORY":"512"}},"document":{"type":"OBJECT_STORAGE","namespace":"xxx","bucketName":"bucket_temp","objectName":"output.pdf","contentType":"application/pdf"}}

指定したバケットにpdfが生成されている。
image.png
PDF中身(質素)
image.png

まとめ・気づき

  • 事前構成済みファンクションの利用のためにOCIRは用意しなくてよかった。
  • 後で気づいたのですが、事前構成済みファンクションはファンクションサービスに対する以下のポリシーがなくても動いてました。
    • Allow service FaaS to use virtual-network-family in compartment <コンパートメント名>
    • Allow service FaaS to read repos in compartment <コンパートメント名>
  • などなど、普通のファンクションとは少しずつ違うようですが、事前の準備とかを気にせずほんとにマニュアル記載のとおり簡単に動かせるという印象でした。
  • 事前構築済ファンクション・カタログ
    • その他の事前構成済みファンクション一覧。
    • 実機確認だと、カタログにある「Wallet関数を使用したデータベース・シークレットのローテーション」と「Walletファンクションを使用しないデータベース・シークレット・ローテーション」はコンソールから選べなさそうだった。ADB作成したらでてくる?
  • OCI Architecture Diagram Toolkit
    • Cloud Shellのアイコンは用意されてないことに気づきました。

以上。

2
0
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
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?