[Cloud] VMインスタンスのサイジングのワークロードに応じた調整/Right-Size Your VM Instances to Support Your Workload

原文はこちら

ビジネスは常に変化していくものです。時にはその変化は、例えば支払いや流通のカレンダーに紐付いた、周期的なものであることもあります。しかし多くの場合には変化はダイナミックで、予期し難いものです。あなたの業務の量が変わるにつれて、コンピュートリソースをスケールアップして性能を向上したり、スケールダウンしてコストを減らしたりすることを、迅速にできるようにしておく必要があるでしょう。というわけで、Oracle Cloud Infrastructure上に存在しているあなたのVirtual Machine(VM)インスタンスは、インスタンスを再構築したりアプリケーションを再デプロイしたりする必要なしにCPU、メモリ、ネットワーク帯域幅を変えられるようになりました。

サイジング調整が容易に

VMインスタンスを開始するときにはいずれかのシェイプ(あるいはテンプレート)を選択し、それによりOCPUの数、メモリの量、ネットワーク帯域幅が決定されます。これまでは、将来的に必要になると想定される性能要件を加味した上で十分なリソースを持ったシェイプを選んで置く必要がありました。あなたのビジネスが予想よりもハイペースで成長した場合、新しいインスタンスを開始し、そこでアプリケーションを再構成する必要が生じていました。これからは、既存のインスタンスのシェイプを、アプリケーションとインスタンスプロパティを保持したまま、一回のリブートだけで変更することができるようになりました。
処理量の急な増大が来そう?たった数回のクリックだけで、VMインスタンスをより性能のよい構成にスケールアップすることができます。また、必要がなくなったらコスト効率の良い構成に変更するのも同様に簡単です。必要な数のOCPU、メモリ量、ネットワーク帯域幅を備えたシェイプを選べます。また、最新のIntel、AMDのプロセッサーを利用するようにシェイプを変えることもできます。
シェイプ変更のプロセスにはリブートが必要となりますが、ブロックボリュームやVNIC、流動的/予約済パブリックIPなどのインスタンスプロパティには影響ありません。より多いOCPU、メモリ、ネットワーク帯域幅を備えた新しいシェイプを利用するのに、アプリケーションを再構成したり、再インストールしたりする必要はないのです。

VMインスタンスシェイプの変更

コンソールからサイズ変更したいインスタンスの詳細ページを開き、ActionsChange Shapeとクリックします。
Screenshot of an instance details page highlighting the Change Shape option and showing the current instance shape, VM.Standard1.1.
既存のシェイプとOSイメージで利用可能なシェイプのリストを表示するシェイプ選択画面が開きます。プロセッサータイプ、OCPUの数、メモリ量、ネットワーク帯域幅を勘案して使いたいシェイプを選択しましょう。そしてChange Shapeをクリック。
Screenshot that shows the Change Shape panel, highlighting the current shape, the list of available shapes, and the chosen new shape, VM.Standard2.4.
インスタンスが稼働中の場合、再起動されます。停止中のインスタンスのシェイプを変更する場合には、シェイプは変更されますが停止されたままです。
インスタンスが再起動された後、指定したシェイプに更新されており、インスタンスプロパティと付随物はそのままになっています。これであなたのワークロードのための新しいVMリソースが利用可能になったというわけです。
APIや他の開発者ツールでは、UpdateInstanceオペレーションを使うことでVMシェイプを変更できます。
シェイプ変更機能はすべてのリージョンで利用可能で、VM StandardとVM GPU3インスタンスでサポートされています。OSイメージと元のシェイプのプロセッサーにより、新しいシェイプのターゲットとして何が選べるかが決まります。
シェイプを変更すると、新しいシェイプの基準で課金が発生します。あなたのアプリケーションに必要なライセンスによっては、VMのOCPU数を増やすことで付随的なコストが発生する場合があります。
インスタンスのシェイプ変更方法Compute VMのシェイプのリストについてのより詳細な情報についてはOracle Cloud Infrastructureのドキュメントをご覧ください。
Oracle Cloud Infrastructureのこうした新しい機能、また、他のエンタープライズグレードの機能について、ぜひ体験してみていただきたいです。300ドル分の無料クレジット付きのトライアルで簡単に試してみていただけます。詳しい情報はOracle Cloud Infrastructure Getting Started guideCompute service overviewFAQをご覧ください。

