Db2 Storage Access Alias を AWS S3に設定してバックアップイメージ およびアーカイブログをS3に直接置けるようにする

DB2 Storage Access Alias を AWS S3に設定すれば、バックアップイメージ およびアーカイブログをS3に直接置けるようになります。
当記事ではその方法を説明します。

# 前提
- Db2 LUW v11.1.4.5以上
- Amazon S3 バケット作成済み、そのバケットにアクセス可能なIAMポリシー、IAMユーザー、アクセスキーとシークレットキー作成済み

**当記事ではLinuxでの設定方法を記載します**。 Windowsでもほぼ同じかと思います。

実行環境はインスタンスIDを`db2isnt1`、instance homeを`/home/db2inst1`とし、db2inst1でログイン済み(db2関連のpathなどが設定済み)の状態です。

# 1. リモート・ストレージ・アカウント資格情報のキーストアを作成
インスタンスが Db2 ネイティブ暗号化用に構成されていない場合は、ストレージ・アクセス別名を作成する前に、リモート・ストレージ・アカウント資格情報の鍵ストアを作成する必要があります。

参考：
- [ローカル鍵ストアの作成](https://www.ibm.com/docs/ja/db2/11.5?topic=keystores-creating-local-keystore)
- [鍵ストアを使用するための Db2 インスタンスの構成](https://www.ibm.com/docs/ja/db2/11.5?topic=configuration-configuring-db2-instance-use-as-keystore)

#### 1.1 キー・ストアを置くディレクトリーの作成
```
cd
mkdir keystores
```

#### 1.2 キー・ストアの作成
```
gsk8capicmd_64 -keydb -create -db "<パスを含むキー・ストアファイル名>" -pw "<キー・ストアのパスワード>" -type pkcs12 -stash -pqc false
```

実行例
```
gsk8capicmd_64 -keydb -create -db "/home/db2inst1/keystores/ne-keystore.p12" -pw "xxxxxxxxxxxx" -type pkcs12 -stash -pqc false
```
上記を実行すると`/home/db2inst1/keystores/`に以下の2つのファイルが作成されます:
`ne-keystore.p12` `ne-keystore.sth`


#### 1.3 データベース・マネージャー構成パラメーターを設定( keystore_type と keystore_location)
以下のコマンドを実行します
```
db2 "update dbm cfg using keystore_location <パスを含むキー・ストアファイル名> keystore_type pkcs12"
```

実行例
```
$ db2 "update dbm cfg using keystore_location /home/db2inst1/keystores/ne-keystore.p12 keystore_type pkcs12"
DB20000I  The UPDATE DATABASE MANAGER CONFIGURATION command completed
successfully.
SQL1362W  One or more of the parameters submitted for immediate modification
were not changed dynamically. Client changes will not be effective until the
next time the application is started or the TERMINATE command has been issued.
Server changes will not be effective until the next DB2START command.
```
#### 1.4 Db2再起動
```
db2stop
db2start
```

# 2. Storage Access Aliasを作成
以下のコマンドを実行します
```
db2 "CATALOG STORAGE ACCESS ALIAS <Storage Access Alias名> VENDOR S3 
SERVER <s3エンドポイント> 
USER <S3アクセスキー>
PASSWORD <S3シークレットキー>"
```

実行例:
```
db2 "CATALOG STORAGE ACCESS ALIAS awss3jp VENDOR S3 
SERVER s3.ap-northeast-1.amazonaws.com 
USER YYYYYYYYYYYYYYYYYY 
PASSWORD XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
```

確認：以下のコマンドを実行してStorage Access Aliasのリストを表示します
```
db2 list storage access
```

実行例：
```
$ db2 list storage access

 Node Directory

Node 1 entry:

ALIAS=awss3jp
VENDOR=S3
SERVER=s3.ap-northeast-1.amazonaws.com
USERID=****
CONTAINER=
OBJECT=
DBUSER=
DBGROUP=SYSADM

 Number of entries in the directory = 1

DB20000I  The LIST STORAGE ACCESS command completed successfully.
$
```
これでDb2 Storage Access Alias を AWS S3に設定できました！

# 3.　Storage Access Aliasの使用例

#### 使用例1:
バックアップ先として: `DB2REMOTE://<Storage Access Alias名>/<S3 bucket名>/<S3 PATH>'`で指定します
```
db2 backup database sample1 to DB2REMOTE://<Storage Access Alias名>/<S3 bucket名>/<S3 PATH>
```
実行例：
```
db2 backup database sample1 to DB2REMOTE://awss3jp/japan-db2-01/offline_backup/20241003
```

#### 使用例2:
アーカイブ・ログの保管先として: `DB2REMOTE://<Storage Access Alias名>/<S3 bucket名>/<S3 PATH>'`で指定します

```
db2 update db cfg for SAMPLE1 using LOGARCHMETH1 'DB2REMOTE://<Storage Access Alias名>/<S3 bucket名>/<S3 PATH>'
```


実行例：
```
db2 update db cfg for SAMPLE1 using LOGARCHMETH1 'DB2REMOTE://awss3jp/japan-db2-01/sample1_archived_logs/'
```
:::note warn
アーカイブ・ログの保管先としてS3を指定した場合、PRUNE HISTORY コマンドに AND DELETE パラメーターを指定する方法やPRUNE LOGFILEコマンドでの削除できないようなので、不要なファイルは手動(AWS CLIなど)にて削除する必要があるようです。
:::

以上です。