Skip to content

Commit b46bd0a

Browse files
committed
README 及び動作確認後修正
1 parent d76d361 commit b46bd0a

File tree

2 files changed

+103
-82
lines changed

2 files changed

+103
-82
lines changed

README.md

Lines changed: 103 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ AWS CDK を使用して OracleXE on EC2 と Aurora PostgreSQL のデータベー
66

77
> [!NOTE]
88
> このコンテンツは OracleDB と PostgreSQL を立て、この環境に閉じて AI エージェントが SQL を読み書きし、実行し、修正し、結果を残していくものです。
9-
> AI エージェントがシェルコマンドを実行したり、Database を操作する都合上、本番環境でのご利用はおやめください。あくまで、ここでコードを作成・テストするだけにとどめてください。また AI エージェントを動かす環境も EC2 等の使い捨てできる隔離環境を用意し、そこから実行してください
9+
> AI エージェントが Database を操作する都合上、本番環境でのご利用はおやめください。あくまで、ここでコードを作成・テストするだけにとどめてください。
1010
1111
## 🏗️ アーキテクチャ概要
1212

@@ -19,49 +19,51 @@ AWS CDK を使用して OracleXE on EC2 と Aurora PostgreSQL のデータベー
1919

2020
### 必要なソフトウェア
2121

22-
- Python 3.12 以上
23-
- Node.js 18 以上
24-
- AWS CLI v2
25-
- AWS CDK v2
26-
- uv (Python package manager)
22+
- Node.js 22 以上
23+
24+
他、必要なものはこのワークショップを実行時にインストールします。
2725

2826
### AWS 環境
2927

30-
- AWS アカウントとプロファイル設定
31-
- 適切な IAM 権限(EC2, RDS, Secrets Manager, S3, SSM 等)
32-
- デフォルトリージョン: us-east-1(使用する Bedrock のモデル)
28+
- AdministratorAccess がアタッチされ、シェルスクリプトが実行可能なコンピューティングリソース
29+
- Bedrock で利用するモデルは は us-east-1 です(コードの修正で変更可能)
30+
- 事前に使用するモデルを unlock してください。
3331

3432
## 🚀 セットアップ手順
3533

3634
### 0. 前提条件のセットアップ
3735

38-
Workshop 環境では、以下の手順を実行して CDK や uv をインストールしてください。
36+
以下の手順を実行して CDK や uv をインストールしてください。
3937

4038
```bash
4139
# CDK のインストール
4240
npm install -g aws-cdk
4341

4442
# uv のインストール
45-
pip install uv
43+
curl -LsSf https://astral.sh/uv/install.sh | sh
4644
```
4745

48-
### 1. CDK 依存関係のインストール
49-
46+
### 1. リポジトリのクローン
5047
```bash
5148
git clone https://github.com/aws-samples/sample-sql-converter-agent-workshop.git
5249
cd sample-sql-converter-agent-workshop
50+
```
5351

52+
### 2. CDK 依存関係のインストール
53+
54+
```bash
5455
# CDK依存関係のインストール
56+
# sample-sql-converter-agent-workshop ディレクトリで実行してください
5557
npm ci --prefix cdk && npm --prefix cdk run cdk bootstrap
5658
```
5759

58-
### 2. 必要ファイルの準備
60+
### 3. 必要ファイルの準備
5961

6062
**⚠️ 重要: 以下のファイルはユーザーが事前に用意する必要があります**
6163

6264
#### Oracle Database RPM ファイル
6365

64-
`cdk/dmp/` ディレクトリに以下の RPM ファイルをインターネットからダウンロードして配置してください:
66+
`sample-sql-converter-agent-workshop` の配下の `cdk/dmp/` ディレクトリに以下の RPM ファイルをインターネットからダウンロードして配置してください:
6567

