コマンドライン(CLI)でOCIを操作する - Oracle Cloud Infrastructureアドバンスド

Version 38

    目次に戻る : チュートリアル : Oracle Cloud Infrastructure を使ってみよう

     

    これまでのチュートリアルでは、Oracle Cloud Infrastructure(OCI) をコンソールを通して利用してきましたが、OCIにはこれらの操作をRESTfulなウェブサービスを通して実行するためのAPIと、それを呼び出すコマンド・ライン・インタフェース(CLI)が用意されています。

     

    この章では、手元の Windows PC 環境にCLIをインストールしてOCIの基本的な操作を行う手順を通じて、APIとCLIの動作について理解を深めます。

    また、セットアップしたCLIとBash環境を利用して、クラウド上に効率的にネットワークやインスタンスを作成する方法について学習します。

     

    所要時間 : 約50分

     

    前提条件 :

    1. チュートリアル : Oracle Cloud Infrastructure を使ってみよう - 第1章 コンソールへのアクセスとサービスの理解 を完了し、Oracle Cloud Infrastructure コンソールにアクセスでき、どこかのコンパートメント(ルート・コンパートメントも可)に対して管理権限を持っていること
    2. チュートリアルの第2章から第8章の内容についてひととおり理解していること(チュートリアルの実施することそのものは必須ではありませんが、一度目を通してコンソール上での操作について確認しておくことをお勧めします)

     

    注意 : チュートリアル内の画面ショットについては Oracle Cloud Infrastructure の現在のコンソール画面と異なっている場合があります

     

    1. CLIのインストール

     

    1-1. Pythonのインストール

    OCI の CLI は Python ベースで作成されているため、利用にあたってはまず Python を構成する必要があります。

    既に Python 2.7.5 以降、または Python 3.6 以降がインストールされている場合は、この手順はスキップすることができます。もしセットアップが完了していない場合は、この手順を実行してください。

    マニュアルでは Python2 および Python3 が利用できる旨が記述されていますが、2018年8月現在、Windows 環境において、Python 3 では OCI-CLIのインストール時に複数のエラーが発生するようです。Windows を利用している場合は、Python3 ではなくPython2の利用を推奨します。

    Pythonのセットアップは、各OSの方法に従ってください。以下は例として Windows 7 に Python 2.7.15 をセットアップする場合を解説しています。

     

    1. https://www.python.org/downloads/windows/ にアクセスし、最新の Python2 for Windows をダウンロードします
      以下手順は、Python 2.7.15 の場合をベースに解説しています。
    2. ダウンロードしたインストーラーを実行します
    3. Customize Python 2.7.15 という画面で、一番下にある Add python.exe to PATH というコンポーネントで Will be installed on local hard drive を選択します

      また、pip がインストールされる設定になっていることを確認し、Next ボタンを押します


    4. Complete the Python 2.7.15 Installer というメッセージが表示されたことを確認し、Finish ボタンを押します

      以上で Python for Windows のインストールは完了です

     

     

    1-2. OCI CLI のインストール

    次に、Oracle Cloud Infrastructure CLI のインストールを行います。CLI は Python のパッケージ管理ツールである pip を用いてインターネット越しにインストールすることができます。

     

    1. Windows のスタートメニューを開き、powershell と入力します

    2. 検索されたプログラム一覧にある Windows PowerShell を右クリックし、管理者として実行(A)... を選択します
      05.png

    3. pip のアップデートを実行します

      python -m pip install --upgrade pip


      もし、手元の Windows PC がインターネットに出るのにプロキシサーバーを経由する必要がある場合は、pipコマンドにプロキシサーバーを指定する必要があります。その場合は以下のように指定してください。

      python -m pip install --upgrade pip --proxy=http://<プロキシサーバー>:<ポート>

    4. oci-cli をインストールします (proxyの指定は任意です)

      pip install oci-cli --proxy=http://<プロキシサーバー>:<ポート>


      インストールが完了すると、以下のようなメッセージが表示されます
      Successfully installed arrow-0.10.0 asn1crypto-0.23.0 certifi-2017.11.5 cffi-1.11.2 click-6.7 configparser-3.5.0 cryptog
      raphy-1.9 httpsig-cffi-15.0.0 idna-2.6 jmespath-0.9.3 ndg-httpsclient-0.4.3 oci-1.3.9 oci-cli-2.4.11 oraclebmc-cli-2.4.1
      1 pyOpenSSL-17.0.0 pyasn1-0.3.7 pycparser-2.18 python-dateutil-2.5.3 pytz-2016.10 requests-2.11.1 retrying-1.3.3 six-1.1
      0.0 terminaltables-3.1.0
    5. CLIが正しくインストールされたことを確認します

      oci -v

      2.4.11 などのように、バージョンが正しく帰ってきた場合は、正しくインストールが完了しています
    6. PowerShwell の管理者ウィンドウを閉じます

     

    1-3. Bashが使える環境のセットアップ

    Oracle Cloud Infrastructure CLI はターミナル・コンソールから実行しますが、今回はそのコンソールとしてBashターミナルを利用するため、セットアップを行います。

    Bashの利用は必須ではありません。OCIのCLIを利用するだけであれば、WindowsのコマンドプロンプトやPowerShellコンソールなどでも実行可能です。

    ただし、このチュートリアルの後半ではbashのシェル変数を使用する箇所がありますので、チュートリアルを完了するには何かしらのbashターミナルを準備することをお勧めします。

     

    手元のPCのOSが MAC や Ubuntu 等であれば、OSに付属するbashターミナルをそのまま利用することができます。

    お手元のOSが Windows 10 であれば WSL(Windows Subsystem for Linux) の利用を推奨します。セットアップ方法については こちら などを参考に実施してください。

    Windows 7 の場合は、Bashターミナルを利用するにはサードパーティ製のツールを導入する必要があります。代表的なものに Git BashCygwin Bash Shell やその互換ターミナル(MobaXtermなど)がありますので、好みに応じたターミナルを用意してください。

     

    Bashターミナルをセットアップする際に、WindowsのPATH環境変数を引き継げるようにし、また%USERPROFILE%をホームディレクトリに設定しておくと便利です。設定方法は各ツールによって異なりますので、ツールに応じた適切な設定を実施してください

     

    以下は、Windows 7 の環境に Git Bash をインストールする手順の例を説明しています。

     

    1. https://gitforwindows.org/ にアクセスし、Download ボタンを押してGit for Windows をダウンロードします
    2. ダウンロードした Git-2.17.0-64-bit.exe などの実行ファイル を実行します
    3. インストーラーが実行されるので、Git Bashをインストールします。基本的に Next > ボタンを押していけばOKです。

     

     

    2. Oracle Cloud Infrastructure へのCLIアクセスの準備

    CLI を通して Oracle Cloud Infrastructure にアクセスするために、必要な情報を確認します。またAPIキーを設定します。

     

    2-1. APIアクセス用のユーザーの作成と管理権限の付与 (オプション)

    APIアクセスを行うには、OCIのIAM(IDとアクセス管理)モジュールに登録された有効なユーザーが必要です。このユーザーはOCIのGUIコンソールへのアクセスと共有することもできますが、セキュリティの観点からは別のAPI用のユーザーを作成して使用することを推奨します。
    今回は、新しく api.user という名前のユーザーを作成し、そのユーザーの権限でAPIアクセスを行っていきます。既に作成済みの任意のユーザーを利用することも可能です。その際はこのステップはスキップすることが可能です。

     

    1. Oracle Cloud Infrastructure にログインし、コンソールメニューから IdentityUsers を選択します

    2. 立ち上がってきた Create User というウィンドウに以下の項目を入力し、Create ボタンを押します
      • NAME - api.user (または任意)
      • DESCRIPTION - (任意)
    3. 作成された api.user というユーザー名のリンクをクリックし、ユーザー詳細画面にナビゲートします

    4. 左下の Resources メニューから Groups を選択し、Add User to Group ボタンを押します

    5. 立ち上がってきた Add User to Group というウィンドウに以下の項目を選択し、Add ボタンを押します
      • GROUPS - Administrators を選択

        今回のチュートリアルでは、テナンシー(Tenancy)の管理権限を持つAdministratorsグループに所属させていますが、本番環境で使用する際には適切な必要最小限の権限のみを付与したグループを作成し、そこに所属させるようにしてください

     

    2-2. OCIDの確認

    CLIでOCIにアクセスするにあたり、ユーザー、テナント、コンパートメントの OCID (Oracle Cloud ID) が必要になります。

    OCIDは、OCIのリソースが持つユニークIDで、オブジェクト・ストレージを除くすべてのコンポーネントに対して割り当てられています。

     

    OCIDは以下のような文字列で構成されます。

    ocid1.<リソース・タイプ>.<レルム>.[リージョン].<ユニークID>

    ピリオド(「.」)をセパレーターとして、それぞれの文字列は以下のような意味を表します

    • ocid1 - OCIDのバージョンを表す固有文字列
    • リソース・タイプ - リソースの種類 (例 : tenancy, instance, volume, vcn, subnet, user, group など)
    • レルム - エンティティを共有するリージョンのセット (現在のところすべてのOCIのリソースは oc1 というレルムに所属しています)
    • リージョン - 所属するリージョン (例 : phx, iad, eu-frankfurt-1)、このフィールドはリソースが単一のリージョンやアベイラビリティ・ドメインに属する場合にのみ表示され、その他の場合は空白になります
    • ユニークID - リソースを表すユニークなID、フォーマットや長さはリソースの種類により異なります

     

    OCIDの詳細については Resource Identifiers - Oracle Cloud IDs (OCIDs) をご参照ください。

     

    OCIDはコンソール画面から確認できます。以下画面からユーザー、テナント、コンパートメントのOCIDを確認していきます。

     

    1. Oracle Cloud Infrastructure にログインし、コンソールメニューから IdentityUsers を選択します
    2. Users 欄にユーザーの一覧が表示されるので、APIアクセスに使用するユーザーの OCID: に表示されている Copy リンクをクリックします
      WS000334.JPG
    3. 手元のテキストエディタなどに、コピーしたOCIDをペーストします
      忘れずにユーザーのOCIDであることを示すメモも残しておいてください

    4. 次に、コンソール上部の一番右にある人型のアイコンメニューを開き、Tenancy : XXX という名前のメニューをクリックします
      WS000331.JPG
    5. テナントの詳細情報が表示されるので、OCID: に表示されている Copy リンクをクリックします
      WS000110.JPG

    6. 手元のテキストエディタなどに、コピーしたOCIDをペーストします。こちらはテナントのOCIDですので、その旨も忘れずにメモを残しておいてください。

    7. 最後に、コンソールメニューから IdentityCompartments を選択します

    8. Compartments 欄にコンパートメントの一覧が表示されるので、APIアクセスに使用するコンパートメントの OCID: に表示されている Copy リンクをクリックします
      (もしルート・コンパートメントを利用する場合は、RCというアイコンのものをcopyします)
      WS000111.JPG

    9. 手元のテキストエディタなどに、コピーしたOCIDをペーストします。こちらはコンパートメントのOCIDですので、その旨も忘れずにメモを残しておいてください。

     

     

     

    3. CLIの設定

    CLIの設定を行い、OCIに対してアクセスできるようにします。

     

    3-1. 設定ファイルとAPIキーの生成

    アクセス情報を格納した設定ファイルと、アクセスのためのAPIキーペアを生成します。

     

    1. 任意の Bash ターミナルを起動します

    2. ターミナルに以下のコマンドを入力し、CLIのコンフィグレーションスクリプトを起動します

      oci setup config

    3. 対話形式で質問が聞かれるので、以下のように入力します。今回はこのスクリプトの中でAPIキーを生成しますが、もし別途用意していあるAPIキーを使用する場合は Do you want to generate a new RSA key pair? という質問にNと答えてください。
      • Enter a location for your config [D:\Users\<ユーザー名>\.oci\config]: 入力なしでENTERキーを押す
      • Enter a user OCID: - ステップ2で確認したユーザーのOCIDを入力
      • Enter a tenancy OCID: - ステップ2で確認したテナントのOCIDを入力
      • Enter a region (e.g. eu-frankfurt-1, us-ashburn-1, us-phoenix-1): - アクセスしたいリージョンを例に従って入力
      • Do you want to generate a new RSA key pair? (If you decline you will be asked to supply the path to an existing key.) [Y/n]: - Y
      • Enter a directory for your keys to be created [C:\Users\<ユーザー名>\.oci]: - 入力なしでENTERキーを押す
      • Enter a name for your key [oci_api_key]: - 入力なしでENTERキーを押す
      • Enter a passphrase for your private key (empty for no passphrase): - 任意のパスフレーズを入力

    4. スクリプトが完了すると、%USERPROFILE%\.oci というディレクトリに、config ファイルとAPI鍵ペア(秘密鍵がoci_api_key.pem、公開鍵がoci_api_key_public.pemという名前)が生成されています。

     

    3-2. APIキーのアップロード

    CLIからOCIに対してアクセスを行う際にAPIの認証が行われます。このため予め認証をパスするのに必要なAPIキーを、ユーザー毎にOCIにアップロードしておく必要があります。

    ここでは、先ほど作成した鍵ペアのうち公開鍵を、OCIコンソールからアップロードします。

     

    1. Oracle Cloud Infrastructure にログインし、コンソールメニューから IdentityUsers を選択します

    2. Users 欄にユーザーの一覧が表示されるので、APIアクセスに使用するユーザー名のリンク(先ほどOCIDをコピーしたユーザーです)をクリックします

    3. API Keys 欄の Add Public Key ボタンを押します

    4. 鍵ペアのうち公開鍵のファイル(%USERPROFILE%\.oci\oci_api_key_public.pem にあるはずです) をテキストエディタで開いて文字列をコピーし、立ち上がってきた Add Public Key ウィンドウの PUBLIC KEY フィールドにペーストし、Add ボタンを押します
      WS000116.JPG

      もし、公開鍵が有効なPEM形式でなかった場合(例えばssh-rsa形式だった場合)は、以下のような InvalidKey - Invalid PEM format エラーが表示されます。
      この場合は、改めてPEM形式で有効な公開鍵を生成してください。公開鍵は秘密鍵から生成することができます。
      WS000117.JPG

    5. 公開鍵の登録が完了すると、API Keys 欄に公開鍵が追加されます。また公開鍵のフィンガープリントが表示されています。
      WS000118.JPG


    3-3. CLIからのアクセスの確認

    ここまで完了すると、Oracle Cloud Infrastructure 環境にCLIでアクセスできるようになっているはずですので、確認を行います。

     

    1. 任意のターミナル・コンソール(コマンドプロンプト、Powershell、Bash) を起動します

    2. ターミナル上で、以下のコマンドを入力します

      oci compute image list -c <コンパートメントのOCID>

      <コンパートメントのOCID> には、ステップ2-1 で確認したコンパートメントのOCIDの値を入力します。

      以下のようなJSONのデータが帰ってきたら、無事にOCIへの接続に成功しています。もし失敗した場合には、上記のconfigの手順を見直し、再度実行してください。

      {

        "data": [

          {

            "base-image-id": null,

            "compartment-id": null,

            "create-image-allowed": true,

            "display-name": "Windows-Server-2012-R2-Standard-Edition-VM-2017.11.06-0",

            "id": "ocid1.image.oc1.phx.aaaaaaaalumo6pbq33qzmmnh544qouy3dhbfpzwm5nil652xa524pyw2wxfa",

            "lifecycle-state": "AVAILABLE",

            "operating-system": "Windows",

            "operating-system-version": "Server 2012 R2 Standard",

            "time-created": "2017-11-17T22:52:56.402000+00:00"

          },

      ...

     

    3-4. デフォルトコンパートメント値の設定

    先ほどのテストで入力した -c <コンパートメントのOCID> というオプションは、予めパラメーターファイルを作成しておくことにより、毎回入力することを回避することができるようになります。

    今回は、コンパートメントIDの値をパラメータファイルに設定して、次回のコメンド発行時からは入力をスキップできるようにします。

     

    1. ターミナルで、以下のコマンドを入力します

       

      oci setup oci-cli-rc

       

      このコマンドで、~\.oci に、 oci_cli_rc というファイルが作成されます

    2. 任意のテキストエディタで、~\.oci\oci_cli_rc ファイルを開き、以下の記述を追加します

      [DEFAULT]
      compartment-id = <コンパートメントのOCID>

      <コンパートメントのOCID> には、ステップ2-1 で確認したコンパートメントのOCIDの値を入力します。

    3. oci_cli_rc ファイルが正しく記述されていることを確認します。

      cat ~/.oci/oci_cli_rc

    4. 以下のコマンドを入力します。今回は -c オプションをつけずに実行してください。
      oci compute shape list
    5. 以下のようなJSONのデータが帰ってきたら、無事にデフォルトコンパートメントの設定に成功しています。もし失敗した場合には、上記の手順を見直し、再度実行してください。

        "data": [

          {

            "shape": "BM.Standard2.52"

          },

          {

            "shape": "BM.DenseIO2.52"

          },

          {

            "shape": "BM.Standard1.36"

          },

      ...

     

    4. JMESPathを使って出力制御する

    OCI-CLIのデフォルトの返り値はJSON形式になっています。

    そのままではスクリプトの中では使いづらい場合がありますが、JSONのクエリ言語である JMESPath を使うと、返り値をパースして任意のフォーマットで値を習得することができます。

    この項では、JMESPathを利用した出力制御を試してみます。

     

    1. OCI-CLI JMESPathを利用するには、--query オプションを利用します。まずは先程のシェイプ一覧を絞り込んで、要素1つだけを表示してみます。
      任意のターミナル・コンソールで以下のコマンドを実行します。
      oci compute shape list --query 'data[0]'
      すると、以下のようなアウトプットが返ってきます。
      {
        "shape": "VM.Standard2.1"
      }
      これは、data という要素配列の中の最初(0)のエントリーを表示する、という指示になります。

    2. 次に、要素の最初のエントリーではなく、要素名を検索して一致するエントリーを表示するようにします。

      以下のコマンドを実行します。
      oci compute shape list --query 'data[?shape==`VM.Standard2.1`]'

      JMESPath構文において、検索などの文字列については「`」(バッククォート)で囲むようにしてください

      すると、以下のように Shape という要素が VM.Standard2.1 のエントリーのみが帰ってきます。
      [
        {
          "shape": "VM.Standard2.1"
        },
        {
          "shape": "VM.Standard2.1"
        },
        {
          "shape": "VM.Standard2.1"
        }
      ]
      もし、要素名にハイフンが含まれる場合は、要素名を「"」(タブルコーテーション)で囲みます。
      oci compute image list --query 'data[?"operating-system"==`Canonical Ubuntu`]'
    3. 完全一致ではなく、一部の文字列を含むものを検索したい場合は、contains 句を使います。
      例えば、operating-system に Linux という文字列を含むイメージのみを抽出したい場合は、以下のようにします。

      oci compute image list --query 'data[?contains("operating-system",`Linux`)]'
    4. sort_by 句を使うと、結果を並び替えることができます。

      例えば、time-created の順番で並び替えたい場合は、以下のようにします。

      oci compute image list --query 'sort_by(data, &"time-created")[?contains("operating-system",`Linux`)]'

      ただ、作成日時で並び替えたいのであれば、OCI-CLI の --sort-by オプションを使用することもできます。
      以下のコマンドの実行結果は、上記コマンドと同じ結果になります。

      oci compute image list --sort-by TIMECREATED --sort-order ASC --query 'data[?contains("operating-system", `Linux`)]'

      oci-cli コマンドの --sort-by は、TIMECRETED の場合デフォルトが降順(DESC)で表示されます。(ややこしいことにJMESPathと逆です・・・)

      合わせて --sort-order を指定することで明示的に昇順(ASC)、降順(DESC)を指定できるので、間違い防止のために常に指定することをおすすめします。
      sort-by オプションの詳細については oci compute image list --help コマンドをご参照ください。
    5. 要素のうち、一部の要素だけを表示したい場合は、ドット「.」のあとに要素名を追記します。
      例えば、上記の検索結果のうち id と display-name という要素だけを抽出したい場合は、以下のコマンドを発行します。
      oci compute image list --query 'sort_by(data, &"time-created")[?contains("operating-system",`Linux`)].{id:id,"display-name":"display-name"}'
    6. JSONの {"要素" : "値"} という表記ではなく、単独の値のみを表示したい場合は、「.」のあとに一つの要素名を直接記述します。

      oci compute image list --query 'sort_by(data, &"time-created")[?contains("operating-system",`Linux`)]."display-name"'
    7. パイプ「|」を利用して、処理を連結することができます。例えば配列の1つ目だけを表示するには、パイプのあとに[0]を記述します。
      oci compute image list --query 'sort_by(data, &"time-created")[?contains("operating-system",`Linux`)]."display-name" | [0]'
      パイプのあとに[-1]を記述すると、配列の最後の1つを表示します。
      oci compute image list --query 'sort_by(data, &"time-created")[?contains("operating-system",`Linux`)]."display-name" | [-1]'
      すでにsort_byで作成日付順(昇順 = 古い順)にソートしてあるので、[-1]を記述した場合は作成日付が最も新しいイメージのみが検索されているはずです。
      結果は以下のような形になります。(データは異なる場合があります)
      "Oracle-Linux-7.5-Gen2-GPU-2018.08.14-0"
    8. 最後に、OCI-CLI のオプションの --raw-output 句をつけると、ダブルコーテーションを外した文字列を抽出できます。
      oci compute image list --query 'sort_by(data, &"time-created")[?contains("operating-system", `Linux`)]."display-name" | [-1]' --raw-output

      返り値は、おそらく以下のような形になるはずです。
      Oracle-Linux-7.5-Gen2-GPU-2018.08.14-0

     

    このように、JMESPathを利用すると、コマンドラインで利用しやすいテキストフォーマットでCLIの結果を抽出できるようになるので、ローカル側のシェルの挙動に依存しないスクリプトを記述することができるようになります。

    JMESPath には他にも色々と便利な機能がありますので、こちらの jmespath.org のサイトを参考に色々と試してみてください。

     

     

    5. CLIを利用したオブジェクト作成を体感する

    ここまでで、基本的なOCI CLIのセットアップは完了しています。ここからは、OCI CLIを利用して様々なOCIのオブジェクトを作成することで、利用方法を体感します。

    5-1. CLIを利用したVCNの作成

    CLIを利用してVCNを作成します。

     

    1. Bash ターミナルを起動し、シェル環境変数VCNに任意の名前を設定します。この値は後でVCNを作成する際に使用します。
      VCNNAME=<VCNの表示名>
      <VCNの表示名>は、例えば tutorial-cli-vcn などの任意の文字列で置き換えてください。

    2. 次に、以下のコマンドを発行して、VCNを作成します。
      oci network vcn create --cidr-block 10.0.0.0/16 --display-name $VCNNAME
    3. 以下のようなJSONのメッセージが帰ってきたら、VCNの作成は完了しています。

      oci network vcn create --cidr-block 10.0.0.0/16 --display-name tutorial-cli-vcn

      {

        "data": {

          "cidr-block": "10.0.0.0/16",

          "compartment-id": "ocid1.compartment.oc1..aaaaaaaacy6pilkjf3bvckjsdbsmfbmhv5rf54d3tra32m3mlehian

          "default-dhcp-options-id": "ocid1.dhcpoptions.oc1.phx.aaaaaaaaftcayq5pk36nyxq34yele33tomkiz7atc4

          "default-route-table-id": "ocid1.routetable.oc1.phx.aaaaaaaapxzv6wsleke4af5rc6t7yjesygy6oflro4j4

          "default-security-list-id": "ocid1.securitylist.oc1.phx.aaaaaaaa3k62efimexf6f6kgukpf5nym2zrbboxi

          "display-name": "tutorial-cli-vcn",

          "dns-label": "tutorialvcn",

          "id": "ocid1.vcn.oc1.phx.aaaaaaaaldpr36ijpzzrk6e37vel2io7hunknjme7vj2hzhr6o33pxufk4ka",

          "lifecycle-state": "AVAILABLE",

          "time-created": "2018-04-04T09:40:25.401000+00:00",

          "vcn-domain-name": "tutorialvcn.oraclevcn.com"

        },

        "etag": "c731a921"

      }

    4. 以下のコマンドを発行し、今作成したVCNのOCID情報を取得し、シェル変数VCNIDに代入します。

      VCNID=$(oci network vcn list --query 'data[?"display-name"==`'$VCNNAME'`].id | [0]' --raw-output)
    5. シェル変数VCNの値を確認します。ocid1... のような値が戻ってきたら、正しく変数が取得できています。
      echo $VCNID

      または、ステップ2において以下のコマンドを発行することで、VCNの作成と同時に返り値からOCIDを取得し、シェル変数への格納を一度に行うこともできます。

      VCNID=$(oci network vcn create --cidr-block 10.0.0.0/16 --display-name $VCNNAME --query 'data.id' --raw-output)

     

    5-2. インターネットゲートウェイの作成

    CLIを利用して、作成したVCNにインターネット・ゲートウェイを設置します。

     

    1. bash ターミナルで以下のコマンドを入力します。
      IGWNAME=<インターネット・ゲートウェイの表示名>
      <インターネット・ゲートウェイの表示名>は任意の文字列を入力してください。

    2. 以下のコマンドを発行し、インターネット・ゲートウェイを作成します。
      また同時に、返り値から発行されたOCIDを取得しシェル変数IGWIDに格納します。
      IGWID=$(oci network internet-gateway create --is-enabled true --vcn-id $VCNID --display-name $IGWNAME --query 'data.id' --raw-output)
    3. シェル変数IGWIDの値を確認します。ocid1... のような値が戻ってきたら、正しくインターネット・ゲートウェイが作成できています。
      echo $IGWID

     

    5-3. デフォルト・ルート・テーブルの変更

    CLIを利用して、作成したVCNのデフォルト・ルート・テーブルの情報を変更し、先ほど作成したインターネット・ゲートウェイへのルートを設定します。

     

    1. 以下のコマンドを発行し、VCNに設定されているデフォルト・ルート・テーブルのOCID情報を取得し、シェル変数RTIDに代入します。
      RTID=$(oci network vcn list --query 'data[?id==`'$VCNID'`]."default-route-table-id" | [0]' --raw-output)
    2. シェル変数RTIDの値を確認します。ocid1... のような値が戻ってきたら、正しく変数が取得できています。
      echo $RTID
    3. bash ターミナルで以下のコマンドを入力し、ルートテーブルを更新します。
      oci network route-table update --rt-id $RTID --route-rules '[{"cidrBlock":"0.0.0.0/0","networkEntityId":"'$IGWID'"}]'
    4. 警告メッセージが出るので、yと入力します
      WARNING: Updates to route-rules will replace any existing values. Are you sure you want to continue? [y/N]: y
    5. 以下のようなJSONのメッセージが帰ってきたら、ルート・テーブルの更新は完了しています。
      {
        "data": {

          "compartment-id": "ocid1.compartment.oc1..aaaaaaaacy6pilkjf3bvckjsdbsmfbmhv5rf54d3tra32m3mlehianqv2t3a",
          "display-name": "Default Route Table for tutorial-cli-vcn",
          "id": "ocid1.routetable.oc1.phx.aaaaaaaapxzv6wsleke4af5rc6t7yjesygy6oflro4j457rroqvsvf7teezq",
          "lifecycle-state": "AVAILABLE",
          "route-rules": [
            {
              "cidr-block": "0.0.0.0/0",
              "network-entity-id": "ocid1.internetgateway.oc1.phx.aaaaaaaa2jssayoh2m6ztijeqvgdmmo7o4uqn5hvo5osvpce475ysneu32vq"
            }
          ],
          "time-created": "2018-04-04T09:40:25.401000+00:00",
          "vcn-id": "ocid1.vcn.oc1.phx.aaaaaaaaldpr36ijpzzrk6e37vel2io7hunknjme7vj2hzhr6o33pxufk4ka"
        },
        "etag": "4ecdb006"
      }


    5-4. デフォルト・セキュリティ・リストの変更

    CLIを利用して、作成したVCNのデフォルト・セキュリティ・リストの情報を変更します。
    今回は、sshアクセスのためのインターネットからのtcp/22番ポート、ping応答のためのICMPエコーのインバウンド通信を許可する設定を行います。

     

    1. 以下のコマンドを発行し、VCNに設定されているセキュリティ・リストのOCID情報を取得し、変数SECLISTIDに代入します。
      SECLISTID=$(oci network security-list list --vcn-id $VCNID --query 'data[0].id' --raw-output)
    2. 設定した変数SECLISTの値を確認します。ocid1... のような値が戻ってきたら、正しく変数が取得できています。
      echo $SECLISTID
    3. bash ターミナル以下のコマンドを入力し、セキュリティリストを更新します。
      oci network security-list update --security-list-id $SECLISTID --ingress-security-rules '[{"icmpOptions":null,"isStateless":null,"protocol":"6","source":"0.0.0.0/0","tcpOptions":{"destinationPortRange":{"max":22,"min":22},"sourcePortRange":null},"udpOptions":null},{"icmpOptions":{"code":4,"type":3},"isStateless":null,"protocol":"1","source":"0.0.0.0/0","tcpOptions":null,"udpOptions":null},{"icmpOptions":{"code":null,"type":0},"isStateless":false,"protocol":"1","source":"0.0.0.0/0","tcpOptions":null,"udpOptions":null},{"icmpOptions":{"code":null,"type":8},"isStateless":false,"protocol":"1","source":"0.0.0.0/0","tcpOptions":null,"udpOptions":null}]'
    4. 警告メッセージが出るので、yと入力します
      WARNING: Updates to egress-security-rules and ingress-security-rules will replace any existing values. Are you sure you want to continue? [y/N]: y
    5. JSONのメッセージが帰ってきたら、セキュリティ・リストの更新は完了しています。
      {
        "data": {
          "compartment-id": "ocid1.compartment.oc1..aaaaaaaacy6pilkjf3bvckjsdbsmfbmhv5rf54d3tra32m3mlehianqv2t3a",
          "display-name": "Default Security List for tutorial-cli-vcn",
          "egress-security-rules": [
            {
              "destination": "0.0.0.0/0",
              "icmp-options": null,
              "is-stateless": null,
              "protocol": "all",
              "tcp-options": null,
              "udp-options": null
            }
          ],
          "id": "ocid1.securitylist.oc1.phx.aaaaaaaa3k62efimexf6f6kgukpf5nym2zrbboxi3mbxsevknyv2h6wnw3cq",
          "ingress-security-rules": [
      ...(以下略)

     

    5-5. サブネットの作成

    CLIを利用して、VCNの中にサブネットを作成します。

     

    1. 以下のコマンドを発行し、現在利用しているリージョンで利用可能なアベイラビリティ・ドメインの一覧を取得します
      oci iam availability-domain list --query 'data[*].name'
    2. 戻ってきた値は、現在利用可能なアベイラビリティ・ドメインの一覧です。
      [
         "XhqH:PHX-AD-1",

         "XhqH:PHX-AD-2",
         "XhqH:PHX-AD-3"
      ]
    3. 3つのアベイラビリティ・ドメインのうち、どこにサブネットを作成するかを選択し、その番号のアベイラビリティ・ドメインの名前を変数ADNAMEに代入します。
      例えば、AD-1 を選択した場合は、以下のコマンドを発行します。

      ADNAME=$(oci iam availability-domain list --query 'data[?contains(name, `AD-1`)].name | [0]' --raw-output)

    4. bash ターミナルで以下のコマンドを入力し、サブネットをひとつ作成します。
      また同時に返り値から作成したサブネットのOCIDを取得し、シェル変数SUBNETIDに格納します。
      SUBNETID=$(oci network subnet create --availability-domain $ADNAME --cidr-block 10.0.1.0/24 --vcn-id $VCNID --display-name sub1ad1 --prohibit-public-ip-on-vnic false --route-table-id $RTID --security-list-ids '["'$SECLISTID'"]' --query 'data.id' --raw-output)
    5. 代入した変数SUBNETIDの値を確認します。ocid1... のような値が帰ってきたら、サブネットは正しく作成されています。

      echo $SUBNETID

     

     

    5-6. インスタンスの作成

    CLIを利用して、作成したサブネットの中にインスタンスを作成します。

     

    1. インスタンスへのsshアクセスに使用する鍵ペアを作成しておきます。
      Bash ターミナル上で以下のコマンドを発行し、鍵ペアを新しく作成します。

      ssh-keygen

      対話的なダイアログが起動してきますが、今回のチュートリアルでは ENTER キーを押していく形でOKです。
      処理が完了すると、~/.ssh に、 id_rsa と id_rsa.pub というファイルが作成されているはずです。
    2. 以下のコマンドを発行し、インスタンスの作成に利用できるイメージのIDの一覧を取得します。
      --output=table オプションをつけると、表形式で値が返ってきます。
      oci compute image list --query 'data[*].{"operating-system":"operating-system","operating-system-version":"operating-system-version","display-name":"display-name"}' --output=table
    3. 戻ってきた値は、現在利用可能なイメージの一覧です。
      +------------------------------------------------------------------------+------------------+---------------------------+
      | display-name                                                           | operating-system | operating-system-version  |
      +------------------------------------------------------------------------+------------------+---------------------------+
      | Windows-Server-2016-Standard-Edition-VM-Gen2-2018.08.16-0              | Windows          | Server 2016 Standard      |
      | Windows-Server-2016-Standard-Edition-VM-Gen2-2018.07.19-0              | Windows          | Server 2016 Standard      |
      | Windows-Server-2016-Standard-Edition-VM-Gen2-2018.05.31-0              | Windows          | Server 2016 Standard      |
      | Windows-Server-2016-Datacenter-Edition-BM-Gen2-DenseIO-2018.08.16-0    | Windows          | Server 2016 Datacenter    |
      | Windows-Server-2016-Datacenter-Edition-BM-Gen2-DenseIO-2018.07.19-0    | Windows          | Server 2016 Datacenter    |
      | Windows-Server-2016-Datacenter-Edition-BM-Gen2-DenseIO-2018.05.21-0    | Windows          | Server 2016 Datacenter    |
      (以下略)
    4. この中から任意のイメージを一つ選択し、そのイメージのOCIDを取得して変数IMAGEに代入します。

      例えば、Oracle Linux 6.10 の最新のイメージを選択する場合には、以下のコマンドを発行します。

      IMAGEID=$(oci compute image list --operating-system "Oracle Linux" --operating-system-version "6.10" --query 'sort_by(data, &"time-created")[-1].id' --raw-output)

      作成したいOSやバージョンに応じて、赤字の下線部分は変更してください。

    5. 設定した変数IMAGEIDの値を確認します。ocid1.image... のような値が帰ってきたら、正しく変数が設定されています。

      echo $IMAGEID

    6. 次に、以下のコマンドを発行し、インスタンスの作成に利用できるイメージのシェイプの一覧を取得します
      oci compute shape list
    7. 戻ってきた値は、現在利用可能なイメージの一覧です。
      "shape": "BM.Standard2.52"
      "shape": "BM.DenseIO2.52"
      "shape": "BM.Standard1.36"
      "shape": "BM.DenseIO1.36"
      "shape": "VM.Standard2.1"
      (以下略)
      この中から任意のイメージを一つ選択し、その値をシェル変数SHAPEに代入します。
      SHAPE=<シェイプ名>
      <シェイプ名>は、VM.Standard2.1 などの任意の文字列に置き換えてください

    8. 以下のコマンドを入力し、インスタンスを作成します。また同時にその返り値からインスタンスのOCIDを取得し、変数INSTANCEIDに代入します。
      INSTANCEID=$(oci compute instance launch --availability-domain $ADNAME --image-id $IMAGEID --shape $SHAPE --ssh-authorized-keys-file ".ssh/id_rsa.pub" --subnet-id $SUBNETID --assign-public-ip true --query 'data.id' --raw-output)

    9. 変数INSTANCEIDの値を確認し、ocid1.instance で始まる値が格納されていたら、インスタンスの作成処理が無事に開始されています。
      通常、インスタンスの作成完了までには数分(仮想マシンの場合1-2分、ベアメタルの場合3-5分程度)かかります。
      echo $INSTANCEID

      ocid1.instance.oc1.phx.abyhqljrfgbgtwilxceqvxj2wl6sycdsyo6kg7j3vgmdyhz2ewtqqhtjlj7a

     

     

    5-7. 作成したインスタンスへの接続

    作成したインスタンスに対してsshで接続ができることを確認します。

     

    1. インスタンス作成時に、自動的にパブリックIPが割り振られるように設定しています。以下のコマンドを発行し、インスタンスの仮想NICに設定されたパブリックIPを取得し、シェル変数IPに代入します。
      IP=$(oci compute instance list-vnics --instance-id $INSTANCEID --query 'data[0]."public-ip"' --raw-output)
    2. 変数IPに格納された値が、現在作成中のインスタンスのパブリックIPです。

      $ echo $IP
      129.146.33.104

      インスタンスの作成開始後、パブリックIPが振られるまでには少し時間がかかります。
      もし変数IPに値が何も格納されていないようであれば、少し待ってからもう一度ステップ1のコマンドを発行し、再度パブリックIPを取得してみてください。

    3. インスタンスに対して ping を発行し、インスタンスのインタフェースが立ち上がってきたことを確認します。

      ping -c 1 $IP

    4. インスタンスに対してsshで接続します。ping の開通からsshでアクセスできるようになるまで、さらに1-2分程度かかる場合があります。

      ssh opc@$IP

      OSユーザーは、Oracle Linux 及び CentOSの場合は opc です。 Ubuntu の場合は ubuntu ユーザーを使用してください
    5. 無事に接続できたら、インスタンスは無事に可動しています。

     

     

    これで、本章の内容は完了です。

    コマンドライン・インタフェースのセットアップから、それを利用した簡単なネットワークとインスタンスの作成までを学びました。この手順を応用することにより、コマンドラインでOCIの環境構築を完結させることが可能になります。ぜひ色々とためしてみてください。

     

     

    目次に戻る : チュートリアル : Oracle Cloud Infrastructure を使ってみよう