DeciKG ローカルアクセス到達までの工程(分割版)
工程1:EC2実行ロール(Instance profile)を作る
目的:SSH無しでSSM接続でき、ECRを使う将来も詰まらない土台を作る
- IAM → Roles → Create role
- Trusted entity: EC2
- 付与(最低限)
- AmazonSSMManagedInstanceCore
- (推奨:あとでECRからpullするなら)ECR Pull最小ポリシーを追加
ecr:GetAuthorizationToken(Resource*)ecr:BatchGetImage,ecr:GetDownloadUrlForLayer,ecr:BatchCheckLayerAvailability(repoはrepository/*でOK)
- Instance profile(自動で作られる/または作成)をEC2起動時に付与できる状態にする
DoD
- Roleが作成できた(名前例:
demo-app-ec2-role)
工程2:Security Group を作る(SSHなし・公開なし)
目的:DeciKGは外から触れない形を最初から作る
- Inbound:何も開けない(0でもSSMは動く)
- Outbound:0.0.0.0/0 許可(apt/ECR/SSMに必要)
DoD
- SGが作成できた(例:
demo-app-sg)
工程3:EC2 を起動する
目的:SSMで入れる“箱”を作る(ここから課金は発生)
推奨パラメータ(あなたの想定でOK)
- AMI:Ubuntu 22.04 LTS(またはAL2023でも可)
- Instance type:t3a.xlarge
- EBS:gp3 100GB
- Key pair:不要
- IAM role:工程1のEC2ロール
- Security Group:工程2のSG
- Subnet:既存VPCの適切なサブネット(インターネットへ出られる必要あり)
- User data(任意だが推奨):docker + compose + swap を入れる
DoD
- インスタンスが
runningになった - SSMの “Managed nodes” に出てくる(次工程)
工程4:SSM Session Manager でログインできることを確認
目的:SSH無し運用が成立していることの確認
- Systems Manager → Session Manager → Start session → 対象インスタンス
DoD
- シェルが開く
工程5:EC2にDocker / Compose / Swap を用意
目的:DeciKGを起動できる状態にする
SSMで入った後に確認:
docker version
docker compose version
free -h
swapon --show || true
(User dataで入れていない場合はここでセットアップ)
DoD
- docker と docker compose が使える
工程6:DeciKG の compose を配置して起動(まずはローカルバインド)
目的:DeciKG APIを外部公開せず起動する
6-1) compose をEC2に置く
- Git clone(推奨)または scp(SSHなし方針なら避ける)
- SSMセッションで
git cloneできるようにしておく(repoがprivateならdeploy key/https tokenは後続で)
6-2) ポートを “ローカル限定” にする(重要)
あなたのcomposeから最低限ここだけ直す(DeciKG/Neo4jを閉じる):
decikg-api:ports: - "127.0.0.1:18000:8000"(例。将来の衝突回避で18000推奨)
neo4j:ports: - "127.0.0.1:17474:7474"ports: - "127.0.0.1:17687:7687"
(pg/jupyter/pgadminは既に127.0.0.1でOK)
6-3) 起動
docker compose up -d --build
docker compose ps
DoD
docker compose psでdecikg-apiがUpになっている
工程7:EC2内でDeciKGの疎通確認(ローカル)
目的:まず “EC2上で” APIが返ることを確実にする
例(healthがある想定。無ければ / や /openapi.json を見る):
curl -sS http://127.0.0.1:18000/health || true
curl -sS http://127.0.0.1:18000/openapi.json | head || true
DoD
- 200系が返る(または期待する最小レスポンスが返る)
工程8:ローカルPCからSSMポートフォワードで叩けるようにする(ゴール)
目的:あなたのローカルから DeciKG に JSON を投げて I/O ができる状態にする
ローカルPCで(例:18000を転送)
aws ssm start-session \
--target i-xxxxxxxxxxxxxxxxx \
--document-name AWS-StartPortForwardingSessionToRemoteHost \
--parameters '{
"host":["127.0.0.1"],
"portNumber":["18000"],
"localPortNumber":["18000"]
}'
別ターミナルで:
curl http://127.0.0.1:18000/openapi.json | head
# あるいは nlq-dev が投げる JSON を curl で代替してPOST
DoD(今回のゴール)
- ローカルPCから
http://127.0.0.1:18000で DeciKG に到達できる
後続工程(必要になったら入れる)
- ECR push/pull に切り替える(buildをEC2でやめる)
- CloudWatch Logs / Secrets / S3 を導入
- nlq-dev UI/analytics 同居(80/443集約、DeciKGは内部呼び出し)
コメントを残す