[Storage] ブロックボリュームの複数インスタンスアタッチ機能を使ったOCI上での共有ストレージの作成/Using the Multiple-Instance Attach Block Volume Feature to Create a Shared File System on Oracle Cloud Infrastructure

原文はこちら

共有ファイルシステムを使いたいというのはとてもよくあるご要望です。共有ファイルシステムは複数アプリケーションが同一のデータにアクセスできるようにしてくれます。また、たとえば複数ユーザーが同時に同一の情報にアクセスする、といったことも可能になります。オンプレミスでは、複数コネクションをサポートするNASやSANデバイスがあれば共有ファイルシステムを使うことができますが、クラウドではどうしたらいいのでしょうか?

iSCSI、NFS、SMBやDRBDといったテクノロジーを用いることで、ブロックデバイスをふたつあるいはそれ以上のクラウドインスタンスで共有することができます。こうしたサービスで複数ユーザーがRead/Writeオペレーションを同時に行うことができるようにするには、Oracle Cluster File System Version 2(OCFS2)やGlusterFSといったクラスターファイルシステムサービスをセットアップする前にいくつか追加の設定をしておくことが必要になります。
Oracle Cloud Infrastructure Block Volumeに新たに追加された複数インスタンスアタッチの共有ボリュームオプションでは、こうした共有サービスのセットアップは必要ありません。このオプションを用いると単一のブロックボリュームを複数のコンピュートインスタンスにアタッチでき、それらのインスタンスから同一のデータに並列でRead/Writeアクセスをできるようになります。
ブロックボリュームをすべてのインスタンスにアタッチしたら、次のステップはクラスターアウェアな(共有)ファイルシステムを使うことです。このポストではOCSF2を新しい複数インスタンスアタッチのオプションで用いる手順を説明していきます。

アーキテクチャ

以下の図で示しているのが、複数インスタンスにアタッチして共有されたRead/Writeのブロックボリュームのアーキテクチャです。
Diagram that shows the architecture for attaching a sharable, read/write block volume to multiple instances.

なんでOCFS2?

OCFS2はクラスター内でストレージのパフォーマンスおよび可用性を向上するために使用することを想定された、汎用用途の共有ディスク・ファイルシステムです。OCFS2はローカルファイルシステム・セマンティクスを提供しているため、ほとんどすべてのアプリケーションで使うことができます。クラスターアウェアなアプリケーションでは、複数クラスターノードからのキャッシュ・コヒーレントなパラレルI/Oを使用してクラスター内のアクティビティを調整することができます。あるいは、あるノードがダウンしたときに、アベイラブル・ファイルシステム機能を使って別のノードにフェイルオーバすることもできます。
OCFS2にはエンタープライズレベルの処理環境でのデプロイメントに適した、多くの機能が備わっています:
  • 順序付けされたWrite-Backデータジャーナルログにより、電源障害やシステムクラッシュなどの障害時にファイルシステムの整合性を保護
  • 512 byteから4KBまでのブロックサイズに対応し、ファイルシステムのクラスターサイズは4KBから1MBに対応。クラスターサイズが4KBのときにサポートされる最大ボリュームサイズは16TB。クラスターサイズが1MBのときには理論上はボリュームサイズは4PBが可能ですが、テストされていません。
  • 非常に大きなファイルの効率的な格納のためのExtent-basedアロケーション
  • 疎なファイル、インラインデータ、未書き込み領域、ホールパンチング、reflink、アロケーション予約といった高性能、高効率なストレージのためのアロケーション最適化のサポート
  • 非常に多数のオブジェクトが格納されていたとしてもディレクトリに効率的にアクセス可能にするためのディレクトリ・インデックシング
  • 破損したinodeとディレクトリを検知するためのメタデータ・チェックサム
  • 通常ファイル、ディレクトリ、シンボリックリンクなどのファイルシステムオブジェクトに数の制限なしにname/valueペアを付与するための拡張アトリビュート
  • トラディショナルなファイルーアクセスパーミッションモデルに加え、POSIX ACLおよびSELinuxへの拡張されたセキュリティサポート
  • ユーザーおよびグループQuotaのサポート
  • 32bitと64bit、リトルエンディアン(x86,x86_64,ia64)とビッグエンディアン(ppc64)アーキテクチャの異種混合ノードから成るクラスターのサポート
  • クラスターノードからの並列アクセスを管理する分散ロックマネージャ(DLM)を備えた容易に設定できるin-kernelのクラスタースタック(O2CB)
  • バッファ、ダイレクト、非同期、スプライスおよびmemory-mapped I/Oのサポート
  • ext3ファイルシステムと同様のパラメータを用いるツールセット