6668
- `oracle-database-xe-21c-1.0-1.ol8.x86_64.rpm` - Oracle XE 21c 本体
6769
- `oracle-database-preinstall-21c-1.0-1.el8.x86_64.rpm` - Oracle 前提パッケージ
@@ -76,12 +78,11 @@ wget -P cdk/dmp \
7678
```
7779

7880

79-
### 3. インフラストラクチャのデプロイ
81+
### 4. インフラストラクチャのデプロイ
8082

81-
リポジトリのルートディレクトリに移動した上で、以下コマンドを実行してください。
83+
リポジトリのルートディレクトリに移動した上で、以下コマンドを実行してください。30 分ほど実行にかかります。
8284

8385
```bash
84-
# デプロイスクリプトの実行
8586
./deploy.sh
8687
```
8788

@@ -90,27 +91,27 @@ wget -P cdk/dmp \
9091
1. AWS CDK によるインフラストラクチャのデプロイ
9192
2. EC2 キーペアの取得と SSH 設定
9293
3. Oracle XE の自動インストール
94+
4. エージェントを実行する環境準備
9395

94-
### 4. 接続確認
96+
### 5. 接続確認
9597

96-
Oracle Instance に接続します。
97-
`./output.json` に記載されている `OracleInstanceId` の値をコピーし、 `ssh-config``<instance id>` の箇所に貼り付けてください。
98+
デプロイ完了後、`ssh -F ssh-config oracle` を実行して接続できることを確認してください。
99+
初回接続時は接続先が信頼できるかの確認が出ますが `yes` と入力してください。
100+
接続先で以下のコマンドを実行しデータベースに接続できることを確認してください。
98101

99-
`./ssh-config`
100-
```
101-
Host oracle
102-
HostName i-xxxxxxxxxxxxxxxxx
103-
User ec2-user
104-
IdentityFile ./cdk/oracle-xe-key.pem
105-
ProxyCommand aws ec2-instance-connect open-tunnel --instance-id %h --max-tunnel-duration 3600
106-
LocalForward 1521 localhost:1521
107-
```
102+
```bash
103+
cd sample-sql-converter-agent-workshop
108104

109-
別タブで新しいターミナルを開き、`ssh -F ssh-config oracle` を実行して接続できることを確認してください。
105+
# Oracle Database接続テスト
106+
uv run ora_connect_test.py
110107

111-
デプロイ完了後、以下のコマンドで接続テストを実行できます。
112-
データベースにクエリを投げられるようになるまで、少し時間がかかる場合があるので、エラーが発生した場合はリトライしてみてください。
108+
# PostgreSQL接続テスト
109+
uv run pg_connect_test.py
110+
```
113111

112+
上記は Oracle DB がホストされている EC2 での実行ですが、`ssh -F ssh-config oracle` で接続した場合
113+
初回接続時は fingerprint はポートフォワーディングによって、ローカルから実行することもできます。
114+
ssh 接続しているターミナルとは別にターミナルを開き、`sample-sql-converter-agent-workshop` ディレクトリから、以下を実行して確認することもできます。
114115
```bash
115116
# Oracle Database接続テスト
116117
uv run ora_connect_test.py
@@ -119,10 +120,11 @@ uv run ora_connect_test.py
119120
uv run pg_connect_test.py
120121
```
121122

122-
## (Option) データベースオブジェクトのロード
123-
123+
## 6. (Option) データベースオブジェクトのロード
124+
このワークショップでは、すでにいくつかのデータベースオブジェクトが Oracle DB に格納されていますが、自身のデータベースオブジェクトを持ち込むことも可能です。
125+
ローカルもしくはリモート(Oracle DB がホストされている EC2)で、
124126
以下の手順に従って、データベースオブジェクトをアップロードしてください。
125-
1. `./import-schema/dumpfile``{name}_METADATAONLY.DMP` をアップロードしてください
127+
1. `./import-schema/dumpfile``{name}_METADATAONLY.DMP` を用意してください
126128
2. `import-schema` フォルダ配下の各シェルスクリプトについて、コメントの指示に従い、スキーマ名でループしている箇所に、アップロードしたファイルのスキーマ名を列挙してください。
127129
3. `import-schema` フォルダ配下のシェルスクリプトを番号順に実行してください。
128130

@@ -139,48 +141,78 @@ ORA-31640: unable to open dump file "/home/oracle/dumpfile/3E0A3xxxxxE003yyyyyyy
139141

140142
ログイン手順
141143
```bash
142-
ssh -F ssh-config oracle
143144
sudo su - oracle
144145
```
145146

146-
## 🤖 AI エージェントを使用したデータベースコードオブジェクトの変換
147+
## 🤖 AI エージェント(Strands Agents)を使用したデータベースコードオブジェクトの変換
147148

148-
### 4. エージェントの起動
149+
### 1. エージェントの起動
149150

150-
```bash
151-
cd ./agent/ # リポジトリルートディレクトリがカレントディレクトリの前提です
151+
`ssh -F ssh-config oracle` でつないだ先、もしくはつないでいる PC の別ターミナルで以下を実行しま
152+
初回接続時は fingerprint す。
153+
以下操作は `sample-sql-converter-agent-workshop` ディレクトリにいることを前提とします。
154+
エージェントの動作をカスタマイズしたい場合は事前に `agent/prompts/system_prompt.txt` を編集してください。
152155

