Amazon RDS Custom for Oracle作成の手引き（その１：Custom Engine Versionの作成）

#はじめに
Amazon RDS Custom for Oracleを利用する際、Oracle DatabaseをインストールするためにCEV（Custom Engine Version）と呼ばれるAMI（Amazon Machine Image）を、あらかじめ自身が取得したOracle Databaseのメディア（インストーラ）等を用いて作成する必要があります。
ざっくりいうと、OS・(パッチ含めて)インストールされたDatabase Home・作成済みのDatabase が一つに固められたイメージ(AMI)になります。
[ユーザガイド](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/custom-cev.html) に作成手順は載ってますが、現時点ではまだ英語だったり、作ってみるとちょっと足りないところもあったりするのでまとめておきます。



#CEV作成前の準備
[ユーザガイド](https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/custom-cev.html)にもありますが、以下の準備が必要です

1. Oracle Database のメディア(インストーラ)の準備
1. インストールメディアのS3へのアップロード
1. CEVのマニフェストファイル(インストールファイルの場所指定)の準備
1. IAM権限・KMSの準備

####1. インストーラの準備
[Oracle Software Delivery Cloud(EDelivery)](https://edelivery.oracle.com/) からダウンロードするか、手持ちのメディアを利用する必要があります。
[edeliveryの利用](https://docs.oracle.com/cd/F19136_01/ladbi/downloading-the-software-from-oracle-software-delivery-cloud-portal.html)にはMy Oracle Supportのアカウントや、ライセンス条項への同意も必要になります。

19cのバージョンは以下のような形で選択できます、Platformsは x86-64 を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2313926/775deb2c-d7d7-38b7-d016-4fabc7202246.png)

ライセンス条項に同意すると、19cのメディア(V982063-01.zip:19.3)がダウンロードが可能となります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2313926/f35cf90f-af97-2d25-ee78-120a3d8620c5.png)

