ローカル開発環境の準備

Oracle Functionsを使用してファンクションの作成およびデプロイを開始する前に、ファンクション開発用のローカル環境を設定する必要があります。

クラウド・シェルまたはOracle Cloud Infrastructureコンピュート・インスタンスを開発環境として使用できますが、このドキュメントではファンクション開発にローカルLinux環境を使用することを前提としています。

始める前に

ファンクション開発用のローカルLinuxインスタンスを設定するためにこの項で説明するタスクに加えて、次のタスクも実行する必要があります。

  • ファンクションをローカルで開発するには、GitHubからFn Project開発プラットフォームをインストールします。

  • ローカル・インスタンスにDockerバージョン17.10.0以上がインストールされていることを確認します。

    LinuxでのDockerのインストールまたはアップグレードの詳細は、Oracle Container Runtime for Dockerユーザーズ・ガイドを参照してください。

署名キーの作成

Oracle Functionsを使用する前に、Oracle Cloud Infrastructure API署名キーを設定する必要があります。

  1. ファンクション開発者としてローカル・マシン開発環境にログインします。
  2. 次のように入力して、パスフレーズで暗号化された秘密キーを生成します。
    $ openssl genrsa -out ~/.oci/<private-key-file-name>.pem -aes128 2048

    ここで、<private-key-file-name>は秘密キー・ファイルの名前です。

  3. プロンプトが表示されたら、秘密鍵ファイルを暗号化するためのパスフレーズを入力します。後で必要になるため、必ず入力したパスフレーズを書き留めてください。
  4. 要求されたら、確認のためにパスフレーズを再入力します。
  5. 自分のみが読めるように、ファイルの権限を変更してください。
    $ chmod go-rwx ~/.oci/<private-key-file-name>.pem

    <private-key-file-name>は秘密キー・ファイルの名前です。

  6. 次のように入力して、公開キーを生成します(秘密キーの作成時に指定したパスフレーズと同じパスフレーズで暗号化され、秘密キー・ファイルと同じ場所にあります)。
    $ openssl rsa -pubout -in ~/.oci/<private-key-file-name>.pem -out ~/.oci/<public-key-file-name>.pem

    ここで、<private-key-file-name>は秘密キー・ファイルの名前、<public-key-file-name>は公開キー・ファイル用に選択した名前です。

  7. プロンプトが表示されたら、秘密キー・ファイルを暗号化するために以前に入力したパスフレーズと同じパスフレーズを入力します。
  8. 次のように入力して、作成した公開キー・ファイルの内容をコピーします。
    $ cat ~/.oci/<public-key-file-name>.pem | pbcopy

    <public-key-file-name>は、公開キー・ファイルの任意の名前です。

  9. ファンクション開発者としてコンソールにログインし、右上隅にある「ユーザー」メニューを開き、「ユーザー設定」を選択します。
  10. APIキー・ページで、「公開キーの追加」をクリックします。公開キーの値をウィンドウに貼り付けて、「追加」をクリックします。キーがアップロードされ、そのフィンガープリントが表示されます。

コマンド行インタフェース(CLI)プロファイルの作成

Oracle Functionsを使用する前に、ファンクションの作成およびデプロイに使用するユーザー・アカウントの資格証明プロファイルを含むOracle Cloud Infrastructure CLI構成ファイルが必要です。

Oracle Cloud Infrastructure CLI構成ファイルには、複数のプロファイルを含めることができます。すでに1つ以上のプロファイルを含む構成ファイルがある場合は、Oracle Functionsを使用してファンクションを作成およびデプロイするユーザーの既存のファイルに新しいプロファイルを追加する必要があります。

  1. ファンクション開発者としてローカル・マシン開発環境にログインします。
  2. ファイル~/.oci/configをテキスト・エディタで開きます。(ディレクトリまたはファイル(あるいはその両方)が存在しない場合は作成します)。
  3. 次のように、~.oci/configファイルに新しいプロファイルを追加します。
    [<profile-name>]
    user=<user-ocid>
    fingerprint=<public-key-fingerprint>
    key_file=<full-path-to-private-key-pem-file>
    tenancy=<tenancy-ocid>
    region=<region-name>
    pass_phrase=<passphrase>

    ここでは:

    • <profile-name>は、プロファイルの任意の名前です。
    • <user-ocid>は、ファンクションの作成およびデプロイに使用するOracle Cloud Infrastructureユーザー・アカウントのOCIDです。
    • <public-key-fingerprint>は、以前にコンソールでアップロードした公開APIキー値のフィンガープリントです。
    • <full-path-to-private-key-pem-file>は、以前に作成した秘密キー・ファイルのフルパスです。
    • <tenancy-ocid>は、ファンクションを作成およびデプロイするテナンシのOCIDです。
    • <region-identifier>は、ファンクションを作成およびデプロイするOracle Cloud Infrastructureリージョンの識別子です。たとえば、us-phoenix-1です。
    • <passphrase>は、公開キーまたは秘密キーの作成時に指定したパスフレーズです。
  4. ファイルを保存して閉じます。

