oracleライセンス高いけど、awsでもoracle使える。

ec2ホストからoracle使わせたり、s3バケットに向かってデータポンプでのバックアップ取ったり。

rdsそのものを丸々バックアップするawsバックアップの指定もつけてく。

本体を作る前に、作成してくもんがあるから順に作る。

ポリシーとロールの設定

oracleデータポンプ用の出力先にnari-s3-bucketを作っておいて、rdsから使わせるポリシーを用意。

policy-nari-s3bucket - iam policy
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:ListObject",
                "s3:DeleteObject"
            ],
            "Resource": "arn:aws:s3:::nari-s3-bucket",
            "Resource": "arn:aws:s3:::nari-s3-bucket/*"
        }
    ]
}

作ったポリシーをロールにつける。

rds-oracle

ロールには信頼関係つける。

role-nari-s3bucket - iam role
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "",
            "Effect": "Allow",
            "Principal": {
                "service": "rds.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}

rds-oracle

セキュリティグループの設定

セキュリティグループを作成する。許可対象のec2が複数あるから、ここではソースの指定にマネージドプレフィックスリスト使った。

rds-oracle

アウトバウンドは省略するけど、他のホストからDBリンクとか作られたときのため、ほぼ全解放(0.0.0.0)しとく。

vpcの画面にあるマネージドプレフィックスリストにec2-windowsホストのIPやサブネットを指定しとく。

rds-oracle

サブネットグループの作成

アベイラビリティーゾーンを指定してサブネットグループを作成。普通は指定1つでええ。

rdsでマルチにすると、1つのアベイラビリティーゾーンで障害起きても別のゾーンで自動起動できるから、意地でも起動してくる。

rds-oracle

rds-oracle

オプションループの作成

エンジンとバージョンの指定しとく。

rds-oracle

オプションはたくさんあるけど、テスト環境で普段つけてるのは3つ。

rds-oracle

Statspackは、Oracle社がデータベースの配布キットと共に提供するパフォーマンスチューニングキット。19cでも使ってる。

パラメータループの作成

パラメータグループも指定する。se2ってあるのはstandard-edition2かな。

rds-oracle

本体作成

m5.xlargeあたりを選ぶ。

rds-oracle

ホンマは100GBでもええ。データ流し込み前は小さく作っておいて、利用率に応じて後で広げる。自動スケールはやらん。

rds-oracle

先に作っておいたセキュリティグループを使う。

rds-oracle

バックアップを有効にする。バックアップウィンドウはUTC指定なのが面倒。期間は「0.5時間以内に開始」みたいな意味やったはず。

rds-oracle

rdsだけやなくて、utc指定する箇所はawsに他にもある。時差変換は面倒やけど、計算してくれるサイトあるから常用。作者さんありがとう。

ElastiCacheは使わんから、そのまま閉じる。ここから15分ぐらい待たんと利用可能にならん。それでも手動でインストールして構築すること考えたら楽チン。

rds-oracle

利用可能になった後、準備しといたロールを追加しとく。

rds-oracle

接続確認とデータ流し込み

RDSにs3からデータを流し込める。

データの準備とかは割愛するけど、接続確認を含めて実際にはこのへんでやってる。

「一意制約違反」がボンボン出ることあるから、あんまりoracleのデータ流し込み作業好きやないんよな。

RDSのクセとか特性

aws-rdsは「いかにずっと稼働できるか」を追求してはるから金かかる。

お客さんによってはRDS使わずに、ec2ホストでDBMSインストールして稼働させることもある。

  1. 完全停止できん。一時停止みたいなことしても、7日経過後にまた起動してくる
  2. ダンプデータでのバックアップ・リストアはs3バケットを通じて使う
  3. ダンプデータをs3バケットを通じて使うときはaws cliやなくて sqlでやる
  4. ダンプデータはrds-oracleの中に残るから毎回削除しとかなディスクいっぱいになる(消し方忘れた)
  5. マルチAZにしとくと、ゾーン障害とかあっても稼働に耐えるDBになる
  6. rdsのエンドポイント名は恒久的やけど、IPは変わってくからtnsnames.oraにIPアドレス書いたらアカン
  7. DB丸ごとバックアップがあるのでインフラ管理としてはかなり楽
  8. オートスケールってのがあって容量を気にしなくて済む(青天井怖いなぁ)
  9. メンテナンスウィンドウによってパッチ適用やバージョンアップができるけど、まれにコケてオフライン時間が長くなる

最後の「まれにコケてオフライン時間が長くなる」は、半日とか長すぎる時間経って起動してこんかったら、awsサポート窓口に直接言わんと解決せん。

aws側で監視して、気づいたら手動で現象回避してるらしいけど、これはツラい。

メンテナンスウィンドウはawsで管理してるから利用者側ではどうにもできん。

データベースをフルマネージドで使うのはなかなか難しいで。

というか、oracleでないとできんことが列挙できんかったら、ec2でpostgresqlやmariadb使ったほうがええんとちゃうか。