はじめてみよう

前述のアーキテクチャのために、大枠では以下の設定ステップが必要になります:
  1. Oracle Cloud Infrastructure Block Volumeを複数インスタンスにアタッチ
  2. OCFS2/O2CBクラスターノードをセットアップ
  3. OCFS2ファイルシステムとマウントポイントの作成

ポート

設定作業を開始する前に、利用するVirtual Cloud Network(VCN)のセキュリティリストの7777番と3260番のポートを開放しておく必要があります。Oracle Cloud Infrastructureのコンソールで、VCNセキュリティリストを編集して以下のステップのうちいずれかひとつを実行してください。
  • インターナルサブネットCIDR(172.0.0.0/16 - 非パブリックネットワーク)のすべてのプロトコルをオープン:
    Source: 172.0.0.0/16
    IP Protocol: All Protocols
    Allows: all traffic for all ports
  • 必要なポートだけをオープン。7777と3260:
    Source: 172.0.0.0/16
    IP Protocol: TCP
    Source Port Range: All
    Destination Port Range: 7777
    Allows: TCP traffic for ports: 7777
    Source: 172.0.0.0/16
    IP Protocol: TCP
    Source Port Range: All
    Destination Port Range: 3260
    Allows: TCP traffic for ports: 3260
注意:ポート7777と3260はローカルOSファイアウォールでもオープンしておく必要があります。Oracle Linx 7.xでの必要なコマンドは以下の通りです。別のOSを利用している場合はドキュメントを参照して実施してください。
  • sudo firewall-cmd --zone=public --permanent --add-port=7777/tcp
  • sudo firewall-cmd --zone=public --permanent --add-port=3260/tcp
  • sudo firewall-cmd --complete-reload

DNS

さらに、DNSが適切に動作していること、当該コンピュートインスタンスがテナンシーのAvailability Domainをまたいで通信できていることを確認しください。以下は/etc/resolv.conf ファイルの例です。
$ cat /etc/resolv.conf
; generated by /usr/sbin/dhclient-script
search baremetal.oraclevcn.com publicsubnetad1.baremetal.oraclevcn.com publicsubnetad2.baremetal.oraclevcn.com publicsubnetad3.baremetal.oraclevcn.com
nameserver 169.254.169.254
resolv.conf ファイルの中にAvailability Domain DNSエントリすべてが記載されている必要があります。

環境

この環境には以下のコンピュートインスタンスがあります:
RoleInstanceIP AddressOS
OCFS2 Node1node1.publicsubnetad1.baremetal.oraclevcn.com172.0.0.41Oracle Linux 7.x x86_64
OCFS2 Node2node2.publicsubnetad2.baremetal.oraclevcn.com172.0.1.42Oracle Linux 7.x x86_64


OCFS2の構成

Cluster Stackの設定ファイルの作成

  1. 必要なOCFS2パッケージのインストール:
    $ sudo yum install ocfs2-tools-devel ocfs2-tools -y
  2.  o2cb コマンドまたはテキストエディタで設定ファイルを作成します。ここでは以下のコマンドでクラスター定義を作成しましょう。このコマンドは /etc/ocfs2/cluster.conf のクラスター設定ファイルを新たに作成します。
    $ sudo o2cb add-cluster ociocfs2
  3. それぞれのノードについて、以下のコマンドでノードを定義します:
    $ sudo o2cb add-node ociocfs2 node1 --ip 172.0.0.41
    $ sudo o2cb add-node ociocfs2 node2 --ip 172.0.1.42
    注意:ノード名は/etc/sysconfig/networkで設定されるシステムのHOSTNAMEと同一の値である必要があります。また、IPアドレスはクラスター内でのプライベート通信でそのノードが使うものになります。/etc/ocfs2/cluster.confのクラスター設定ファイルをコピーし、クラスター内のそれぞれのノードに配置しましょう。なお、クラスター設定ファイルに行った更新は、クラスタースタックの再起動まで反映されません。
    以下の/etc/ocfs2/cluster.confの設定ファイルでは、2つのノードからなるociocfs2という名前のクラスターを、ローカルハートビート付きで定義しています。このブログポスト内で使っている設定はこれです。
    $ sudo cat /etc/ocfs2/cluster.conf
    cluster:
            heartbeat_mode = local
            node_count = 2
            name = ociocfs2
     
    node:
            number = 0
            cluster = ociocfs2
            ip_port = 7777
            ip_address = 172.0.0.41
            name = node1
     
    node:
            number = 1
            cluster = ociocfs2
            ip_port = 7777
            ip_address = 172.0.1.42
            name = node2

