@@ -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 のインストール
4240npm 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
5148git clone https://github.com/aws-samples/sample-sql-converter-agent-workshop.git
5249cd sample-sql-converter-agent-workshop
50+ ```
5351
52+ ### 2. CDK 依存関係のインストール
53+
54+ ``` bash
5455# CDK依存関係のインストール
56+ # sample-sql-converter-agent-workshop ディレクトリで実行してください
5557npm 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 \
90911 . AWS CDK によるインフラストラクチャのデプロイ
91922 . EC2 キーペアの取得と SSH 設定
92933 . 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接続テスト
116117uv run ora_connect_test.py
@@ -119,10 +120,11 @@ uv run ora_connect_test.py
119120uv 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 ` を用意してください 。
1261282 . ` import-schema ` フォルダ配下の各シェルスクリプトについて、コメントの指示に従い、スキーマ名でループしている箇所に、アップロードしたファイルのスキーマ名を列挙してください。
1271293 . ` 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
143144sudo 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/
154160uv 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/
158175uv 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"
213247uv 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 ` を実行してください。
0 commit comments