@本記事ではOracle Cloud InfrastructureのSDKについてクイックにご紹介したいと思います。OCIではJava、Python、Ruby、Goといった言語のSDKが利用できますが、その中でも比較的人気のPython SDKを使って簡単なコードを動かしてみたいと思います。マニュアルとしては「Software Development Kits and Command Line Interface」になります。

 

作業ステップ

作業としては下記4ステップです。

 

1. Pythonのインストール

2. ocicliのインストールとセットアップ

3. Python SDKのインストール

4. Python SDKで「Hello, World!」

 

※IAMユーザー、グループ、オブジェクトストレージに対するIAMポリシーは既に作成済という前提で書いていきたいと思います。

 

1)Pythonのインストール

何はともあれPythonをインストールします。(古いバージョンをインストールしてしまいました。今だと3.xをインストールされたほうがいいですね。)

[opc@bm1 ~]$ sudo yum install gcc libffi-devel python-devel openssl-devel

Loaded plugins: langpacks, ulninfo

Resolving Dependencies

--> Running transaction check

.......

.......

.......

Complete!

 

[opc@bm1 ~]$ python --version

Python 2.7.5

 

これでPythonのインストールが完了しました。続いてpipをインストールします。

 

[opc@bm1 ~]$ sudo easy_install pip

Searching for pip

Reading https://pypi.python.org/simple/pip/

Best match: pip 19.0.2

.......

.......

.......

Installed /usr/lib/python2.7/site-packages/pip-19.0.2-py2.7.egg

Processing dependencies for pip

Finished processing dependencies for pip

 

[opc@bm1 ~]$ pip --version

pip 19.0.2 from /usr/lib/python2.7/site-packages/pip-19.0.2-py2.7.egg/pip (python 2.7)

 

これでpipのインストールが完了しました。続いて、virtualenvをインストールします。virtualenvは必須ではありませんが何かと便利ですのでマニュアル通りインストールしたいと思います。

 

[opc@bm1 ~]$ sudo pip install virtualenv

Collecting virtualenv

.......

.......

Installing collected packages: virtualenv

Successfully installed virtualenv-16.4.0

 

で、仮想環境を作成してゆきます。今回はsdk_testという名前の仮想環境を作成しました。

 

[opc@bm1 ~]$ virtualenv sdk_test

New python executable in /home/opc/sdk_test/bin/python

Installing setuptools, pip, wheel...

done.

[opc@bm1 ~]$ ls

bin  lib  sdk_test

[opc@bm1 ~]$ source sdk_test/bin/activate

(sdk_test) [opc@bm1 ~]$

 

2)ocicliのインストール、セットアップ

続いて、ocicliをインストールします。ocicliはociの各種サービスのプロビジョニングや管理操作などを簡素化されたコマンドで実行するためのCLIツールです。REST APIをPythonでラップしたツールです。SDKを使う上で必須ではありませんが、何かと便利ですのでインストールします。ocicliについてはこちらに詳細なチュートリアルがありますので是非参考にされてください。

 

まずはocicliをインストールしてゆきます。

(sdk_test) [opc@bm1 ~]$ pip install oci

Collecting oci

  Downloading https://files.pythonhosted.org/packages/8f/c0/3c4b6c60ed8aa88b5084a7a3e77c4d2ff1647e76425799b6258b081ce681/oci-2.1.7-py2.py3-none-any.whl (1.7MB)

.......

.......

Installing collected packages: configparser, enum34, asn1crypto, pycparser, cffi, six, ipaddress, cryptography, pyOpenSSL, pytz, python-dateutil, certifi, oci

Successfully installed asn1crypto-0.24.0 certifi-2018.11.29 cffi-1.12.1 configparser-3.7.1 cryptography-2.5 enum34-1.1.6 ipaddress-1.0.22 oci-2.1.7 pyOpenSSL-19.0.0 pycparser-2.19 python-dateutil-2.7.3 pytz-2018.9 six-1.12.0

これで、ocicliのインストール完了です。

 

ocicliはインストール後、セットアップを実行する必要があります。ocicliに、利用するテナント、IAMユーザー、認証情報など各種情報を設定してゆきます。これらの情報はデフォルトで ~/.oci/config に保存され、ocicliはコマンド実行時にこの情報を使って、OCIに接続し処理を実行します。ocicliだけでなく、SDKもこの config ファイルを利用します。ocicliをインストールせずにSDKだけ使う場合は config ファイルを自分で作成して必要なエントリを記載すれば大丈夫です。

 

では、ocicliのセットアップです。★の部分は簡単な説明です。

