[OCI] Oracle Integration Cloud の SFTP内蔵ファイル・サーバーを使ってみる

#はじめに

Oracle Integration Cloud Service（以後、OIC） は、Oracle Gen2 Cloud(OCI)で提供されているメッセージやデータ連携のためのPaaSサービスです。

2020年6月に OIC内蔵のSFTPファイル・サーバーが提供されたので、OIC チュートリアルにそって有効化し使ってみたいと思います。

[Oracle Integration Cloud チュートリアル - ファイル・サーバーの有効化](https://github.com/oracle-japan/oic-fileserver)

# OICインスタンスの作成

はじめに OIC インスタンスを作成します。チュートリアルにも記載がありますが、OICインスタンスを作成するためにはIDCSグループを作成したり、IDCSグループにOICインスタンスの作成権限を付与したりといった準備が必要ですが本稿では省略しています。詳細は以下をご覧ください。

[OIC インスタンスを作成する - 準備編](https://community.oracle.com/tech/welcome/discussion/4474334/oic-%E3%82%A4%E3%83%B3%E3%82%B9%E3%82%BF%E3%83%B3%E3%82%B9%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B-%E6%BA%96%E5%82%99%E7%B7%A8)



## リージョンの選定

今回は別のサービスとの連携要件の都合で、北米Phoenix リージョンにOICインスタンスを作成します。
![image-20210122153228327.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/e9cfb3ce-03ac-8a33-14d8-56c9aecb095a.png)

## インスタンスの作成
ナビゲーション・メニューから**[アプリケーション統合]-[統合]**を選択し、OCIインスタンスの作成ページに移行します。

![image-20210122153430280.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/58c475b4-7996-940f-806f-cc74038ed39c.png)

![image-20210127091024687.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/bf24e76e-029b-3a95-d35b-c76f82b6b6ea.png)

**統合インスタンスの作成** をクリックし、インスタンスの作成メニューを表示します。

![image-20210122153755392.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/9f74d31c-f133-39e5-72f1-df7a1f2e6d40.png)
**[表示名]** 任意の名前を入力
**[エディション]** **Enterprise**を選択してます。将来 Process機能を使うかもしれないので**Enterprise** を選択しましたが、内蔵ファイルサーバーは**標準**でも使用できます。
**[ライセンスタイプ]** **新しいOracle Integrationライセンスのサブスクライブ** を選択します。
**[メッセージ・パック]** 時間当たり5000メッセージまでの利用を想定し、最小の**1** パッケージを選択。

**作成** をクリックし、OICインスタンスを作成します。

しばらくしてOICインスタンスが作成されました。
![image-20210122155125335.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/77d284e7-b8eb-8c2f-0aed-9a716aa0a7ab.png)
# ファイルサーバーの設定
## ファイルサーバーの有効化

右下の **ファイル・サーバー：**の**有効化**をクリックし、ファイル・サーバーを使えるようします。 
![image-20210122155922540.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/a7ea376e-36e6-efb8-2e19-cc015cc83e43.png)
有効化の確認画面が表示されます。**有効化** をクリック。
![image-20210122160140083.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/08f2bdf6-a201-270f-e1bd-89a5d57aba65.png)

ファイル・サーバー有効化のリクエストが送信され、しばらくするとファイル・サーバーが**有効**になりました。
![image-20210122160542250.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/909aa75b-ea95-cfb1-e0b0-4e1814e8d1bc.png)

![image-20210122160822714.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/21c5f061-223b-03d3-a7c8-de83c8a94771.png)

## ファイル・サーバーの設定
**サービス・コンソール**をクリックします。
![image-20210122161206981.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/24e54a37-8820-bc76-e927-76fbc8395801.png)

サービス・コンソールの左上のナビゲーション・メニューをクリックし、左パネルを表示します。
![image-20210122161718431.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/8c98c103-b5bf-10b7-e856-5ba3c993c100.png)

左パネル上で、**[設定] → [File Server] → [Setting]** と順にクリックし、次の**[設定]** 画面を表示させます。

**ステータス** セクションで、
- 500GBのストレージ領域が未使用であること
- SFTPサーバが実行中のステータスであること、が確認できます。
![image-20210122162207077.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/a4fa38f9-364d-94c4-9598-731a51248e04.png)

### ファイル・サーバーのIPアドレスとポート

上記画面の**一般** セクションの右下部の**IPおよびポート情報**から、SFTPサーバーに接続譲情報が得られるのでメモしておきます。SFTPクライアントから接続する際に使用します。

- **IPアドレス：192.29.96.243**
- **ポート：5007**

## ファイル・サーバーにアクセスするユーザーの有効化
続いて、ファイル・サーバーにアクセスするユーザーの有効化をおこないます。

### ユーザー認証
OICのファイル・サーバーは初期状態では次の認証方式が使用可能です。

- **パスワード認証**
  OICのサービス・コンソールにログインする時と同じユーザー名とパスワードを使用します。
- **公開鍵認証**
  公開鍵と秘密鍵の鍵ペアを使用します。今回はこちらの公開鍵認証でファイル・サーバーに接続します。

### ユーザーの認証設定と有効化
**Users** をクリックすると、OICにアクセス可能なユーザーが一覧表示されます。アクセスを有効化したいユーザーを検索し右端の鉛筆のアイコンをクリックします。
![image-20210122172848060.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/122ad01a-81b1-cbeb-32fb-e7f7215f6773.png)
SFTPのプロパティ画面が表示されるので、**認証公開キー** の項目で公開鍵をアップロードします。
![image-20210122164216967.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/2bbf88be-791b-ebac-77c5-b28d9db29c28.png)
![image-20210122164321904.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/f66cb1da-c7bb-88b3-101d-20b9272fdfde.png)
公開鍵のアップロードが完了すれば、認証公開キーの項目に公開鍵ファイル名が表示されます。
![image-20210122173931771.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/58c003d7-a94b-ebaa-d508-cd3b39580349.png)
プロパティの画面を閉じ、次のように構成済みが表示されホーム・フォルダが設定されていれば完了です。

![image-20210122164517319.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/d7814ddb-8575-7d48-c679-0ceed6b4757b.png)
## フォルダの権限

詳細表示を開くと、ホーム・フォルダへの権限もすべて可能な旨が確認できました。
![image-20210122174529137.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/af5a73be-46e8-3b63-b053-500e736a828e.png)

# 動作確認

OICのファイル・サーバーに関する設定は完了したので、自分のWindows10デスクトップから任意のファイルをアップロードできるかを確認してみます。

## OICファイル・サーバーへの接続

sftpコマンドで接続を試みます。

```
sftp -P <ポート> -i <秘密鍵ファイル> <ユーザー名>@<sftpファイル・サーバーのIPアドレス> 
```

パラメータとしては、以下が必要です。

- ファイル・サーバーのIPアドレスとポート
- ユーザー名
- 秘密鍵ファイル

```
例:
sftp -P 5007 -i ~/.ssh/id_rsa ichiro.tanaka@company.com@192.29.96.243
```

実際にPowerShell にコマンド入力して接続を試みると、以下のように sftpサーバーに接続成功した旨のメッセージが表示され、sftpプロンプトが表示されました。 

![image-20210122180728090.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/dfe7dddc-1f9e-73cd-c364-13280fe2273e.png)
無事ファイル・サーバーに接続できたので、さらにsftpサブコマンドでファイル操作を継続します。

## OICファイルサーバーへファイルを送信

以下にsftpサブコマンドの代表的なものをリストします。ファイル・サーバー(リモートホスト)に対するサブコマンドは、ほぼ Linuxコマンドと同じ(例) ls, cd, pwd)で、ローカルのデスクトップに対するサブコマンドは先頭が Local の l(エル)で始まります(例) lls, lcd, lpwd)。