Cluster Stackの設定

  1. クラスターの各ノードで以下のコマンドを実行します。オプションについてはドキュメントに記載があります。
    $ sudo /sbin/o2cb.init configure
    Configuring the O2CB driver.
     
    This will configure the on-boot properties of the O2CB driver.
    The following questions will determine whether the driver is loaded on
    boot. The current values will be shown in brackets ('[]'). Hitting
    <ENTER> without typing an answer will keep that current value. Ctrl-C
    will abort.
     
    Load O2CB driver on boot (y/n) [y]:
    Cluster stack backing O2CB [o2cb]:
    Cluster to start on boot (Enter "none" to clear) [ocfs2]: ociocfs2
    Specify heartbeat dead threshold (>=7) [31]:
    Specify network idle timeout in ms (>=5000) [30000]:
    Specify network keepalive delay in ms (>=1000) [2000]:
    Specify network reconnect delay in ms (>=2000) [2000]:
    Writing O2CB configuration: OK
    checking debugfs...
    Setting cluster stack "o2cb": OK
    Registering O2CB cluster "ociocfs2": OK
    Setting O2CB cluster timeouts : OK
    Starting global heartbeat for cluster "ociocfs2": OK
  2. Cluster Stackの設定を確認するには、/sbin/o2cb.init status コマンドを実行します:
    $ sudo /sbin/o2cb.init status
    Driver for "configfs": Loaded
    Filesystem "configfs": Mounted
    Stack glue driver: Loaded
    Stack plugin "o2cb": Loaded
    Driver for "ocfs2_dlmfs": Loaded
    Filesystem "ocfs2_dlmfs": Mounted
    Checking O2CB cluster "ociocfs2": Online
      Heartbeat dead threshold: 31
      Network idle timeout: 30000
      Network keepalive delay: 2000
      Network reconnect delay: 2000
      Heartbeat mode: Local
    Checking O2CB heartbeat: Active
    Debug file system at /sys/kernel/debug: mounted
    この例では、クラスターはオンラインになっており、ローカルハートビートモードを使用しています。ボリュームが設定されていない場合、O2CBハートビートはActiveではなくNot Activeと表示されます。
  3. o2cbとocfs2のサービスを設定し、ネットワークが有効化されたあとに起動時に開始されるようにしておきます:
    $ sudo systemctl enable o2cb
    $ sudo systemctl enable ocfs2
    これらの設定により、ノードはOCFS2ボリュームをシステム開始時に自動的にマウントできるようになります。

クラスターオペレーション用のカーネルの設定

クラスターの適正なオペレーションのために、以下の表に示すカーネル設定を行っておきます:
Kernel SettingDescription
panic
パニックが何秒間続いたらシステムが自動的に自身をリセットするかを定義する値
値が0の場合、システムは応答をやめ、トラブルシューティングのためにパニックの詳細な情報を収集することができる。これがデフォルトの値である。
自動リセットを有効にするには非ゼロの値をセットする。メモリイメージ(vmcore)が必要な場合には、Kdumpがこのイメージを生成するのに十分な時間を与える。推奨値は30秒だが、大規模なシステムではより長い時間が必要。
panic_on_oopskernel oopsが起きたときにシステムが必ずパニックするようにするかの定義。クラスターオペレーションに必要なカーネルスレッドがクラッシュした場合、システムは自身をリセットする必要がある。でなければ、別のノードにはあるノードが応答が遅い、あるいは応答できないことがわからないかもしれず、クラスターオペレーションが停止してしまう。

  1. 各ノードで以下のコマンドを実行し、panicとpanic-on-oopsに推奨値をセットします:
    $ sudo sysctl kernel.panic=30
    $ sudo sysctl kernel.panic_on_oops=1
  2. /etc/sysctl.conf ファイルに以下のエントリーを追加し、変更を再起動後も永続するようにする:
    # Define panic and panic_on_oops for cluster operation
    kernel.panic=30
    kernel.panic_on_oops=1

