https://qiita.com/nisshii0/items/d4131fef1c05b5017608
https://qiita.com/dingtianhongjie/items/8547e156fb8e4528733e
https://cloudii.jp/news/blog/oracle-cloud/ocipostgresql/
https://www.oracle.com/cloud/postgresql/pricing/
https://docs.oracle.com/ja-jp/iaas/Content/postgresql/home.htm
https://medium.com/oracledevs/oci-database-with-postgresql-cheat-sheet-ee8173a0a2ba
前提:
セキュリティリストでVCN内から5432番ポート許可したVCN作成済み
postgresql-client-14をインストールした接続確認用コンピュートインスタンス作成済み
※DB用のサブネットは「プライベートサブネット」の設定で作成必要
resource "oci_core_subnet" "subnet02" {
#Required
cidr_block = "10.0.2.0/24"
compartment_id = oci_identity_compartment.cmp01.id
vcn_id = oci_core_vcn.vcn01.id
display_name = "subnet02"
dns_label = "subnet02"
route_table_id = oci_core_route_table.rt01.id
security_list_ids = [oci_core_security_list.sl01.id]
prohibit_public_ip_on_vnic = true
}
-- 1. DBシステムの作成
oci psql shape-summary list-shapes \
--compartment-id ocid1.compartment.oc1..000000000000000000000000000000000000000000000000000000000000 \
--query 'sort_by(data.items, &"ocpu-count").{"id":"id","ocpu-count":"ocpu-count","memory-size-in-gbs":"memory-size-in-gbs"}' \
--output table
→ PostgreSQL.VM.Standard.E4.Flex.2.32GB
oci psql default-configuration-collection list-default-configurations \
--lifecycle-state ACTIVE \
--query 'sort_by(data.items, &"display-name").{"display-name":"display-name","id":"id","lifecycle-state":"lifecycle-state"}' \
--output table
oci psql db-system-collection list-db-systems \
--compartment-id ocid1.compartment.oc1..000000000000000000000000000000000000000000000000000000000000 \
--all
oci psql db-system create --generate-full-command-json-input
oci psql db-system create \
--compartment-id ocid1.compartment.oc1..000000000000000000000000000000000000000000000000000000000000 \
--db-version 14 \
--display-name postgres01 \
--network-details '{
"nsgIds": ,
"subnetId": "ocid1.subnet.oc1.iad.000000000000000000000000000000000000000000000000000000000000"
}' \
--shape "PostgreSQL.VM.Standard.E4.Flex.2.32GB" \
--config-id ocid1.postgresqldefaultconfiguration.oc1.iad.000000000000000000000000000000000000000000000000000000000000 \
--description postgres01 \
--instance-count 1 \
--instance-memory-size-in-gbs 32 \
--instance-ocpu-count 2 \
--system-type "OCI_OPTIMIZED_STORAGE" \
--storage-details '{
"availabilityDomain": "OEIw:US-ASHBURN-AD-3",
"iops": 300000,
"isRegionallyDurable": false,
"systemType": "OCI_OPTIMIZED_STORAGE"
}' \
--credentials '{
"username": "postgres",
"passwordDetails": {
"password": "passwordpassword",
"passwordType": "PLAIN_TEXT"
}
}' \
--instances-details '[
{
"description": "postgres0101",
"displayName": "postgres0101",
}
]'
oci psql db-system-collection list-db-systems \
--compartment-id ocid1.compartment.oc1..000000000000000000000000000000000000000000000000000000000000 \
--all \
--query 'data.items.{"display-name":"display-name","id":"id","lifecycle-state":"lifecycle-state"}' \
--output table
oci psql db-system get \
--db-system-id ocid1.postgresqldbsystem.oc1.iad.000000000000000000000000000000000000000000000000000000000000
oci psql db-system get-primary-db-instance \
--db-system-id ocid1.postgresqldbsystem.oc1.iad.000000000000000000000000000000000000000000000000000000000000
oci psql connection-details get \
--db-system-id ocid1.postgresqldbsystem.oc1.iad.000000000000000000000000000000000000000000000000000000000000
oci psql db-system delete \
--db-system-id ocid1.postgresqldbsystem.oc1.iad.000000000000000000000000000000000000000000000000000000000000 \
--force
-- 2. DB Systemへの接続
接続確認用コンピュートインスタンスでの作業
ssh -i $HOME/.ssh/id_rsa ubuntu@192.0.2.1
psql -h 10.0.2.190 -U postgres
\q
exit
-- 3. ノードの追加
oci psql connection-details get \
--db-system-id ocid1.postgresqldbsystem.oc1.iad.000000000000000000000000000000000000000000000000000000000000
oci psql db-system patch \
--db-system-id ocid1.postgresqldbsystem.oc1.iad.000000000000000000000000000000000000000000000000000000000000 \
--items '[
{
"operation": "INSERT",
"selection": "instances",
"value": {
"displayName": "postgres0102"
}
}
]'
-- 4. ノードの再起動
データベース・システムのプライマリ・ノードは再起動できません。
標準: データベース・プロセスのみが再起動されます。これには1分未満かかります。
ノード再起動: 基礎となるコンピュート・インスタンスが再起動され、PostgreSQLプロセスも再起動されます。これには数分間かかる場合があります。
oci psql connection-details get \
--db-system-id ocid1.postgresqldbsystem.oc1.iad.000000000000000000000000000000000000000000000000000000000000
oci psql db-system restart-db-instance-in \
--db-system-id ocid1.postgresqldbsystem.oc1.iad.000000000000000000000000000000000000000000000000000000000000 \
--db-instance-id 11111111-1111-1111-1111-111111111111 \
--restart-type NODE_REBOOT
-- 5. 別のノードへのデータベース・システムのフェイルオーバー
oci psql db-system get-primary-db-instance \
--db-system-id ocid1.postgresqldbsystem.oc1.iad.000000000000000000000000000000000000000000000000000000000000
oci psql db-system failover \
--db-system-id ocid1.postgresqldbsystem.oc1.iad.000000000000000000000000000000000000000000000000000000000000 \
--db-instance-id 11111111-1111-1111-1111-111111111111
oci psql db-system get-primary-db-instance \
--db-system-id ocid1.postgresqldbsystem.oc1.iad.000000000000000000000000000000000000000000000000000000000000
-- 6. ノードの削除
oci psql connection-details get \
--db-system-id ocid1.postgresqldbsystem.oc1.iad.000000000000000000000000000000000000000000000000000000000000
cat <<-'EOF' > remove_node.json
{
"dbSystemId": "ocid1.postgresqldbsystem.oc1.iad.000000000000000000000000000000000000000000000000000000000000",
"items": [
{
"operation": "REMOVE",
"selection": "instances[?id == '22222222-2222-2222-2222-222222222222']"
}
]
}
EOF
oci psql db-system patch --from-json file://remove_node.json
-- 7. 手動バックアップの作成
oci psql backup-collection list-backups \
--compartment-id ocid1.compartment.oc1..000000000000000000000000000000000000000000000000000000000000
oci psql backup create \
--compartment-id ocid1.compartment.oc1..000000000000000000000000000000000000000000000000000000000000 \
--db-system-id ocid1.postgresqldbsystem.oc1.iad.000000000000000000000000000000000000000000000000000000000000 \
--display-name postgres01bk01 \
--description ppostgres01bk01 \
--retention-period 1
oci psql backup-collection list-backups \
--compartment-id ocid1.compartment.oc1..000000000000000000000000000000000000000000000000000000000000 \
--query 'data.items[].{"display-name":"display-name","id":"id","lifecycle-state":"lifecycle-state"}' \
--output table
oci psql backup delete \
--backup-id ocid1.postgresqlbackup.oc1.iad.000000000000000000000000000000000000000000000000000000000000 \
--force
-- 8. バックアップからのリストア
既存のバックアップからPostgreSQLデータベース・システムを含むOCIデータベースをリストアします。
データベース・システムをリストアすると、データが失われる可能性があります。
リストアする前に、データベース・システムの手動バックアップを作成することをお薦めします。
oci psql db-system restore \
--db-system-id ocid1.postgresqldbsystem.oc1.iad.000000000000000000000000000000000000000000000000000000000000 \
--backup-id ocid1.postgresqlbackup.oc1.iad.000000000000000000000000000000000000000000000000000000000000