Oracle SOA Suite を OCI Marketplace 経由でプロビジョニングしてみる

## はじめに
OCI MarketplaceではOracle SOA Suiteが[提供](https://docs.oracle.com/en/cloud/paas/soa-cloud/soa-marketplace/soamp-preface.html)されています。
Oracle SOAをOCIのMarketplace経由で簡単にプロビジョニングしてみようと思います。

## 前提
Oracle SOA Suite (PAID)の23.1.1を利用して進めます。
作成するSOA Suiteのスタックを以後SOA Marketplaceと呼びます。

## 基本的な流れ
ドキュメントに沿って進めます。[Before You Begin](https://docs.oracle.com/en/cloud/paas/soa-cloud/soa-marketplace/soamp-you-begin.html)から従って進めてみます。
## 事前準備
#### コンパートメントの作成
まずはコンパートメントを作成します。
特に制限はないので、作成した後にコンパートメントに対して以下のポリシーを設定します。
`<compartmentName>`は作成したコンパートメントの名前に置き換えてポリシーを作成します。

- allow group groupName to manage instance-family in compartment <compartmentName>
- allow group groupName to manage virtual-network-family in compartment <compartmentName>
- allow group groupName to manage volume-family in compartment <compartmentName>
- allow group groupName to use database-family in compartment <compartmentName>
- allow group groupName to use autonomous-database-family in compartment <compartmentName>

#### VCNの作成
`VCNウィザードの起動`から`インターネット接続性を持つVCNの作成`をクリックしVCNを作成します。
ここで作成するVCNはあくまでも検証用のものになります。

- 名前: 任意
- コンパートメント: 先ほど作成したコンパートメント
- VCN IPv4 CIDRブロック: 10.0.0.0/16
- Public Subnet CIDR Block: 10.0.0.0/24
- Private Subnet CIDR Block: 10.0.1.0/24

#### セキュリティリストの構成
今回は以下の構成でプロビジョニングしてみます。
- パブリックサブネットに踏み台とLB
- プライベートサブネットにSOA SuiteとDB

以下のようにイングレス・ルールを設定します。
| サブネット | ポートの設定 | 補足 |
| --- | --- | --- |
| パブリックサブネット | 22 | Marketplaceからのアクセス用 |
|  | 443 | インターネットアクセス(0.0.0.0/0)用 |
| プライベートサブネット | 22 | 踏み台からのアクセス用
|  | 9073 | LBからのアクセス用 |
|  | 全てのポート | サブネット内のアクセス用 |

#### SSHキーの作成
SSHキーを作成します。
[Linuxでの作成方法](https://docs.oracle.com/en/cloud/paas/soa-cloud/soa-marketplace/soamp-generate-ssh-key-pair-unix-and-unix-platforms-using-ssh-keygen-utility.html)や[Windowsでの作成方法]を参考に作成するか、OCI Computeインスタンスの作成画面を利用して行う方法もあります。

#### Oracle Databaseの作成
SOA Suiteは以下のOracle Databaseをサポートしています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482527/2902ecfe-3224-6334-1196-e284e09049e6.png)
今回はATPを利用してみようと思います。**Always FreeのATPインスタンスはサポートしていない**ので注意が必要です
以下のようにATPをプロビジョニングします。
- データベース名: atp4soa
- バージョン: 19c
- 他は任意

## SOA Marketplaceスタックの作成
メニューから`マーケットプレイス` -> `すべてのアプリケーション`と選択し、検索欄に「SOA」と入力します。
Oraacle SOA Suite (PAID)を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482527/6982cfcb-14e7-a97b-008c-fe411266b479.png)

#### SOA Marketplaceのプロビジョニング
<font color="red">※2023年3月現在、コンソールが日本語版だとバージョンが選択できない不具合が発生しているため、言語を右上メニューよりEnglishに設定して以下の手順を実行してください。</font>
Nameには任意の名前を記述して「Next」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482527/29fd3e67-6608-11c5-7403-ab15bd087c0e.png)