Cluster Stackの起動と停止

以下の表にはCluster stackに関するオペレーションを実行するためのコマンドを示しています:
CommandDescription
/sbin/o2cb.init statusCheck the status of the cluster stack.
/sbin/o2cb.init onlineStart the cluster stack.
/sbin/o2cb.init offlineStop the cluster stack.
/sbin/o2cb.init unloadUnload the cluster stack.


ボリュームの作成とマウント

OCFS2ボリュームの作成

 mkfs.ocfs2 コマンドを使用してdevice.mkfs上にOCFS2ボリュームを作成します:
$ sudo mkfs.ocfs2 -L "ocfs2" /dev/sdb
mkfs.ocfs2 1.8.6
Cluster stack: classic o2cb
Label: ocfs2
Features: sparse extended-slotmap backup-super unwritten inline-data strict-journal-super xattr indexed-dirs refcount discontig-bg
Block size: 4096 (12 bits)
Cluster size: 4096 (12 bits)
Volume size: 12455405158400 (3040870400 clusters) (3040870400 blocks)
Cluster groups: 94274 (tail covers 512 clusters, rest cover 32256 clusters)
Extent allocator size: 780140544 (186 groups)
Journal size: 268435456
Node slots: 16
Creating bitmaps: done
Initializing superblock: done
Writing system files: done
Writing superblock: done
Writing backup superblock: 6 block(s)
Formatting Journals: done
Growing extent allocator: done
Formatting slot map: done
Formatting quota files: done
Writing lost+found: done
mkfs.ocfs2 successful

OCFS2ボリュームのマウント

  1. 以下の例で示されているように、システムが起動時にネットワーキングが開始されてからOCFS2をマントできるように、また、ネットワーキングが停止した際にはアンマウントするように、/etc/fstab内にnetdevオプションを指定してください。
    $ sudo mkdir /ocfs2
    $ sudo vi /etc/fstab
    #include the below line to mount your ocfs2 after a restart
    /dev/sdb /ocfs2 ocfs2     _netdev,defaults   0 0 
  2. mount -a を実行してOCFS2パーティションをfstabのエントリーをベースにマウントします。
おめでとうございます!クラスターファイルシステムはOracle Linx 7.xノード1とノード2の両方のサーバで/ocfs2でマウントされました!
クラスターが有効化されたアプリケーションでは、OCFS2ストレージを任意のネットワークアタッチされたストレージと同様に使うことができるようになりました。環境はよくよく考えて計画し、Availability DomainやOCFSなどの機能を活かしてOracle Cloud Infrastructure上に構築したソリューションの性能と可用性を向上していきましょう。

[API] 初めてのOracle Cloud API Gatewayの作成/Creating Your First API Gateway In The Oracle Cloud

原文はこちら

マイクロサービスとサーバレスは、これまでにも増して人気を得てきており、世界中のチームがこれらのパターンとアーキテクチャに非常に迅速に適応してきています。しかし、大規模にマイクロサービスとサーバレスを活用しようとする際にこうしたチームがまず直面するのが、フロントエンドとモバイルAPIのとても多くの、そして複雑なエンドポイントを管理しなければならないという課題です。そのため、多くのチームではバックエンドをシンプルにし、すべてのクライアントからの「シングルポイント・オブ・エントリー」にするために、API Gatewayを採用しています。API Gatewayはまた、アーキテクチャの中の個々のファンクションではなくゲートウェイのレベルで、レート制限やCORS、認証を簡単に実装できるようにしてくれます。
このブログポストではOracle Cloudの最新サービスのひとつであるAPI Gatewayを概覧していきます。
以下の順で進めていきます:
  • "Hello World"サーバレスファンクションの作成とデプロイ
  • API Gatewayに適したサブネットの作成
  • ダイナミックグループの作成とAPI Gatewayに必要なポリシーの適用
  • Gatewayの作成
  • Gatewayへの仕様のデプロイ
  • Gatewayのテスト