[opc@bm1 ~]$ oci setup config

    This command provides a walkthrough of creating a valid CLI config file.

    The following links explain where to find the information required by this

    script:

 

    User OCID and Tenancy OCID:

        https://docs.us-phoenix-1.oraclecloud.com/Content/API/Concepts/apisigningkey.htm#Other

    Region:

        https://docs.us-phoenix-1.oraclecloud.com/Content/General/Concepts/regions.htm

    General config documentation:

        https://docs.us-phoenix-1.oraclecloud.com/Content/API/Concepts/sdkconfig.htm

 

Enter a location for your config [/home/opc/.oci/config]:   ★これが構成ファイル。このファイルに下記入力情報が保存されます

Enter a user OCID: ocid1.user.oc1..aaaaaaaazxunrppwxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ★IAMユーザーのOCID。つまり内部的にこのユーザーを使ってOCIに接続しているということですね。

Enter a tenancy OCID: ocid1.tenancy.oc1..aaaaaaaa2hosiu47uxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ★接続対象のテナント

Enter a region (e.g. ca-toronto-1, eu-frankfurt-1, uk-london-1, us-ashburn-1, us-phoenix-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]:  ★すでにRSAキーペアを作成済の場合はnを選んでください。

Enter a directory for your keys to be created [/home/opc/.oci]: ★このディレクトリにRSAキーファイルが作成されます。

Enter a name for your key [oci_api_key]:

Public key written to: /home/opc/.oci/oci_api_key_public.pem ★公開鍵のファイル

Enter a passphrase for your private key (empty for no passphrase): ★テストなのでパスフレーズなしでいきます。

Private key written to: /home/opc/.oci/oci_api_key.pem ★秘密鍵のファイル

Fingerprint: 1f:ca:22:4d:d4:e8:ac:ff:04:XX:XX:XX:XX:XX:XX:XX

Config written to /home/opc/.oci/config ★configファイルに上記入力項目が保存されます。

 

    If you haven't already uploaded your public key through the console,

    follow the instructions on the page linked below in the section 'How to

    upload the public key':

 

        https://docs.us-phoenix-1.oraclecloud.com/Content/API/Concepts/apisigningkey.htm#How2

 

[opc@bm1 ~]$ ls ~/.oci

config  oci_api_key.pem  oci_api_key_public.pem

 

 

~/.ociディレクトリの配下に鍵ファイルとconfigファイルができていることがわかります。

[opc@bm1 ~]$ ls ~/.oci

config  oci_api_key.pem  oci_api_key_public.pem

 

 

続いて、ocicliのセットアップで作成した鍵ペアの公開鍵をOCIにAPI Keyとして登録します。これによりocicliやSDKで処理を実行した際に、内部的に利用されるIAMユーザが認証されます。

 

まずは公開鍵ファイルの内容をコピー。

[opc@bm1 ~]$ cat ~/.oci/oci_api_key_public.pem

-----BEGIN PUBLIC KEY-----

MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3sBjUdtOKH8xFyNZEShj

nVE9Gs3HtTsChRAggLlR1mjMXnyhBL/PFIdW5t36aoYvdOBOBkzd8BYlj3wbVk0M

OPYZoUdp+2Rb8hFFW3dy31OdQY6ohbgviFNLVT5w0d9lgwYljnz8fPACEqjacsbv

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

-----END PUBLIC KEY-----

 

コピーした鍵を下記のようにCloud Consoleのテキストフィールドにペーストして登録完了です。

これでocicliが使えるようになりました。参考までにocicliセットアップ時に作成されるconfigファイルの内容が下記です。入力した値がそのまま記載されていますね。

 

[opc@bm1 ~]$ cat ~/.oci/config

[DEFAULT]

user=ocid1.user.oc1..aaaaaaaazxunrppwodigwwrp2xxrgkgxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

fingerprint=1f:ca:22:4d:d4:e8:ac:ff:04:XXXXXXXXXXXXXXx

key_file=/home/opc/.oci/oci_api_key.pem

tenancy=ocid1.tenancy.oc1..aaaaaaaa2hosiu47uvjircmwi5y7vxxxxxxxxxxxxxxxxxxxxxxxxx

region=us-phoenix-1

 

 

3)Python SDKのインストール

続いて、やっとpython sdkのインストールです。githubにはoracle cloud infrastructure の公式リポジトリがあります。その中にoci-python-sdkというリポジトリがありますのでここからPython SDKのzipファイルをダウンロードします。

 

Python SDKのリポジトリ

このリポジトリのoci-python-sdk-2.1.7.zipをダウンロードします。ブラウザからでもいいですし、wgetでダウロードしていただいてもかまいません。