153-
# 使い方 1 )チャットで指示する場合
156+
#### 1.1 チャットで指示する場合
157+
以下コマンドを打つとユーザーの入力を待ち受けている状態になります。
158+
```bash
159+
cd ./agent/
154160
uv run main.py
161+
```
162+
163+
`あなたは何ができますか?` というプロンプトを打つとどんなことをできるのかを教えてくれる他、DB Object をその DB Object を Oracle から検索して PostgreSQL のオブジェクトに変換を始めます(e.g.`PROCEDURE SCHEMA_SAMPLE.SCT_0001_CALCULATE_TIME_DIFFERENCE`)。
164+
格納されているオブジェクトリストは `object_list_all.ini` にあるので参考にしてください。
165+
結果は `./result/` 以下に出力されます。
166+
対話をやめたい場合は `quit` と入力すると終わります。
167+
168+
#### 1.2 DB Object を指定する場合
169+
以下コマンドを打つと指定した Oracle DB に格納されている DB Object を自動で探して PostgreSQL のオブジェクトに変換します。
170+
格納されているオブジェクトリストは `object_list_all.ini` にあるので参考にしてください。
171+
チャット同様に結果は `./result/` 以下に出力されます。
155172

156-
# 使い方 2 ) DB Object を指定する場合
157-
# DB_ONJECT_TYPE[space]SCHEMA_NAME.OBJECT_NAME で指定してください
173+
```bash
174+
cd ./agent/
158175
uv run main.py --prompt "PROCEDURE SCHEMA_SAMPLE.SCT_0001_CALCULATE_TIME_DIFFERENCE"
176+
```
159177

160-
# 使い方 3 ) まとめて実行する場合
178+
#### 1.3 まとめて実行する場合
179+
180+
`./agent/object_list.ini` にある DB Object を対象に一括変換を試みます。
181+
182+
```bash
183+
cd ./agent/
161184
./run.sh
185+
```
186+
187+
`run.sh` および `main.py` にはいくつかのオプションがあります。
162188

163-
# run.sh のオプション一覧
189+
```bash
164190
# --system-prompt <ファイル名>: カスタムシステムプロンプトファイルを指定
165191
# -f, --file <ファイル名>: 処理対象のオブジェクトリストファイルを指定(デフォルト: object_list.ini)
166-
# --avoid-throttling: Bedrockのトークン制限エラー時に自動リトライを有効化
192+
# --avoid-throttling: Bedrockのトークン制限エラー時に自動リトライ及び token 使用量に応じた sleep を有効化
167193

168-
# 使用例:
194+
# カスタムシステムプロンプト
195+
uv run main.py --system-prompt custom_prompt.txt
169196
./run.sh --system-prompt custom_prompt.txt
197+
198+
# 一括変換のオブジェクト一覧指定
170199
./run.sh -f custom_object_list.ini
200+
201+
# 自動リトライ & sleep
202+
uv run main.py --avoid-throttling
171203
./run.sh --avoid-throttling
172-
./run.sh --system-prompt custom_prompt.txt --file custom_list.ini --avoid-throttling
173204

174205
# 全てのオブジェクトを一括処理する場合:
175206
./run.sh -f object_list_all.ini --avoid-throttling
176207

177208
```
178209

179-
### 5. カスタム利用例
210+
### 5. (オプション)カスタム利用例
180211
コードの行数が長い場合や複雑なプロシージャの場合に、変換順序の調整やコードを分割してから変換することが有効であるため、その実行方法をみていきます。
212+
以下操作は `sample-sql-converter-agent-workshop` ディレクトリにいることを前提とします。
181213