"Hello World"サーバレスファンクションの作成とデプロイ

以前にもOracle Functionsについてのブログを書いています→Oracle Functions:開発者のためのクイックスタートガイドドキュメントはとてもお役立ちですし、他にもOracleのホステッドサーバレスをどのように使うかについてのたくさんの情報がありますので、ここではサーバレスのための環境をどのようにセットアップするかについての詳細には立ち入りません。あなたはOracle Functionsのことを知っているものとして進めていきますので、必要であればこれらのリンクを参照してくださいね。
ではシンプルなサーバレスアプリケーションとファンクションを作成し、そのファンクションをデプロイしてみましょう。このファンクションの内容は今回関係なくて、ただ後にGatewayのテストで使いたいだけです。なので、ファンクションはサンプルの"Hello World"のままにしておきます。ランタイムもここでは関係ないので、Oracle FunctionsとFn Projectでサポートされているものならなんでもよいです。
$ fn create app gw-hello-world-app --annotation oracle.com/oci/subnetIds='["ocid1.subnet.oc1.phx..."]'
Successfully created app:  gw-hello-world-app
$ fn init --runtime node gw-hello-world-fn
Creating function at: /gw-hello-world-fn
Function boilerplate generated.
func.yaml created.
$ cd gw-hello-world-fn
$ fn deploy --app gw-hello-world-app                                                                              
Deploying gw-hello-world-fn to app: gw-hello-world-app
Bumped to version 0.0.3
Building image phx.ocir.io/toddrsharp/faas/gw-hello-world-fn:0.0.3 .........
Parts:  [phx.ocir.io toddrsharp faas gw-hello-world-fn:0.0.3]
Pushing phx.ocir.io/toddrsharp/faas/gw-hello-world-fn:0.0.3 to docker registry...The push refers to repository [phx.ocir.io/toddrsharp/faas/gw-hello-world-fn]
643fe44f12a4: Pushed
b279f8214e6b: Pushed
0adc398bfc34: Pushed
0b3e54ee2e85: Pushed
ad77849d4540: Pushed
5bef08742407: Pushed
0.0.3: digest: sha256:e16e74ce194d85a9658177f7637484aded9764e981e395dfcbcac2d018687cac size: 1571
Updating function gw-hello-world-fn using image phx.ocir.io/toddrsharp/faas/gw-hello-world-fn:0.0.3...
Successfully created function: gw-hello-world-fn with phx.ocir.io/toddrsharp/faas/gw-hello-world-fn:0.0.3
view rawfn-create-sh hosted with ❤ by GitHub
この時点でファンクションを fn CLIで呼び出しできます:
$ fn invoke gw-hello-world-app gw-hello-world-fn
{"message":"Hello World"}
view rawfn-invoke.sh hosted with ❤ by GitHub
しかし、HTTP(S)経由やOCI SDKを利用してファンクションを直接呼び出しするにはリクエストへの署名が必要です。ファンクションをインスペクトして呼び出しエンドポイントを取得してみましょう:
$ fn inspect gw-hello-world-app gw-hello-world-fn
view rawfn-inspect.sh hosted with ❤ by GitHub
注! fn inspect コールから id をコピーしておきましょう。これが後で必要になるファンクションのOCIDです!
呼び出ししようすると 401 Unauthorizedで失敗します:
$ curl -i -X GET https://[redacted].us-phoenix-1.functions.oci.oraclecloud.com/20181201/functions/ocid1.fnfunc.oc1.phx..../actions/invoke
HTTP/1.1 401 Unauthorized
Date: Fri, 22 Nov 2019 14:24:33 GMT
Content-Type: application/json
Content-Length: 57
Connection: keep-alive
Opc-Request-Id: /01DT9R03K21BT1A2RZJ0005QSH/01DT9R03K21BT1A2RZJ0005QSJ
Www-Authenticate: Signature headers="date (request-target) host"
{"code":"NotAuthenticated","message":"Not authenticated"}
view rawcurl-fn.sh hosted with ❤ by GitHub
But once we put our serverless function behind our gateway we can invoke it via HTTPS. Let's move on!
しかし、Gatewayのうしろにサーバレスファンクションを配置することによって、HTTPS経由で呼び出しができるようになります!やってみましょう!

API Gatewayに適したサブネットの作成

