22
33このプロジェクトは、AI エージェントを用いて、異種 DB 間で SQL を変換するワークショップです。
44題材として Oracle Database から Amazon Aurora PostgreSQL への SQL 変換を行います。
5- AWS CDK を使用して OracleXE on EC2 と Aurora PostgreSQL のデータベースを構築し、SCT では変換できない Database Object と SQL 実行機能を有する Java アプリケーションを対象に [ Strands Agents SDK] ( https://strandsagents.com/ ) を活用してデータベース分析と移行作業を軽減します。
5+ AWS CDK を使用して Oracle XE on EC2 と Aurora PostgreSQL のデータベースを構築し、SCT では変換できないデータベースオブジェクトと SQL 実行機能を有する Java アプリケーションを対象に [ Strands Agents SDK] ( https://strandsagents.com/ ) を活用してデータベース分析と移行作業を軽減します。
66
77> [ !NOTE]
8- > このコンテンツは OracleDB と PostgreSQL を立て、この環境に閉じて AI エージェントが SQL を読み書きし、実行し、修正し、結果を残していくものです。
8+ > このコンテンツは Oracle DB と PostgreSQL を立て、この環境に閉じて AI エージェントが SQL を読み書きし、実行し、修正し、結果を残していくものです。
99> AI エージェントが Database を操作する都合上、本番環境でのご利用はおやめください。あくまで、ここでコードを作成・テストするだけにとどめてください。
1010
1111## 🏗️ アーキテクチャ概要
1212
1313- ** Oracle Database** : EC2 インスタンス上の Oracle XE 21c
1414- ** PostgreSQL** : Amazon Aurora PostgreSQL Serverless v2
15- - ** AI Agent** : AI Agent w/Strands Agents によるデータベース分析・移行支援
16- - ** Infrastructure ** : AWS CDK (TypeScript)による Infrastructure as Code
15+ - ** AI Agent** : Oracle DB と同居もしくはローカル PC
16+ - ** Amazon Bedrock ** : AI Agent が使用するモデルを提供するサービス
1717
1818## 📋 前提条件
1919
@@ -26,8 +26,8 @@ AWS CDK を使用して OracleXE on EC2 と Aurora PostgreSQL のデータベー
2626### AWS 環境
2727
2828- AdministratorAccess がアタッチされ、シェルスクリプトが実行可能なコンピューティングリソース
29- - Bedrock で利用するモデルは は us-east-1 です(コードの修正で変更可能)
30- - 事前に使用するモデルを unlock してください。
29+ - Bedrock で利用するモデルは us-east-1 です(コードの修正で変更可能)
30+ - 事前に使用するモデルを unlock してください。デフォルトでは ` us.anthropic.claude-sonnet-4-20250514-v1:0 ` を使用します。
3131
3232## 🚀 セットアップ手順
3333
@@ -78,7 +78,7 @@ wget -P cdk/dmp \
7878```
7979
8080
81- ### 4. インフラストラクチャのデプロイ
81+ ### 4. デプロイ
8282
8383リポジトリのルートディレクトリに移動した上で、以下コマンドを実行してください。30 分ほど実行にかかります。
8484
@@ -96,7 +96,7 @@ wget -P cdk/dmp \
9696### 5. 接続確認
9797
9898デプロイ完了後、` ssh -F ssh-config oracle ` を実行して接続できることを確認してください。
99- 初回接続時は接続先が信頼できるかの確認が出ますが ` yes ` と入力してください。
99+ 初回接続時は接続先の fingerprint が信頼できるかの確認が表示されます(yes/no/ [ fingerprint ] )。 ` yes ` と入力してください。
100100接続先で以下のコマンドを実行しデータベースに接続できることを確認してください。
101101
102102``` bash
@@ -109,8 +109,8 @@ uv run ora_connect_test.py
109109uv run pg_connect_test.py
110110```
111111
112- 上記は Oracle DB がホストされている EC2 での実行ですが、` ssh -F ssh-config oracle ` で接続した場合
113- 初回接続時は fingerprint はポートフォワーディングによって 、ローカルから実行することもできます。
112+ 上記は Oracle DB がホストされている EC2 での実行ですが、` ssh -F ssh-config oracle ` で接続した場合、
113+ ポートフォワーディングによって 、ローカルから実行することもできます。
114114ssh 接続しているターミナルとは別にターミナルを開き、` sample-sql-converter-agent-workshop ` ディレクトリから、以下を実行して確認することもできます。
115115``` bash
116116# Oracle Database接続テスト
@@ -148,8 +148,7 @@ sudo su - oracle
148148
149149### 1. エージェントの起動
150150
151- ` ssh -F ssh-config oracle ` でつないだ先、もしくはつないでいる PC の別ターミナルで以下を実行しま
152- 初回接続時は fingerprint す。
151+ ` ssh -F ssh-config oracle ` でつないだ先、もしくはつないでいる PC の別ターミナルで以下を実行します。
153152以下操作は ` sample-sql-converter-agent-workshop ` ディレクトリにいることを前提とします。
154153エージェントの動作をカスタマイズしたい場合は事前に ` agent/prompts/system_prompt.txt ` を編集してください。
155154
@@ -160,13 +159,13 @@ cd ./agent/
160159uv run main.py
161160```
162161
163- ` あなたは何ができますか? ` というプロンプトを打つとどんなことをできるのかを教えてくれる他、DB Object をその DB Object を Oracle から検索して PostgreSQL のオブジェクトに変換を始めます(e.g.` PROCEDURE SCHEMA_SAMPLE.SCT_0001_CALCULATE_TIME_DIFFERENCE ` )。
162+ ` あなたは何ができますか? ` というプロンプトを打つとどんなことをできるのかを教えてくれる他、データベースオブジェクトを Oracle から検索して PostgreSQL のオブジェクトに変換を始めます(e.g.` PROCEDURE SCHEMA_SAMPLE.SCT_0001_CALCULATE_TIME_DIFFERENCE ` )。
164163格納されているオブジェクトリストは ` object_list_all.ini ` にあるので参考にしてください。
165164結果は ` ./result/ ` 以下に出力されます。
166165対話をやめたい場合は ` quit ` と入力すると終わります。
167166
168- #### 1.2 DB Object を指定する場合
169- 以下コマンドを打つと指定した Oracle DB に格納されている DB Object を自動で探して PostgreSQL のオブジェクトに変換します。
167+ #### 1.2 データベースオブジェクトを指定する場合
168+ 以下コマンドを打つと指定した Oracle DB に格納されているデータベースオブジェクトを自動で探して PostgreSQL のオブジェクトに変換します。
170169格納されているオブジェクトリストは ` object_list_all.ini ` にあるので参考にしてください。
171170チャット同様に結果は ` ./result/ ` 以下に出力されます。
172171
@@ -177,7 +176,7 @@ uv run main.py --prompt "PROCEDURE SCHEMA_SAMPLE.SCT_0001_CALCULATE_TIME_DIFFERE
177176
178177#### 1.3 まとめて実行する場合
179178
180- ` ./agent/object_list.ini ` にある DB Object を対象に一括変換を試みます 。
179+ ` ./agent/object_list.ini ` にあるデータベースオブジェクトを対象に一括変換を試みます 。
181180
182181``` bash
183182cd ./agent/
@@ -198,7 +197,7 @@ uv run main.py --system-prompt custom_prompt.txt
198197# 一括変換のオブジェクト一覧指定
199198./run.sh -f custom_object_list.ini
200199
201- # 自動リトライ & sleep
200+ # 自動リトライ& sleep
202201uv run main.py --avoid-throttling
203202./run.sh --avoid-throttling
204203
@@ -207,7 +206,7 @@ uv run main.py --avoid-throttling
207206
208207```
209208
210- ### 5. (オプション)カスタム利用例
209+ ## 5. (オプション)カスタム利用例
211210コードの行数が長い場合や複雑なプロシージャの場合に、変換順序の調整やコードを分割してから変換することが有効であるため、その実行方法をみていきます。
212211以下操作は ` sample-sql-converter-agent-workshop ` ディレクトリにいることを前提とします。
213212
@@ -217,7 +216,7 @@ cd ./agent/
217216# OracleのDDLをまとめて取得
218217./getDDL.sh object_list.ini
219218
220- # 並び替え
219+ # 並び替え
221220uv run main.py --system-prompt sortObject.txt
222221 (起動後に以下を貼り付けてください。)
223222 ./result
@@ -249,10 +248,10 @@ uv run main.py --prompt "../application/employee-mgmt/application employee-mgmt
249248```
250249
251250## 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 ) を参照してください。
251+ Oracle DB/PostgreSQLへのアクセスするツールはMCPサーバー化してあるため 、Strands Agentsを使わずにAmazon Q Developer CLIから同様のことを行うこともできます 。
252+ 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 ) を参照してください。
254253リモートサーバーの場合はインストール済のためサブスクライブだけで済みます。
255- ssh で繋いでトンネリングしたローカル環境で Amazon Q Developer CLI を実行する場合は 、` ~/.aws/amazonq/ ` に ` q-dev/mcp.json ` をコピーしてください。リモートサーバーは設定済です。
254+ sshで繋いでトンネリングしたローカル環境でAmazon Q Developer CLIを実行する場合は 、` ~/.aws/amazonq/ ` に ` q-dev/mcp.json ` をコピーしてください。リモートサーバーは設定済です。
256255
257256### Q Developer の起動
258257以下コマンドを実行してください。
@@ -262,7 +261,7 @@ cd q-dev
262261q login
263262# q login 実行後、表示される指示に従う
264263q chat
265- # q chat を打ち込むと対話できるようになるため、DB オブジェクトを入力することで変換作業を行うことができます 。(e.g. PROCEDURE SCHEMA_SAMPLE.SCT_0001_CALCULATE_TIME_DIFFERENCE)
264+ # q chatを打ち込むと対話できるようになるため、データベースオブジェクトを入力することで変換作業を行うことができます 。(e.g. PROCEDURE SCHEMA_SAMPLE.SCT_0001_CALCULATE_TIME_DIFFERENCE)
266265```
267266
268267### Q Developer のカスタマイズ
@@ -271,4 +270,4 @@ q chat
271270
272271## 環境の削除
273272` ./destroy.sh ` を実行してください。
274- ` ./destroy.sh ` を実行する際、DMSを使用していた場合は DMS を使用した環境でスキーマ変換ウィザードを Close してから ` ./destroy.sh ` を実行してください。Close しないとエラーが発生して削除ができません 。
273+ ` ./destroy.sh ` を実行する際、DMSを使用していた場合はDMSを使用した環境でスキーマ変換ウィザードをCloseしてから ` ./destroy.sh ` を実行してください。Closeしないとエラーが発生して削除ができません 。
0 commit comments