###### Service Instanceの入力内容
MarketplaceのUIに以下のように入力します。
特に指定のない箇所はデフォルトのままで構いません。

- Instance Name Prefix: 任意
- Service Type: SOA with SB & B2B Cluster
- Compute Shape: 任意
- SSH Public Key: 作成したSSHキー
- Cluster Node Count: 1
- Administration Username: weblogic
- Administration Password: 任意(welcome1など)
- Domain Volume Size (GB): 50

###### Instance Networkの入力内容
- Network Compartment: 作成したコンパートメント
- Virtual Cloud Network Strategy: Use Existing VCN
- Existing Network: 作成したVCN
- Subnet Strategy: Use Existing Subnet
- Subnet Compartment: 作成したコンパートメント
- Subnet Type: Use Private Subnet
- Subnet Span: Regional Subnet
- Existing Subnet: 作成したプライベートサブネット
- Bastion Strategy: Create New Bastion Instance
- Bastion Host Subnet Compartment: 作成したコンパートメント
- Existing Subnet for Bastion Host: 作成したパブリックサブネット
- Bastion Host Shape: 任意
- Provision Load Balancerにチェック
- Load Balancer Strategy: Create New Load Balancer
- Load Balancer Subnet Compartment: 作成したコンパートメント
- Load Balancer Subnet Type: Use Public Subnet
- Existing Subnet for Load Balancer: 作成したパブリックサブネット
- Load balancer Shape: Flexible

###### Databaseの入力内容
- Database Strategy: Autonomous Transaction Processing Database
- Autonomous DB System Compartment: 作成したコンパートメント
- Autonomous Database: 作成したATP
- Autonomous Database ADMIN Password: 設定したADMINユーザのパスワード

###### リソースマネージャの実行
「Next」をクリックし、問題なければ「Create」をクリックするとリソースマネージャのジョブが開始します。
30分ほどかかるので気長に待ちましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482527/5ca1bad6-5bea-8d39-1442-db2d7fc77144.png)

完了後、「Outputs」に表示されている値を利用するのでこのページは表示したままにしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482527/2860e4f2-94a6-3e4e-331f-7698039cd1ac.png)

#### プロビジョニング後のタスク
以下のようにイングレス・ルールを設定します。
| サブネット | ソース | 宛先ポート | 補足 |
| --- | --- | --- |--- |
| プライベートサブネット | <踏み台のPublic IP>/32 | 7002 | コンソールアクセス用 |

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482527/70f11c6a-e990-14b8-7202-5891ba05da19.png)

## 環境の確認
FMWコンソールにアクセスしてみます。
先ほど確認したOutputsの値から、`FMW_Console`の値を確認してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482527/27bc3fd0-ceb9-f2e4-2a5c-303cf70ff855.png)

キャプチャのようにPrivate IPを含んだValueが表示されているので、ポートフォワードして端末からアクセスできるようにしてみます。
```
$ ssh -i <SSH Keyのパス> opc@<踏み台のパブリックIP> -L 7002:<プライベートIP>:7002
```
[https://localhost:7002/em](https://localhost:7002/em)にアクセスします。
Enterprise Manager にアクセスができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482527/799c1620-3d0a-4a6c-9a3f-a759b3ae3ee5.png)

Outputsの`Loadbalancer_Public_Ip`を利用してSOAコンポーザにアクセスできます。
`https://<Loadbalancer_Public_Ip>/soa/composer/`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482527/f64e9d21-0d4d-4b61-4efd-fbb92997b1ca.png)
weblogicユーザでログインが可能です。

## まとめ
今回はSOA Marketplaceを利用してOracle SOA SuiteをOCI上にプロビジョニングしてみました。
次回はアプリケーションのデプロイなども含めて実際に動かしてみようと思います。

## 参考資料
https://docs.oracle.com/en/cloud/paas/soa-cloud/soa-marketplace/soamp-preface.html