API Gateway用にHTTPSトラフィックのためのイングレスルールを設定したリージョナルサブネットが必要になります。ここでゃ既存のVCNの中にこのサブネットを作成していきましょう。
選んだセキュリティリストにポート443へのイングレスルールを追加します:
完了です。続いてもセキュリティについて…

ダイナミックグループの作成とAPI Gatewayに必要なポリシーの適用

API Gatewayではテナンシー内でのアクセス制御にダイナミックグループを使用します。なので、新しくダイナミックグループを作成していくつかのポリシーを設定する必要があります。Gatewayを作成するコンパートメントのOCIDが必要になるので、Identity -> Compartmentsから使うコンパートメントのOCIDをコピーしてください。次に、新規ダイナミックグループを以下の定義(コンパートメントOCIDは適切なものに置き換えて)で作成しましょう:
さて、あなたのテナンシーと新しく作成したダイナミックグループに対応するポリシーを作成します。グループ名とコンパートメント名はご自身のものに置き換えてください:
allow dynamic-group [your dynamic group] to use virtual-network-family in compartment [your compartment name]
allow dynamic-group [your dynamic group] to manage public-ips in compartment [your compartment name]
allow dynamic-group [your dynamic group] to use functions-family in compartment [your compartment name]
ご参考まで、わたしのテナンシーでのステートメントは以下のようになりました:
allow dynamic-group api-gw-group to use virtual-network-family in compartment faas-compartment
allow dynamic-group api-gw-group to manage public-ips in compartment faas-compartment
allow dynamic-group api-gw-group to use functions-family in compartment faas-compartment
それではGatewayを作成しましょう!

Gatewayの作成

Gatewayを作成するには、まずサイドバーメニューから'Developer Services'の配下の'API Gateway'を選択します。
'Create Gateway'をクリックしてダイアログを埋めていきます。先程作成したリージョナルサブネットを選択することを忘れないでください。
Gatewayはまず'Creating'のステータスになるでしょう。
数分くらいで、Gatewayは'Active'になります。

Gatewayへの仕様のデプロイ

デプロイメントを作成する前に、エンドポイントを定義するためデプロイメント仕様ファイルをJSONフォーマットで記述する必要があります。前述のファンクションOCIDが手元にあることを確認してください。では、 spec.json というファイルをファンクションのルートに以下の内容で作成しましょう(ファンクションOCIDはご自身のものに置換してください):
{
"routes": [
{
"path": "/hello",
"methods": [
"GET"
],
"backend": {
"type": "ORACLE_FUNCTIONS_BACKEND",
"functionId": "ocid1.fnfunc.oc1.phx..."
}
}
]
}
view rawspec.json hosted with ❤ by GitHub
このブログポストはLimited Availability期間のやり方で説明しているので手で作成したJSONでエンドポイントを定義する必要がありますが、GA後にはコンソールUIからかんたんに定義することができるようになります。
次に、Gateway詳細ページのサイドバーから'Deployments'をクリック。
そして'Deploy API'をクリック。
デプロイメントに名前をつけて、作成した spec.json を選択してパスのプレフィックスを入力します。
'Deploy'をクリックしてちょっと待てばデプロイメントは完了です。

Gatewayのテスト

Gateway詳細のページで、エンドポイントを見てみましょう。
ファンクションをテストするため、このエンドポイントをコピーしたものに spec.json で定義したパスを追加して、実行してみましょう!
$ curl -i -X GET https://[redacted].apigateway.us-phoenix-1.oci.customer-oci.com/v1/hello
HTTP/1.1 200 OK
Date: Fri, 22 Nov 2019 15:04:11 GMT
Content-Type: application/json
Connection: keep-alive
Content-Length: 25
Server: Oracle API Gateway
Strict-Transport-Security: max-age=31536000
X-XSS-Protection: 1; mode=block
X-Frame-Options: sameorigin
X-Content-Type-Options: nosniff
opc-request-id: /429E9723BB6BED8DB8D237876894DDF6/3E4A5D8760D59242A98AB8A91E2B0107
{"message":"Hello World"}
これはAPI Gatewayを使ってできることのほんのさわりです。デプロイメント仕様を拡張して他のファンクションや(Oracle Cloud上や外部の)HTTPエンドポイントをカバーしたり、レート制限や認証などを行うこともできます。