oci - curlスクリプトのコピーおよび構成

スクリプトを使用して関数を起動できます。oci-curlスクリプトは、スクリプト本体で指定した資格証明に基づいて署名付きリクエストを作成します。

oci-curlを使用してファンクションを起動するには、同じテナンシ内のリソースへのアクセス権を付与され、ファンクションと同じコンパートメントに属しているOracle Cloud Infrastructureユーザーの資格証明を指定する必要があります。

通常は、開発環境用に構成されたファンクション開発者としてファンクションを呼び出します。次の手順では、その場合を想定しています。

  1. 開発環境にサインインします。
  2. 次のように、開発環境でoci-curlスクリプト・ファイルのコピーを作成し、そのファイルに資格証明を追加します。
    1. ブラウザで、https://docs.cloud.oracle.com/iaas/Content/Resources/Assets/signing_sample_bash.txtに移動してoci - curlコードをRAWテキストとして表示します。
    2. すべてのテキストを選択してコピーします。
    3. テキスト・エディタで、新しいファイルを便利な場所に開きます。

      たとえば、ターミナル・ウィンドウで、ホーム・ディレクトリに新しいサブディレクトリを作成し、次のように入力してそのディレクトリに新しいファイルを開くことができます。

      $ cd ~
      
      $ mkdir oci-curl
      
      $ vim ~/oci-curl/oci-curl.sh

      新しいファイルの名前と場所はユーザーが決定しますが、次の手順では~/oci-curl/oci-curl.shを想定しています。

    4. 以前にコピーしたoci-curlスクリプト・コードを新しいファイルに貼り付けます。
    5. ファイルを保存しますが、資格証明を追加できるように開いたままにします。
  3. oci-curl.shファイル内のサンプル資格証明を、ファンクションを起動するユーザー・アカウントの資格証明で置き換えます。
    local tenancyId="<tenancy_id>";
    local authUserId="<user_id>";
    local keyFingerprint="<public_fingerprint>";
    local privateKeyPath="<private_key_path>";

    ここでは:

    • <tenancy_id>は、ファンクションがデプロイされているテナンシのOCIDです。
    • <user_id>は、ファンクションを実行するユーザー・アカウントのOCIDです。ユーザー・アカウントは、同じテナンシ内のリソースへのアクセス権を持ち、ファンクションと同じコンパートメントに属している必要があります。
    • <public_fingerprint>は、Oracle Cloud Infrastructureにアップロードされたユーザーの公開キーのフィンガープリントです。
    • <private_key_path>は、フィンガープリントを提供した公開キーと対になった秘密キー・ファイルのフルパスです。次に例を示します。
      local privateKeyPath="/Users/johndoe/.oci/john_api_key_private.pem";
  4. oci-curl.shファイルを保存して閉じます。

Fn Projectコマンド行インタフェース(CLI)のインストール

Oracle Functionsを使用する前に、Fn Projectのコマンドライン・インタフェース(CLI)を開発環境にインストールする必要があります。

この手順では、curlを使用してLinuxインスタンスにCLIをインストールします。その他のオペレーティングシステムの手順は、GitHubのFn Projectのreadmeファイルに記載されています。

  1. ファンクション開発者として開発環境にログインします。
  2. 次のコマンドを使用して、インストール・スクリプトを取得して実行します。
    $ curl -LSs https://raw.githubusercontent.com/fnproject/cli/master/install | sh
    
    

    パスワードを要求されたら、スーパーユーザーのパスワードを入力します。

  3. 端末ウィンドウで、次のように入力してCLIがインストールされたことを確認します。
    $ fn version

    CLIが正しくインストールされている場合は、バージョンが表示されます。

Fnコマンド・ライン・インタフェース・コンテキストの作成

Fn Projectコマンドライン・インタフェース(CLI)は、最初にインストールされると、ローカル開発用に構成されます。Oracle Cloud Infrastructureテナンシに接続するようにFn ProjectのCLIを構成するには、新しいコンテキストを作成する必要があります。