また、RU等のパッチは[MOS(My Oracle Support)](https://login.oracle.com/mysso/signon.jsp)からダウンロードできます。
例えば、2021年12月現在最新のRU 19.13は次のような形で検索すると確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2313926/2b3de3d4-e4f3-46b0-57d8-cf37df6221d6.png)
[x86-64のRU 19.13のダウンロードリンク先](https://updates.oracle.com/Orion/Services/download/p33192793_190000_Linux-x86-64.zip?aru=24462514&patch_file=p33192793_190000_Linux-x86-64.zip)です。
RU 19.10のダウンロードリンク先は[ユーザガイド](https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/custom-cev.html#custom-cev.preparing.download)に記載があります。

(Customではない)RDS for Oracleを導入する際に適用される[パッチ一覧](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.Oracle.RU-RUR.19.0.0.0.html)があるので、ここに記載されているパッチをダウンロードすると良いかと思います。


####2. インストールメディアのS3へのアップロード
ダウンロードしたファイルをS3のバケットへアップロードします [^1] 。
S3のバケットはCEVを作成するリージョンと同じリージョンである必要があります。
[^1]: 既存のバケットがない場合にはバケット作成権限、バケットへのPut権限等が必要になります

####3. CEVのマニフェストファイルの準備
マニフェストファイルはS3にアップロードしたファイルにおいて、**どのファイルがどこにありなんの役目か**、を示す[JSONドキュメントファイル](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/custom-cev.html#custom-cev.preparing.manifest)になります。
注意したい点は、JSONドキュメントの記載の順序でパッチが適用されますので、順序が違うとCEV作成で失敗することがあります。
Pythonスクリプトのjson.toolで[マニフェストの検証](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/custom-cev.html#custom-cev.preparing.validating)はできますが、適切なパッチなのか、順序は正しいか、等は検証できませんので、実際にCEVを作成して確認する必要があります。(そしてCEV作成には2時間程度時間がかかります)

####4. IAM権限・KMSの準備
IAM権限・KMSについてはRDS Custom自体を作成する際にも必要になりますが、CEV作成で必要な権限は独自の権限になります。
必要なIAM権限についてはユーザガイドに記載があります。
また、ガイドに記載がありませんが、接続元IPアドレス制限があるIAMでのCEV作成はエラーが出て成功しませんでした。
- [Adding necessary IAM permissions](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/custom-cev.html#custom-cev.preparing.iam)


AWS Managedではない[対称のKMSキーが利用できる必要](https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/custom-setup-orcl.html#custom-setup-orcl.cmk)があります。（こちらのKeyもRDS Customを作成する際に必要になる対称キーと同じである必要はありません）

#CEVを作成してみる
AWSマネジメントコンソールのRDSコンソールを開き、カスタムエンジンバージョン→カスタムエンジンバージョンの作成 を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2313926/940d9d70-4184-72a6-4378-f79e0ceb8b55.png)

「カスタムエンジンバージョンの作成」のウィンドウが開きます。

+ 「エンジンのオプション」は現在選択できません
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2313926/d49b8415-c81a-de87-2554-8024f79584d6.png)

+ 「バージョンの詳細」は名前を入れるだけなので、好きな名前を入れましょう
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2313926/a1604b53-b40d-ad5c-8fb8-11b8ac76ad9e.png)

+ 「インストールメディア」は自身でアップロードしたバイナリが含まれるS3バケットと、マニフェストファイルを記載します
　「S3のマニフェストファイルの場所」とありますが、マニフェストファイルではなくバイナリがある場所になります
　こちらに記載したマニフェストファイルの説明は[ユーザガイド](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/custom-cev.html#custom-cev.preparing.manifest)を参照してください
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2313926/fe109b98-5921-42cd-d5ad-b4ff1601eb24.png)


\- 19.10のマニフェストファイル(例)とS3バケットの中身
　(パッチ32327201: RDBMS - DSTV36 UPDATE - TZDATA2020E を追加)

``` 19.10のマニフェストファイル(例)
{
    "mediaImportTemplateVersion": "2020-08-14",
    "databaseInstallationFileNames": [
        "V982063-01.zip"
    ],
    "opatchFileNames": [
        "p6880880_190000_Linux-x86-64.zip"
    ],
    "psuRuPatchFileNames": [
        "p32126828_190000_Linux-x86-64.zip"
    ],
    "otherPatchFileNames": [
        "p29213893_1910000DBRU_Generic.zip",
        "p29782284_1910000DBRU_Generic.zip",
        "p28730253_190000_Linux-x86-64.zip",
        "p29374604_1910000DBRU_Linux-x86-64.zip",
        "p28852325_190000_Linux-x86-64.zip",
        "p29997937_190000_Linux-x86-64.zip",
        "p31335037_190000_Linux-x86-64.zip",
        "p31335142_190000_Generic.zip",
        "p32327201_190000_Linux-x86-64.zip"
    ]
}
```


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2313926/1f0a2118-5d90-4f38-cacd-44ef2818f5ca.png)



\- 19.13のマニフェストファイル(例)とS3バケットの中身 



```19.13のマニフェストファイル(例)
{
    "mediaImportTemplateVersion": "2020-08-14",
    "databaseInstallationFileNames": [
        "V982063-01.zip"
    ],
    "opatchFileNames": [
        "p6880880_190000_Linux-x86-64.zip"
    ],
    "psuRuPatchFileNames": [
        "p33192793_190000_Linux-x86-64.zip"
    ],
    "otherPatchFileNames": [
        "p29213893_1910000DBRU_Generic.zip",
        "p29782284_1910000DBRU_Generic.zip",
        "p28730253_190000_Linux-x86-64.zip",
        "p29374604_1910000DBRU_Linux-x86-64.zip",
        "p28852325_190000_Linux-x86-64.zip",
        "p29997937_190000_Linux-x86-64.zip",
        "p31335142_190000_Generic.zip",
        "p32327201_190000_Linux-x86-64.zip"
    ]
}
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2313926/1be47119-97bf-e733-b241-6cf089272680.png)

+ 「KMSキー」は利用可能なキーを選択してください(必須)
+ 「タグ」は必要に応じて
+ →カスタムエンジンバージョンを作成、を押下すると、何も問題なければ作成ステータスに遷移します(押下する前に実行するユーザの接続元IPアドレス制限等がかかってないことを確認しておきましょう)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2313926/88c5952d-75f4-2dc4-759e-c8964ad662b1.png)

+ 入力した情報に問題がない場合には、「作成中」のステータスに遷移します（作成に成功したら「利用可能」になります）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2313926/a773a900-62a6-2614-cea5-51c5fe96ed83.png)

+ 作成に失敗すると「イベント」にエラー情報が出力されます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2313926/c6593962-4a7b-3fd0-f6d3-e06d324e44ee.png)


#まとめ
如何でしょうか？CEV作成自体は時間がかかりますがそんなに大変ではありませんので、興味があればトライしてみてください！
CEVを作成しておくことで、RDS Customをすぐにプロビジョニングすることができるようになります。
また、複数のCEVを作成することでRDS Customのバージョン管理等を行うことができるようになりますが、それについては別途書きます。

+ 必要なパッチ選定がキモになる
+ 作成時間が長いので、リトライが大変
+ S3バケットやKMS、IAM権限の設定等、事前の準備が必要