| sftp サブコマンド | 機能説明                                         |
| ----------------- | ------------------------------------------------ |
| ls                | リモートホストのディレクトリ内容を一覧表示       |
| lls               | ローカルマシンのディレクトリ内容を一覧表示       |
| put               | ローカルマシンのファイルをリモートホストへ転送   |
| get               | リモートホストのファイルをローカルマシンへ転送   |
| pwd               | リモートホストのカレントディレクトリパスを表示   |
| lpwd              | ローカルマシンのカレントディレクトリのパスを表示 |
| cd                | リモートホストのカレントディレクトリを変更       |
| lcd               | ローカルマシンのカレントディレクトリを変更       |



では、実際にローカルのサンプルファイルをファイル・サーバーへ転送してみます。
**put** サブコマンドでサンプルのCSVファイル(sample.csv)をファイル・サーバーへ転送し、転送されたことを **ls** サブコマンドで確認します。

![image-20210126173755115.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496842/11e87f64-2b69-757d-4cca-584c0e7f45b0.png)
無事に sample.csv ファイルが転送されたことが確認できました。

## まとめ

OICのインスタンスが作成されていれば、ファイル・サーバーの有効化とユーザー設定ですぐにSFTPサーバーを使うことができました。

OIC本来の機能は統合でデータ変換なども可能なので、ファイル・サーバーに転送したファイルをデータ変換してデータベースに格納したり、SaaSのサービスと簡単にデータ統合できる点がよいですね。



# 参考URL

[Oracle Integration Cloud チュートリアル - ファイル・サーバーの有効化](https://github.com/oracle-japan/oic-fileserver)

書籍 [OpenSSH［実践］入門](https://www.amazon.co.jp/OpenSSH%EF%BC%BB%E5%AE%9F%E8%B7%B5%EF%BC%BD%E5%85%A5%E9%96%80-Software-Design-plus-%E5%B7%9D%E6%9C%AC%E5%AE%89%E6%AD%A6-ebook/dp/B00P7SKB40)