並列分散処理(へいれつぶんさんしょり、英: parallel distributed processing , PDP)とは、認知科学における人間をコンピューターのような記号処理系とみなす指導原理の下、遅くて不正確なハードウェアである「脳」を持つ人間が無意識下で行っているとされる情報処理方式、特にそのモデル(PDPモデル)を言う。
人間の認知を解明する認知科学において、情報の並列分散処理を論ずることが心の働きを理解するに不可欠であるとするコネクショニズムの登場と共に提案された。パーセプトロン、ニューラルネットワークの推論モデルである。
⇧ まぁ、確かに、あれこれ考えてしまうのが人間の性と言えなくもないですが、「並列」も「分散」もプログラミングだと実装が複雑になるって話で、人間っていうのは複雑なことをサラッと行っているんだな~、改めて思う今日この頃ですかね。
今回もどうでもいい話から入ってしまいましたが、 無料トライアルが終わるという時になって、
⇧ チュートリアルとかが見つかるという...
んで、Oracleの日本支部としては、PaaS(Platform as a Service)に力を入れたいのか分からんのだけれど、
⇧ PassS(Platform as a Service)以外の○○ as a Service 的なドキュメントが見当たらないという...
まぁ、
⇧ 上記サイト様によりますと、 ○○ as a Service ってのは結構キリがないぐらい出てくるみたいなのですが...
というわけで、せっかくなんで、Oracle Cloudでサーバレスを試してみようかと。
結論から申し上げますと、エラーが出て途中で行き詰ってるので、お時間のある方のみご照覧ください。
レッツトライ~。
Oracle CloudではFaaS(Function as a Service)はPaaS(Platform as a Service)の一部らしい
Oracle Cloudでは、PaaS(Platform as a Service)のドキュメントにFaaS(Function as a Service)が記載されていることから、FaaS(Function as a Service)はPaaS(Platform as a Service)に含まれるということみたいね。
一般的には、
⇧ 「PaaS(Platform as a Service)」と「SaaS(Software as a Service)」の間に位置するのが「FaaS(Function as a Service)」ということらしい。
ちなみに、
つまり私が言いたいのは、『FaaS、PaaS、CaaSといった区別は人工的なものだ』ということだ。私がKnativeを気に入っている理由は、『そんな区別などすっかり忘れてしまえ、Knativeはこれこれの機能を提供する』と宣言できるからだ。Knativeを『FaaS』と呼ぶ人がいれば、『PaaS』と呼ぶ人もいるだろう。『シンプルに使えるKubernetes』と表現する人もいるかもしれない。どう呼ばれようが、私にとってはどうでもいい。『あなたのニーズに合っているなら使ってくれ』ということに尽きる」
https://www.atmarkit.co.jp/ait/articles/1909/20/news068.html
⇧ 「PaaS(Platform as a Service)」とか「FaaS(Function as a Service)」とか「CaaS(Container as a Service)」とかの区別を無くしちゃえってのが「Knative」ってことらしいんだけど、何故、現場を混乱させようとすることをするのか...
「Knative」の解釈の仕方が複数通りになってしまうと、各々で文脈が異なって認識齟齬を生み出す結果にしかならんのだと思うのだが...
「Knative」については、
最新のサーバーレス ワークロードをビルド、デプロイ、管理できる Kubernetes ベースのプラットフォーム
⇧ 「サーバーレス」+「Kubernetes」ってことみたいね。
まぁ、脱線しましたが、ベンダー毎に独自解釈を定義されると、それだけ、デベロッパーにとっては負担になるので止めて欲しいんだけどな...
Oracle Cloud でサーバーレスを実施してみる
もう、無料トライアルが終わってしまうので、せめて、1つぐらいOracle Cloudの機能を使ってみようということで、Oracle Cloudでサーバーレスを試してみようということで、
⇧ 上記の2つのチュートリアルを実施すれば、サーバーレスの入門(ビギナー向け)が完了しそうな模様。
そんでは、「Oracle Functionことはじめ」のほうから実施していってみます。
Oracle Cloudの管理画面のUIが変わったのか、ドキュメントの誤りなのか分からんけど、キャプチャ画像と説明が一致してないので、合ってるのかよく分からん...
⇧ 明らかに、説明文とキャプチャ画像の選択が乖離しているというね...
チュートリアルの意味あるのかね...
⇧ というわけで、Issue 上げてみました。
Issueの回答が来る前に、無料トライアルが終わりそうなんで、致し方ないけど、正解が分からん状態でチュートリアルを進めました。
2020年10月22日(木):追記 ↓ ここから
18日後の本日、修正対応の旨の連絡が届きました。
まぁ、某Microsoftさんみたいに対応するする詐欺をすることもなく、ちゃんと利用者の声を拾ってくれるみたいなんで、ホっとしましたが、ドキュメントが整備されるまでは、無料トライアルは時期尚早だったかしらね...
ちなみに、Microsoft さん10年経っても対応しないという暴挙に!流石に大企業ともなると違いますね!
Now we are at year 2020 with corona.
It's 10 years and counting "soon"...
⇧ 10年経とうしてる時点で、コロナとか関係ない気がする。
Hi Is_mstn,
Yes, we can repro this issue on my side. And we have added it into our bug database.
Thank you for reporting it. I think it should be fixed soon. :)
Thanks again.
- 回答としてマーク Robinson Zhang 2009年12月21日 6:22
⇧ 気軽に、期待感を持たせることは言わないが吉ということでしょうね。
2020年10月22日(木):追記 ↑ ここまで
■事前準備
・ポリシーの設定
Oracle CloudでFaaS(Function as a Service)を使うために必要なポリシーを作成・設定を行います。
Oracle Cloudのコンソールにログインし、「アイデンティティ」>「ポリシー」を選択。
「ポリシーの作成」を選択。
以下を設定して「作成」を押下。
設定項目 | 設定内容 |
---|---|
名前 | 適当でOK。 |
説明 | 適当でOK。 |
ポリシーのバージョニング | ポリシーを最新の状態に維持 |
ポリシー・ビルダー ステートメント1 |
Allow service FaaS to use virtual-network-family in tenancy |
ポリシー・ビルダー ステートメント2 |
Allow service FaaS to read repos in tenancy |
まさかの、「ステートメント」がリストとかで選択できないから、テキスト直書きというね、UIが残念過ぎるのだが...
「ポリシー」が作成されました。
■コンピュートインスタンス・ネットワークの作成
・ネットワークの作成(VCN:Virtual Cloud NetWork)
まずは、ネットワークを作成します。
「ネットワーキング」>「仮想クラウド・ネットワーク」を選択。
表示された画面左下の"スコープ"内の"コンパートメント"をクリックし、ルートコンパートメント(各々の環境に合わせてください)を選択します。
※ルートコンパートメントはOracle Cloudの登録時に設定した名称になります。
コンパートメントが選択できたら、「VCNウィザードの起動」。(ドキュメントのキャプチャ画像が旧いのか、画面のUIが変わってるので)
「インターネット接続性を持つVCN」を選択し、「VCNウィザードの起動」を押下。(ドキュメントだと『"VPN接続およびインターネット接続性を持つVCN"を選択し、"ワークフローの起動"』っていう説明になってけど)
以下を設定し、「次」を押下。
設定項目 | 設定内容 |
---|---|
基本情報 VCN名 |
任意の名前(こだわりがなければ"Oracle Functions Handson") |
基本情報 コンパートメント |
ルートコンパートメント。 |
VCNとサブネット構成 VCN CIDRブロック |
10.0.0.0/16 |
VCNとサブネット構成 パブリック・サブネット CIDRブロック |
10.0.0.0/24 |
VCNとサブネット構成 プライベート・サブネット CIDRブロック |
10.0.1.0/24 |
「作成」を押下。
「リソース」の作成ですべて「完了」となればOK(エラーとか出た場合は、「プロビジョニングの再試行」とかすればOK。)
「仮想クラウド・ネットワークの表示」を押下。
ネットワークの作成(VCN:Virtual Cloud NetWork)が完了。
・コンピュートインスタンスの作成
続いて、Oracle Cloud 上で仮想マシンを作成します。(Oracle Functionsを動作させるために利用するコンピュートインスタンスの作成ってことなんだけど、おそらく、Oracle Functions のプログラムを配置するサーバー用のマシンってことかと)
「コンピュート」>「インスタンス」を選択。
「コンパートメント」が「ルートコンパートメント」に設定されてることを確認し、「インスタンスの作成」を押下。
「イメージの変更」を押下。
「Oracleイメージ」タブを選択。
「Oracle Cloud Developer Image」にチェックを入れ、「イメージの選択」を押下。
「シェイプ、ネットワークおよびストレージ・オプションの表示」のリンクをクリックし、「ネットワーキングの構成」が以下の設定になっていることを確認。
設定項目 | 設定内容 |
---|---|
仮想クラウド・ネットワーク・コンパートメント | ルートコンパートメント |
仮想クラウド・ネットワークの選択 | 「仮想クラウド・ネットワークの作成」で作成したネットワークを設定。 |
サブネット・コンパートメント | ルートコンパートメント |
サブネット | 「仮想クラウド・ネットワークの作成」で作成したパブリック・サブネットを設定。 |
パブリックIPアドレスの割当て | チェックを入れる |
続いて、作成するインスタンスとSSH接続するために、ローカル環境に配置している公開鍵を追加する。
デフォルトだと「SSHキー・ペアの生成」にチェックが付いていますが、既にSSHキー・ペアを作成している想定らしいのすが、SSHキー・ペアを作成していない場合は、「SSHキー・ペアの生成」を先に実施すれば良いかと。
今回は、「SSHキー・ペアの生成」で「秘密鍵」「公開鍵」を取得しておきます。
「秘密キーの保存」「公開キーの保存」で、ダウンロードできる模様。
⇧ 「秘密鍵」「公開鍵」がローカル環境にダウンロードされています。
適当な場所に移しておきます。(自分は「C:\Users\[ユーザー名]\.ssh\oracle-cloud\compute-instance」ってフォルダを作って、そこに配置しました。)
そしたら、「公開鍵」を作成しようとするインスタンスにアップロードします。
「公開キー・ファイルの選択」にチェックをし、「または場所を参照します。」のリンクを押下。
「公開鍵」を選択。(今回は、先ほど「SSHキー・ペアの生成」でダウンロードしておいた「公開鍵」を選択しました。)
「作成」を押下で。(仮想マシンのイメージを選択してから30分以上経ってると、同意の有効期限が切れてえらーになるので、その場合は、「インスタンスの作成」押下からやり直しで。自分は時間切れになってエラー出たのでやり直しました。なので、「インスタンス」の「名前」の採番が「1277」から「1322」に変わってます、って言うか僅か30分足らずで自分以外のユーザーによって50個ぐらいインスタンスが作られたってことか...。)
仮想マシンの作成が実施され、
「状態」が「成功」になれば、「インスタンス」が作成されたということらしい。
■Fn Project実行環境の構築
・インスタンスへログイン
ちなみに、「Fn Project」を使用するには、
Fn Projectを起動させるには、以下が必要です。
- 環境
- Docker 17.10 (or higher) がインストール済みの環境
今回は、"Oracle Cloud Developer Image"を使用しているので、既にDockerはインストールされています。
https://oracle-japan.github.io/paasdocs/documents/faas/oraclefunctions/handson/getting-started/
そのため、環境構築はFn Projectを動作させるために必要なFn CLIとFn Serverのインストールのみになります。
https://oracle-japan.github.io/paasdocs/documents/faas/oraclefunctions/handson/getting-started/
⇧ ってことみたい。
では、ログインですが、まずは、さきほど作成した「インスタンス」の「IPアドレス」を確認します。
で、「ユーザー名」を「opc」として、「秘密鍵」を指定してSSH接続を試みるも、はい、エラー。(と言うか、インスタンスのデフォルトのユーザー名は「opc」って考えておけば良いのか、「Oracle Cloud Developer Image」を使って作成したインスタンスに限るのか説明を載せて欲しいな...)
ssh -i [秘密鍵のパス] [接続先マシンのユーザー名]@[接続先マシンのIPアドレス]
⇧ って言うか「__PROGRAMDATA__\\ssh/ssh_config」ってどのフォルダのことを指してるのか分からんし...
「C:\ProgramData\ssh\ssh_config」ってことで良いのかしらね?
⇧ 上記の設定で怒られてるようなので、行ごと消します。
再度、接続を試みたところ、接続できました。
・Fn CLIとFn Serverのインストール
インスタンスに「Fn」をインストールで。その前に、「opc」ユーザーで「Docker」を操作できるように権限を付与。
sudo usermod -aG docker opc
で、一旦、ログアウトし、再ログイン。
そしたら、「Fn」をインストール。
curl -LSs https://raw.githubusercontent.com/fnproject/cli/master/install | sh
「fn start」でサーバー側も初期化しときます。
⇧ 起動が確認できたら、「Ctrlキー」+「C」でサーバーを停止しときます。
■Oracle Functions実行環境の構築
・OCI CLI初期設定
・OCI CLIのセットアップ
以下の記事で、CLIは使えるようにしているので、割愛できると思いきや、
何か、CLIを利用するマシンが異なると、設定が必要みたい...
- ユーザーのOCID
- テナンシのOCID
がCLIの設定に必要に なってくるみたいなので、確認。
まずは「ユーザーのOCID」を確認。
「OCID」を「コピー」でテキストエディタなどにコピペ。
続いて、「テナンシのOCID」を確認。
「OCID」を「コピー」でテキストエディタなどにコピペ。
そしたらば、スーパーユーザーに切り替えて、以下を実施。
oci setup config
⇧ 何も入力せず「Enterキー」を押下。
⇧ 「ユーザーのOCID」を設定して「Enterキー」を押下。
⇧ 「テナンシのOCID」を設定して「Enterキー」を押下。
⇧ 自分の利用している「リージョン」を設定して「Enterキー」を押下。
⇧ 「Y」を設定し「Enterキー」を押下。
⇧残りの質問は 何も入力せず「Enterキー」を押下。
以下のコマンドで、「公開鍵」を表示してテキストエディタなどにコピペしておきます。
cat /root/.oci/oci_api_key_public.pem
OCIコンソールで「公開鍵」を登録します。
「APIキー」を選択。
「公開キーの追加」を押下。
コピペしておいた「公開鍵」のテキストを張り付けて、「追加」を押下。
追加されました。
・Oracle Functions CLI contextの作成と設定
「アイデンティティ」>「コンパートメント」を選択。
「ルートコンパートメント」を選択。
「OCID」を「コピー」で。テキストエディタなんかにコピペしときます。
・認証tokenの作成
OCIR(Oracle Functionsを管理するOracle提供のプライベートDockerレジストリ)にログインするための認証tokenを作成。
「ユーザー名」を押下。
「認証トークン」を選択。
「トークンの生成」を押下。
「説明」を適当に入力し、「トークンの生成」を押下。
「コピー」を押下で、テキストエディタなどにコピペしておきます。
※再表示がされないようなので、確実に「コピー」してテキストエディタなどに保存しておきます。
■Oracle Functions開発環境の作成
・開発環境の作成
fn createコマンドを使用してcontext(開発環境)を作成。「my-context」部分は適当でOK。
fn create context [my-context] --provider oracle
・開発環境への切り替え
fn useコマンドを使用して、作成した環境に切り替えます。
fn use context [my-context]
・開発環境の設定
開発環境に以下を設定する。
コンパートメントIDを設定。(「アイデンティティ」>「コンパートメント」>「コンパートメントの詳細」で確認できる「OCID」のこと。)
fn update context oracle.compartment-id [compartment-ocid]
Oracle Functionsを呼び出す際のAPIエンドポイントを設定します。(自分が利用している「リージョン」を選択する。)
fn update context api-url https://functions.[リージョン].oraclecloud.com
OCIRを設定。(「tenancy-namespace」には、「管理」>「テナンシ詳細」で確認できる「オブジェクト・ストレージ・ネームスペース」の値を設定。「region-code」って言うのは、「CLI」のコマンドで確認できる「key」を小文字にしたものみたい。)
⇧ 自分の場合は、「リージョン」が「us-ashburn-1」なので「region-code」は「iad」になるということらしい。「repo-name」は何でも良さ気?なのかな、特に指定がないみたいなので。
では、以下のコマンドを実施で、OCIRを設定。
fn update context registry [region-code].ocir.io/[tenancy-namespace]/[repo-name]
Oracle Functionsで使用するprofile名を設定。
fn update context oracle.profile "DEFAULT"
OCIRにログインできることを確認。「Username」と「Password」は以下を設定。
項目 | 設定内容 |
---|---|
Username | [tenancy-namespace]/[ユーザーのOCIDと同じページに表示される電子メールの値] |
Password | 「認証tokenの作成」で作成し、コピペしておいたトークン |
docker login [region-code].ocir.io
・Oracle Functionsのアプリケーション作成
Oracle Functionsのアプリケーションの作成を行います。
「開発者サービス」>「ファンクション」を選択。
「アプリケーションの作成」を押下。
「名前」は適当でOK。ネットワークは、作成したネットワーク(VCN:Virtual Cloud NetWork)の内容を設定。「作成」を押下。
作成されました。
■ファンクションの作成
・ファンクションプロジェクトの作成
ファンクションプロジェクトを作成します。今回は、Javaで。
fn init --runtime java helloworld-func
・ファンクションのデプロイ
作成したファンクションのデプロイを行います。その前に、コマンドプロンプトをもう1つ起ち上げて、「Fn」のサーバーを起動しておきます。
で、デプロイしようとするも、
「Fn: unable to find tenancyID in environment or configuration.」とか言われるし...
いや、だから「tenancyID」は、ちゃんと設定してるんだけどな...
う~ん、手順通りアプリケーションも作成してるんだけどな...
試しに、「インスタンス」を再起動してみるも、変わらず...
気になるのは、「tenancyID」と「compartmentID」が全く同じ値になってるというところなんですよね...
手順通りに実施したつもりなんだけどな...
リカバリーの情報が少なくて、どうすりゃ良いか分からんし、これでビギナー向けってのが...やる気が出なくなるな...
とりあえず、
⇧ トラブルシューティングにも、それっぽい情報が無いしな...
う~ん、分からん...1日無駄に過ごしてしまったし、無料トライアルが終わっちまうし、踏んだり蹴ったりですな...
無料トライアルが終わっても実施できそうなら、再度、一からチュートリアルを実施してみますか。
その前に、Issueに出したんで、ドキュメント修正して欲しいけど...
今日も貴重な時間を無駄にしてしまった...こんなことなら小説を読んで過ごせば良かったな...
2020年10月5日(月)追記:↓ ここから
悲報...
無料トライアルが終わり、「ファンクション」は利用できないってよ
まぁ、サーバレスは、「Fn Project」を使用してローカル環境で試していくしかなさそうね...
2020年10月5日(月)追記:↑ ここまで
今回はこのへんで。