182214
```bash
183-
cd ./agent/ # リポジトリルートディレクトリがカレントディレクトリの前提です
215+
cd ./agent/
184216

185217
# OracleのDDLをまとめて取得
186218
./getDDL.sh object_list.ini
@@ -199,54 +231,43 @@ uv run main.py --system-prompt sortObject.txt
199231
## 🤖 AI エージェントを使用したアプリケーションSQLの変換
200232
サンプルとしてOracleデータベースを使用した従業員情報の管理(登録、更新、削除、検索)を行うSpring + MyBatisアプリケーションの基盤となるスクリプト群を変換します。
201233

202-
### 6. サンプルアプリケーションの確認
234+
### 1. サンプルアプリケーションの確認
203235
リポジトリルートディレクトリにある `./application/` に配置されたサンプルアプリケーションの内容をチェックしてください。
204236

205237

206-
### 7. エージェントの起動
238+
### 2. エージェントの起動
239+
240+
以下操作は `sample-sql-converter-agent-workshop` ディレクトリにいることを前提とします。
207241

208242
```bash
209-
cd ../agent # リポジトリルートディレクトリがカレントディレクトリの前提です
243+
cd ./agent # リポジトリルートディレクトリがカレントディレクトリの前提です
210244

211245
# アプリケーションの変換
212246
# 例) uv run main.py --prompt "<ソースの配置場所> <アプリ名> <テスト名>" --system-prompt "system_prompt_app.txt"
213247
uv run main.py --prompt "../application/employee-mgmt/application employee-mgmt test01" --system-prompt "system_prompt_app.txt"
214248

215249
```
216250

251+
## Amazon Q Developer CLI をコーディングエージェントとして使う場合
252+
Oracle DB/PostgreSQL へのアクセスするツールは MCP サーバー化してあるため、Strands Agents を使わずに Amazon Q Developer CLI から同様のことを行うこともできます。
253+
Amazon Q Developer CLI のインストール方法及びサブスクライブの方法については[install](https://docs.aws.amazon.com/ja_jp/amazonq/latest/qdeveloper-ug/command-line-installing.html),[subscribe](https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/q-admin-setup-subscribe-general.html)を参照してください。
254+
リモートサーバーの場合はインストール済のためサブスクライブだけで済みます。
255+
ssh で繋いでトンネリングしたローカル環境で Amazon Q Developer CLI を実行する場合は、`~/.aws/amazonq/``q-dev/mcp.json` をコピーしてください。リモートサーバーは設定済です。
217256

218-
## その他
219-
220-
### Amazon Q Developer のセットアップ方法
221-
222-
インストール方法
223-
https://docs.aws.amazon.com/ja_jp/amazonq/latest/qdeveloper-ug/command-line-installing-ssh-setup-autocomplete.html#command-line-install-q
224-
225-
セットアップ方法(認証設定から「CLI」タブを選択)
226-
https://catalog.workshops.aws/qwords/ja-JP/10-start-workshop/16-builder-id
227-
228-
229-
###  Oracle Database への接続方法
257+
### Q Developer の起動
258+
以下コマンドを実行してください。
230259

231260
```bash
232-
# Oracle XE on EC2 インスタンスへの接続
233-
cd sample-sql-converter-agent-workshop/
234-
ssh -F ssh-config oracle
235-
236-
# Oracle ユーザーに遷移
237-
sudo su - oracle
238-
239-
# Oracle Database の SYSおよびSYSTEMスキーマのパスワードを取得
240-
SECRET_JSON=$(aws secretsmanager get-secret-value --secret-id oracle-credentials --region us-east-1 --query SecretString --output text)
241-
DB_PASSWORD=$(echo "$SECRET_JSON" | jq -r '.password')
242-
243-
# Oracle Database に接続
244-
sqlplus sys/${DB_PASSWORD}@localhost/XEPDB1 as sysdba
245-
246-
sqlplus system/${DB_PASSWORD}@localhost/XEPDB1
247-
261+
cd q-dev
262+
q login
263+
# q login 実行後、表示される指示に従う
264+
q chat
265+
# q chat を打ち込むと対話できるようになるため、DB オブジェクトを入力することで変換作業を行うことができます。(e.g. PROCEDURE SCHEMA_SAMPLE.SCT_0001_CALCULATE_TIME_DIFFERENCE)
248266
```
249267

268+
### Q Developer のカスタマイズ
269+
`q-dev/AmazonQ.md` の指示を参照します。カスタマイズしたい場合は `AmazonQ.md` を編集するか、[こちら](https://docs.aws.amazon.com/ja_jp/amazonq/latest/qdeveloper-ug/command-line-context.html)を参照して、指示をカスタマイズしてください。
270+
250271

251272
## 環境の削除
252273
`./destroy.sh` を実行してください。
File renamed without changes.

0 commit comments

Comments
 (0)