コンテキストは、Oracle Functionsエンドポイント、デプロイされたファンクションが属するコンパートメントのOCID、およびイメージのプッシュとプルを行うDockerレジストリのアドレスを指定します。それぞれが.yaml形式で異なるコンテキスト・ファイルに格納されている複数のコンテキストを定義できます。

  1. ファンクション開発者として開発環境にログインします。
  2. 端末ウィンドウで、Oracle Cloud Infrastructureの新しいFn Project CLIコンテキストを作成します。
    $ fn create context <my-context> --provider oracle

    ここで、<my-context>は選択した名前です。

  3. Fn ProjectのCLIで新しいコンテキストを使用することを指定します。
    $ fn use context <my-context>

    ここで、<my-context>は指定したコンテキスト名です。

  4. 使用するコマンドライン・インタフェース・プロファイルの名前を指定してください:
    $ fn update context oracle.profile <profile-name>
  5. デプロイされたファンクションをデプロイするコンパートメントOCIDを指定します:
    $ fn update context oracle.compartment-id <compartment-ocid>
  6. APIをコールするときに使用するエンドポイントを指定します。
    $ fn update context api-url <api-endpoint>
    <api-endpoint>は、次のいずれかの形式のエンドポイントです。
    https://functions.<region-identifier>.oci.oraclecloud.com
    <region-identifier>は、ファンクションを作成およびデプロイするOracle Cloud Infrastructureリージョンの識別子です。次に例を示します。
    us-phoenix-1
  7. Oracle Functionsで使用するDockerレジストリのアドレスを使用して新しいコンテキストを構成します。
    $ fn update context registry <region-key>.ocir.io/<tenancy-namespace>/<repo-name>
    ここでは:
    • <region-key>は、Oracle Cloud Infrastructure Registryリージョンのキーです。たとえば、フェニックスの場合はphxです。

      Oracleでは、指定したDockerレジストリを、ファンクションを実行するサブネットと同じリージョンに配置することをお薦めします。

    • <tenancy-namespace>は、リポジトリを作成するテナンシの自動生成されたOracle Cloud Infrastructure Object Storageネームスペース文字列です(テナンシ情報ページに表示されます)。
    • <repo-name>は、デプロイするファンクションの名前の前に付加するリポジトリ名です。

    次に例を示します。

    $ fn update context registry phx.ocir.io/ansh81vru1zp/my-repo

認証トークンの作成

Oracle Cloud Infrastructureでファンクションをデプロイするには、DockerをOracle Cloud Infrastructure Registryにサインインするときにパスワードとして使用する認証トークンを作成する必要があります。

  1. Oracle Cloud Infrastructureコンソールにサインインし、「ユーザー」アイコンをクリックして、「ユーザー設定」を選択します。
  2. 新しい認証トークンを作成するには、「リソース」セクションで「認証トークン」をクリックし、「トークンの生成」をクリックします。
  3. 認証トークンの説明を入力し、「トークンの生成」をクリックします。表示されたら、トークンをコピーします。
  4. コピー」リンクをクリックして、トークン情報をセキュアな場所に格納します。これは、ダイアログを閉じると、コンソールにトークンが再度表示されなくなるためです。
  5. 閉じる」をクリックします。

Oracle Cloud Infrastructure Registryにサインイン

Oracle Functionsを使用する前に、ファンクションをDockerイメージとして格納するDockerレジストリにDockerをサインインする必要があります。これは、Fn Projectのコマンドライン・インタフェース(CLI)コンテキストで以前に指定したDockerレジストリです。

レジストリにサインインするには、まず次のことを行っておく必要があります。
  • 開発環境でのDockerのインストールおよび起動
  • Fnコマンド行インタフェース(CLI)のOracle Cloud Infrastructureコンテキストを作成しました
  • ユーザーのOracle Cloud Infrastructure認証トークンを作成しました

ファンクションは、Oracle Cloud Infrastructure上に構築されたOracle管理レジストリあるOracle Cloud Infrastructure Registryのパブリック・リポジトリおよびプライベート・リポジトリに格納できます。

次のステップを完了するには、Oracle Cloud Infrastructure Object Storageのテナンシ・ネームスペース、ユーザー名およびユーザーの認証トークンを指定する必要があります。

DockerをOracle Cloud Infrastructure Registryにサインインするには:

  1. ファンクション開発者として開発環境にサインインします。
  2. ターミナル・ウィンドウで、Oracle Cloud Infrastructure Registryにサインインします。
    $ docker login <region-key>.ocir.io

    <region-key>は、Fn ProjectのCLIコンテキストで指定されたOracle Cloud Infrastructure Registryリージョンのキーです。たとえば、フェニックスの場合はphxです。

  3. プロンプトが表示されたら、ファンクションを作成およびデプロイするユーザーのユーザー名を入力します。
    <tenancy-namespace>/<username>
    ここでは:
    • <tenancy-namespace>は、リポジトリを作成するテナンシの自動生成されたOracle Cloud Infrastructure Object Storageネームスペース文字列です(テナンシ情報ページに表示されます)。
    • <username>は、ファンクションを作成およびデプロイするユーザーです。
    テナンシがOracle Identity Cloud Serviceとフェデレートされている場合は、次の形式を使用します。
    <tenancy-namespace>/oracleidentitycloudservice/<username>
  4. パスワードを求めるプロンプトが表示されたら、ユーザーのOracle Cloud Infrastructure認証トークンを入力します。