ニフクラSDK使うには、Jupyter Notebookが便利な件について

みなさん、こんにちは。
[富士通クラウドテクノロジーズ Advent Calendar 2020](http://qiita.com/advent-calendar/2016/nifty)の16日目の記事です。

昨日は、@miyuushさんのニフクラがTerraformに対応したので使ってみた【応用編】でした。
これも試してみたいですね。

# はじめに

Advent Calendarがくると、年末を感じてしまいます。
今回は、Jupyter NotebookからニフクラSDKを利用する話をします。

と言いますのも、業務で検証用に環境構築などを行うことが多くなってきまして、その構築を行う時にコンパネで毎回作成するのもいいのですが、さすがに同じ操作を数十回していると、もうやりたくなくなってきます。

そこでAPIを利用して操作すればいいのですが、開発環境をつくってのコンパイルしてと色々やらないとダメなことが多く、「やっぱり手で操作するかな・・・」って、あきらめておりました。
データデザイン事業にもかかわった時に、Jupyter Notebookに出会いPythonの容易な開発環境ができたので「ここから操作できれば結構簡単じゃないかい？」と思い、サクッとやってみたら思いのほか便利だったので今回記事にすることにしました。

# Jupyter Notebookとは
Jupyter Notebookの公式サイトは、[ここ](https://jupyter.org/)になります。
詳しい説明は他のサイトにお任せすることにします。

# PythonのSDK
ニフクラのSDKですが、ドキュメントは[ここ](https://pfs.nifcloud.com/api/sdk/)に公開されていますが、Pythonのドキュメントを以下に公開されています。

[Welcome to nifcloud-sdk-python](https://nifcloud-sdk-python.readthedocs.io/en/latest/)

利用できるサービスは5つになっています。

- ニフクラ Computing
- ニフクラ hatoba
- ニフクラ RDB
- ニフクラ NAS
- ニフクラ スクリプト

# 前準備
Jupyter Notebookは、構築してあることを前提にします。他に詳しいサイトもありますので。
私はdockerで構築しております。dockerも便利ですよね。
構築したJupyter Notebookに接続をしておいてください。

# 動かしてみよう
早速ですが、動かしてみることにします。
では、[ここ](https://github.com/nifcloud/nifcloud-sdk-python)に記載されている簡単なサンプルがありましたので、こちらをまずは動かしてみようと思います。

```
from nifcloud import session

client = session.get_session().create_client(
    "computing",
    region_name="jp-east-4",
    aws_access_key_id="<Your NIFCLOUD Access Key ID>",
    aws_secret_access_key="<Your NIFCLOUD Secret Access Key>"
)

print(client.describe_instances())
```

Jupyter Notebookに接続すると以下の画面になります。

![01.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7257/9ee98f7d-2d98-deb3-de4f-88f9f238ebb4.png)


新しいノートブックを作成します。画面からNotebookのPython 3を選択します。

![02.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7257/55819eb2-06bc-6b20-ad64-df1346fd9d1c.png)

pipコマンドを使ってSDKをインストールします。

```
!pip install nifcloud --ignore-installed
```

上記のコマンドを入力し、Shift+Enterで実行します。

![03.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7257/3dfd1b00-3ccf-a24d-af72-b213c4d7ecd0.png)

もう、これでSDKを利用できる状況になっています。

サンプルを実行してみましょう。
ソースの`<Your NIFCLOUD Access Key ID>`にはご自身のアクセスキーを、`<Your NIFCLOUD Secret Access Key>`にはシークレットアクセスキーを指定してください。両キーは、コンパネのアカウント管理で確認することができます。
先ほどと同じように、Shift+Enterで実行します。

![04.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7257/49db21f6-a6dd-f063-278a-686f6d7a13dd.png)


コンパネからも確認してみましょう。

![05.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7257/4fa4e6ed-2d77-18ee-a9c0-38b2a3926877.png)


現在のインスタンス情報が取得できました。いかがでしょうか？
Jupyter Notebookがあれば、簡単にニフクラの操作ができるようになります。

# インスタンスを起動
続いて、インスタンスの起動を行います。
メソッドは、`run_instances`を利用します。

```
response = client.run_instances(ImageId='223', KeyName='keypair', InstanceId='python' GroupSet=[{GroupId='WebAPFW'}])
```

上記のソースをJupyter Notebookで実行してみます。

![06.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7257/90b70f84-b825-224d-5b09-ad0426e2d4f8.png)

すぐに実行結果が返ってきます。

![07.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7257/73d5391f-51b2-01e6-c8b1-ba8eac1d6240.png)

まだ処理中の状況になっています。
起動後に処理を行いたい場合には、インスタンスのステータスを確認して、起動されてから処理を継続する必要があります。そのような、インスタンスの起動を待ってくれる便利な機能が提供されています。

# ステータス変更の待ち合わせ
ステータスの変更を待ち合わせるメソッドが提供されています。
先ほどの起動ソースに、作成を待つ処理を追加します。

```
response = client.run_instances(ImageId='223', KeyName='keypair', InstanceId='python', SecurityGroup=['WebAPFW'])
waiter = client.get_waiter('instance_running')
waiter.wait(InstanceId=['python'])
```

このソースを実行するとインスタンスの起動を待ち合わせますので、継続の処理が簡単に書くことができます。

# おわりに

いかがだったでしょうか。
インスタンスの簡単操作だけでしたが、すぐに利用できることを実感いただけたましたでしょうか。
また、Jupyter Notebookはドキュメントとしても残すことができますので、実行ソース付きのの実行ログとしても利用できたりします。
この記事をきっかけに、気軽にAPIを利用していただけると幸いです。

明日は、@gunkan8mmtさんのHaskellで勉強中のこと書きますになります。