- 3,708,718 Users
- 2,241,112 Discussions
- 7,840,550 Comments
Forum Stats
Discussions
Oracle Cloud Infrastructure:Python SDKを使ってみよう

@本記事では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をインストールされたほうがいいですね。)
[[email protected] ~]$ sudo yum install gcc libffi-devel python-devel openssl-devel
Loaded plugins: langpacks, ulninfo
Resolving Dependencies
--> Running transaction check
.......
.......
.......
Complete!
[[email protected] ~]$ python --version
Python 2.7.5
これでPythonのインストールが完了しました。続いてpipをインストールします。
[[email protected] ~]$ 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
[[email protected] ~]$ 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は必須ではありませんが何かと便利ですのでマニュアル通りインストールしたいと思います。
[[email protected] ~]$ sudo pip install virtualenv
Collecting virtualenv
.......
.......
Installing collected packages: virtualenv
Successfully installed virtualenv-16.4.0
で、仮想環境を作成してゆきます。今回はsdk_testという名前の仮想環境を作成しました。
[[email protected] ~]$ virtualenv sdk_test
New python executable in /home/opc/sdk_test/bin/python
Installing setuptools, pip, wheel...
done.
[[email protected] ~]$ ls
bin lib sdk_test
[[email protected] ~]$ source sdk_test/bin/activate
(sdk_test) [[email protected] ~]$
2)ocicliのインストール、セットアップ
続いて、ocicliをインストールします。ocicliはociの各種サービスのプロビジョニングや管理操作などを簡素化されたコマンドで実行するためのCLIツールです。REST APIをPythonでラップしたツールです。SDKを使う上で必須ではありませんが、何かと便利ですのでインストールします。ocicliについてはこちらに詳細なチュートリアルがありますので是非参考にされてください。
まずはocicliをインストールしてゆきます。
(sdk_test) [[email protected] ~]$ 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のセットアップです。★の部分は簡単な説明です。
[[email protected] ~]$ 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
[[email protected] ~]$ ls ~/.oci
config oci_api_key.pem oci_api_key_public.pem
~/.ociディレクトリの配下に鍵ファイルとconfigファイルができていることがわかります。
[[email protected] ~]$ ls ~/.oci
config oci_api_key.pem oci_api_key_public.pem
続いて、ocicliのセットアップで作成した鍵ペアの公開鍵をOCIにAPI Keyとして登録します。これによりocicliやSDKで処理を実行した際に、内部的に利用されるIAMユーザが認証されます。
まずは公開鍵ファイルの内容をコピー。
[[email protected] ~]$ 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ファイルの内容が下記です。入力した値がそのまま記載されていますね。
[[email protected] ~]$ 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) [[email protected] ~]$ 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) [[email protected] ~]$ unzip oci-python-sdk-2.1.7.zip
解凍すると下記のようにoci-python-sdkというディレクトリができあがります。
(sdk_test) [[email protected] ~]$ 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) [[email protected] oci-python-sdk]$ ls
CHANGELOG.rst docs examples LICENSE.txt oci-2.1.7-py2.py3-none-any.whl
Python SDKをインストールしてゆきます。
(sdk_test) [[email protected] 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) [[email protected] 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リファレンスになりますのでどんなメソッドがあるのか詳細にお知りになりたい方は是非ご参照ください。
では、よいクラウドライフを!