(sdk_test) [opc@bm1 ~]$ wget https://github.com/oracle/oci-python-sdk/releases/download/v2.1.7/oci-python-sdk-2.1.7.zip

--2019-02-19 03:52:36--  https://github.com/oracle/oci-python-sdk/releases/download/v2.1.7/oci-python-sdk-2.1.7.zip

.....

....

Length: 8032073 (7.7M) [application/octet-stream]

Saving to: ‘oci-python-sdk-2.1.7.zip’

100%[=======================================================================>] 8,032,073   18.0MB/s   in 0.4s

2019-02-19 03:52:37 (18.0 MB/s) - ‘oci-python-sdk-2.1.7.zip’ saved [8032073/8032073]

 

ダウンロードが完了しました。

 

続いて、ダウロードしたzipファイルを解凍します。

(sdk_test) [opc@bm1 ~]$ unzip oci-python-sdk-2.1.7.zip

 

解凍すると下記のようにoci-python-sdkというディレクトリができあがります。

(sdk_test) [opc@bm1 ~]$ ls

bin  lib  oci-python-sdk  oci-python-sdk-2.1.7.zip  sdk_test

 

oci-python-sdkに移動すると、oci-2.1.7-py2.py3-none-any.whlファイルがあります。

(sdk_test) [opc@bm1 oci-python-sdk]$ ls

CHANGELOG.rst  docs  examples  LICENSE.txt  oci-2.1.7-py2.py3-none-any.whl

 

Python SDKをインストールしてゆきます。

(sdk_test) [opc@bm1 oci-python-sdk]$ pip install oci-*-py2.py3-none-any.whl

.......

.......

インストール完了です。

これでやっとOCI Python SDKが利用可能な状態になりました。

 

4)Python SDKで「Hello, World!」をやってみる

なにごとも「Hello, World!」から。今回はマニュアルにあるHello Worldのサンプルコードをそのまま実行してみたいと思います。実行している内容としては「OCIオブジェクトストレージにバケットを作成し、そこに「Hello, World!」という文字列が入ったオブジェクトを作成する」というものです。

 

まずはPythonのインタラクティブモードに入ります。

(sdktest) [opc@mgmt sdktest]$ python

Python 2.7.5 (default, Nov  1 2018, 03:12:47)

[GCC 4.8.5 20150623 (Red Hat 4.8.5-36.0.1)] on linux2

Type "help", "copyright", "credits" or "license" for more information.

>>>

インタラクティブモードに入りました。

 

下記のように、作成されたconfigファイルを読み込みます。これにより、configファイル内に設定されているテナント、IAMユーザー、認証情報などが定義されるわけですね。さらにコンパートメント情報を定義します。

>>> import oci

>>> from oci.config import from_file

>>> config = from_file()

>>> compartment_id = config["tenancy"]

 

続いて、オブジェクトストレージにバケットを作成します。プロビジョニング系の処理は、やはりterraformやocicliのほうがクイックで分かりやすいですが、せっかくなのでSDKを使って作ってみたいと思います。オブジェクトストレージの操作は主にoci.object_storageクラスを利用し、バケットを作成するメソッドはcreate_bucket()になります。

 

>>> object_storage = oci.object_storage.ObjectStorageClient(config)

>>> namespace = object_storage.get_namespace().data

>>> from oci.object_storage.models import CreateBucketDetails

>>> request = CreateBucketDetails()

>>> request.compartment_id = compartment_id

>>> request.name = "MyTestBucket"

>>> bucket = object_storage.create_bucket(namespace, request) ★ここでバケットが作成される

>>> bucket.data.etag

u'998ea6ec-15b1-475d-9095-bc8b31634769'

これで「MyTestBucket」が作成されました。

 

Cloud Consoleから確認してみましょう。できてますね。しっかりと。MyTestBucketが。

そしてこのBucketに「Hello, World!」の文字列を入れたオブジェクトを書き込みます。書き込む際はput_object()メソッドを使います。

>>> my_data = b"Hello, World!"

>>> obj = object_storage.put_object(

... namespace,

... bucket.data.name,

... "my-object-name",

... my_data)

 

こちらもCloud Consoleから確認してみましょう。Bucketの中をみてみると、、、ありました!my-object-nameという名前のオブジェクトが作成されています。

念のためダウンロードして中身を確認します。メニューからDownloadを選択。

ダウンロードしたファイルをメモ帳で開いてみると、「Hello, World!」の文字列がちゃんとあります。

以上、非常に簡単ですがPython SDKの実行例でした。こちらがAPIリファレンスになりますのでどんなメソッドがあるのか詳細にお知りになりたい方は是非ご参照ください。

 

では、よいクラウドライフを!