カテゴリー: 構築ログ

  • 昔開発した電子カルテアプリを AWS 上で復元し、リモートDB接続するまでの全手順まとめ

    この記事は、2000年代の旧電子カルテアプリを AWS 上で再構築し、Windows2000の VM から リモートで PostgreSQL に接続するところまで成功した技術ログです。

    成功・失敗・試行錯誤すべてを “備忘録として残す” 目的でまとめています。


    1. 目的

    • 旧電子カルテ(Windows2000 + PostgreSQL)の環境を検証目的で復元したい
    • AWS 上に Windows Server を構築し、DB を立ち上げる
    • Windows2000(VM)の電カルアプリから リモートで DB に接続できるか検証
    • できればアプリも起動させたい
    • 最終的には DB を別用途で使えるようにすること

    2. AWS 側の構築

    ■ Windows Server 2022 を EC2 で構築

    • インスタンスタイプ:最初 t3.medium
    • ElasticIP:今回は 使用しない(検証環境のため割り切り)

    ■ ネットワーク設定

    • セキュリティグループで PostgreSQL ポート(5433)を開放
    • ただし 自分のグローバルIP のみに限定
      (→ リスク最小限でパブリックIP接続を許可)

    3. PostgreSQL 8.x の構築

    ■ 3-1. PostgreSQL 8.2 → インストールエラー

    管理者実行トラブル等あり断念

    ■ 3-2. PostgreSQL 8.4 で再構築

    安定して動作。

    ■ 設定(postgresql.conf)

    listen_addresses = '*'
    port = 5433
    

    ■ pg_hba.conf

    host all all 127.0.0.1/32 md5
    host all all <自分のグローバルIP>/32 trust
    

    AWS 内でも psql による接続確認:

    .\psql.exe -h 127.0.0.1 -p 5433 -U postgres
    → 接続成功
    

    DB が正常に起動していることを確認。


    4. Windows2000(VM)からのリモート接続テスト

    ここが今回の記事の中心となる「成功ポイント」。


    4-1. 電カル側の接続先を AWS のパブリックIP に変更

    開発した電子カルテは起動時のログイン画面で DB 認証を行うため、
    以下を設定:

    Server = <AWSのパブリックIP>
    Port = 5433
    User = postgres(または設定したアカウント)
    

    4-2. セキュリティグループで 5433 を “自分のIP のみ許可” に設定

    → 全世界に開くことはせず、
     検証用途として最低限のリスクに限定


    4-3. リモート接続結果 → 成功!

    Windows2000 上で電カルを起動すると:

    • ログイン画面が出現
    • 認証成功
    • DBと正常通信を開始

    つまり、

    Windows2000(VM) → AWS PostgreSQL(パブリックIP)

    という「リモートDB接続」に成功した。**

    これは今回の大きな成果。


    5. SSHポートフォワード方式も検証(結果:不採用)

    ■ 5-1. ホストPC から PowerShell で SSHトンネルを作成

    ssh -L 5433:127.0.0.1:5433 <AWSユーザー>@<EC2 Public IP>
    

    ■ 5-2. トンネル自体は成功(netstat の LISTENING も確認)

    Win2000 からの telnet も通った。

    ■ 5-3. しかし電カルアプリは DB に接続できず

    原因は複合的:

    • Windows2000 の TCP/IP スタックが現代 SSH トンネルと相性悪い
    • ODBC/INI の参照位置が複雑
    • VM の NAT → Host-only のルーティング
      など。

    結論:
    パブリックIP で接続できていれば、SSH トンネルにこだわる必要はない。

    今回の目的の範囲では“不採用”と判断。


    6. 電カルアプリ起動結果

    • ログイン:成功(リモートDB接続成功の証拠)
    • メイン画面:表示されるが ストアドプロシージャの互換性エラー多発
      • 電子カルテアプリのロジックが DB(PostgreSQL 8.4)に依存
      • 古い関数や PL/pgSQL の仕様変更で動作不可

    アプリとしての実用は困難 と判断。


    7. 今後に向けて

    • 医療DBの構造分析研究
    • FHIRリソースへのマッピング研究
    • データ移行の検証
    • システム設計の参考資料
      として活用していこうと思う

    8. まとめ(今回得た成果)

    電カル → AWSリモートDB接続に成功(パブリックIP経由)

    ✔ 電カルアプリ起動までは再現できた

    ✔ DBは完全に生きており、別用途で利用する予定

    ✔ SSHトンネルは技術的には張れたが、旧OSとの相性で実用不可

    ✔ 検証としては十分以上の成功

  • AWS CLI 構築から Session Manager 経由の安全なRDP接続、Windows Server 初期設定まで(個人開発環境の構築記録)

    クラウド上に安全な Windows 開発環境を作りたくて、AWS EC2・Session Manager(SSM)・RDP を組み合わせた構成を作りました。

    ローカルPCに負荷をかけず、いつでも起動・停止できる快適な開発環境です。

    この記事では次の内容をまとめています:

    AWS CLI のセットアップ Session Manager を使った “外部公開ゼロ” のRDP環境構築 Windows Server 2022 の初期設定(日本語化・時刻・安全設定) IAMユーザーとWindowsアカウントの整理(最小権限化)

    1. AWS CLI のセットアップ

    AWS上のEC2に安全にアクセスするため、CLI専用のIAMユーザーを作成しました。

    1-1. IAM ユーザー「cli-user」を作成

    今回は CLI専用アカウント として完全に分離。

    作成内容

    ユーザー名:cli-user アクセス方法:Access key(プログラムアクセス)

    付与ポリシー:

    AmazonSSMFullAccess

    AmazonEC2ReadOnlyAccess

    AdministratorAccess は不要(セキュリティ的にも排除)

    セキュリティ:

    後からグループを調整し、最低限の権限だけ付与する構成に変更。

    1-2. AWS CLI インストール

    ローカルPC(Windows)側でインストール:

    公式:

    https://aws.amazon.com/cli/

    インストール後

    aws –version

    1-3. 設定(aws configure)

    CLIにキーを登録:

    aws configure

    登録例:

    AWS Access Key ID: xxxxxxxxxxxxx
    AWS Secret Access Key: xxxxxxxxxxxxx
    Default region: ap-northeast-1
    Default output: json

    動作確認

    aws sts get-caller-identity

    出力に cli-user が表示されれば成功。

    2. Session Manager(SSM)経由でRDPする安全構成

    RDP の 3389ポートを完全に閉じたまま

    AWS Systems Manager (SSM) でトンネルを張り、

    安全にRDP接続する仕組みを構築しました。

    これで外部攻撃リスクはゼロになります。

    2-1. Windows Server 側:SSM Agent の更新

    EC2 上の Windows Server にログインし、PowerShellで実行。

    最新版のSSM Agentを取得

    Invoke-WebRequest https://github.com/aws/amazon-ssm-agent/releases/latest/download/AmazonSSMAgentSetup.exe
    -OutFile SSMSetup.exe

    インストール

    Start-Process .\SSMSetup.exe -ArgumentList “/S” -Wait

    サービス再起動

    Restart-Service AmazonSSMAgent

    2-2. ローカルPC→EC2 へポートフォワード(RDPトンネル作成)

    CLI で Session Manager のポートフォワードを開始。

    aws ssm start-session --target i-xxxxxxxxxxxxxxx
    –document-name AWS-StartPortForwardingSession `
    –parameters “localPortNumber=13389,portNumber=3389”

    これでローカルPCの:

    localhost:13389 → EC2の3389(RDP)

    という安全トンネルが確立します。

    ※ この PowerShell ウィンドウは閉じないこと

    (閉じたい場合は Ctrl + C)

    2-3. RDP接続(外部公開ゼロで接続)

    Windows の RDP クライアント(mstsc)で:

    localhost:13389

    ユーザー名:Administrator

    パスワード:EC2初回ログイン時に取得したもの

    2-4. セキュリティグループから RDP を完全削除

    トンネルRDPが動くのを確認した後、

    セキュリティグループのインバウンドルールから TCP 3389(RDP)を削除。

    結果:

    外部からの RDP → 完全遮断 Session Manager 経由だけ → 許可

    AWSが推奨する“最も安全なWindows運用”になります。

    3. Windows Server 2022 の初期設定

    Session Manager RDPで接続後、サーバの初期設定を実施。

    3-1. 日本語化(表示言語)

    Settings → Time & Language → Language & Region

    → Japanese を追加

    → Windows display language に設定

    → 再起動

    システムロケールも日本語へ

    Control Panel → Region → Administrative → Change system locale → 日本語

    3-2. タイムゾーン(日本時間)

    Set-TimeZone -Name “Tokyo Standard Time”

    3-3. Windows Update の適用

    最新の更新プログラムをすべて適用。

    IME のバージョン確認は不要。

    Windows Update が最新ならIMEも最新に更新される。

    3-4. Windows Firewall

    デフォルト設定のままでOK(推奨) 不要なルールを無効にするとSSMや内部通信が壊れる可能性があるためそのままにする

    ポイントは:

    外部からの攻撃は SecurityGroup で完全に遮断済み

    Windows Firewall はデフォルトでよい

    4. IAM と Windows アカウントの整理(セキュリティ強化)

    最後に、AWS/Windows のアカウントを最適化。

    4-1. cli-user の権限を必要最小限に変更

    最終構成:

    AmazonSSMFullAccess AmazonEC2ReadOnlyAccess

    → AdministratorAccess は削除

    → IAMグループも安全な状態に調整済み

    4-2. Windows Server側も“個人管理者アカウント”を作成

    セキュリティ向上のため:

    Administrator(デフォルト)

    自分専用の管理者アカウント

    この2つに変更。

    → Administratorを使い続けるより安全でログも明確。

    まとめ:今回構築した環境の特徴

    AWS CLI で SSM を安全に実行できる Session Manager のポートフォワードで RDP 接続 外部から3389を完全に閉じた“最強の安全構成” Windows Server を日本語化・最新化 IAM権限とWindowsアカウントを分離 低コスト(停止中は EBS のみ課金)

    ローカルPCに依存せず、

    必要な時だけEC2を起動して安全に作業できる開発環境が完成しました。

  • サブドメインにブログを作ったらトラブルだらけだった話

    はじめに

    今日は、昔の個人事業主時代に作った WordPress サイトを整理して、

    サブドメインに新しいブログを立ち上げる作業を一気にやりました。

    やってみると、思ったよりトラブルが多くて、

    「ブログってこういうところでつまずくんだな…」とよく分かった一日でした。

    忘れないうちに、時系列でまとめておきます。

    1. 親ドメインの整理からスタート

    まずは、昔作った medical-engineering.jp の中を整理。

    古い固定ページが大量に残っていた 情報も2017年とかで止まっている 今の活動と全然合ってない

    そこで、固定ページをアーカイブ化 → 非公開へ移動。

    サイトマップ(XML)にも載らないように、

    除外IDを設定して検索エンジンからも外しました。

    2. サブドメイン blog.medical-engineering.jp を作成

    本番ブログは、もう「親ドメインをいじりたくない」ので

    サブドメインに新規WordPressを構築することに。

    しかしここで最初のミス。

    インストールディレクトリを空欄にすればよかったのに、入力して進めた

    これで WordPress が「変な場所」に入ってしまい、

    サイトURLもディレクトリ構成もぐちゃぐちゃに。

    結局この時点で 1回削除 → 再インストール。

    3. WordPress管理画面が開かない事件

    設定し直してからアクセスすると、

    Not Found
    The requested URL was not found on this server.

    原因は wp-admin が diary フォルダに入っていたこと。

    ファイルの階層がずれていたので、

    ファイルを1階層上に移動して修正。

    さらに .htaccess がなかったので、

    WordPressのダッシュボードから再生成して復活。

    4. SSLが反映されない問題

    無料SSLを設定した直後は、

    「保護された通信ではありません」

    と表示されて焦りましたが、

    これはサーバー側の反映待ち。

    30分ほど放置したら自動的に解決。

    5. WordPressアプリ vs Jetpackアプリ

    スマホ投稿を考えて、

    WordPressアプリと Jetpack の両方を入れたけれど…

    Jetpackの方が投稿しやすい WordPressアプリはログインがうまくいかないことがある とりあえず “両方使いつつ、メインはJetpack” に決定

    6. パーマリンク設定

    日本語URLがイヤなので、

    記事を書くときは スラッグを英語に統一する運用に。

    (WordPress は初期設定だと日本語URLになるため)

    7. バックアッププラグイン(BackWPup)導入

    ウィザードに従って 週次バックアップのジョブを作成。

    外部保存は Google Drive が有料化しているので見送り。

    とりあえずは

    必要なときだけ手動でバックアップを取る方式に。

    あとで Dropbox に切り替えるかもしれない。

    今日やってみて感じたこと

    サーバーの階層ミスが一番の落とし穴 サブドメイン構築は慎重にやらないと迷子になる SSLは反映まで時間がかかる(焦らない) スマホ投稿したければ Jetpack が便利 バックアップは後回しにしてもいいが、いずれ必須

    何だかんだで、

    新しいブログ環境はだいぶ整った。

    これからは、

    「書く」ことに集中していきたい。

    おわりに

    ブログの設定って、やってみると意外とトラブルだらけ。

    でも、一つひとつ解決すると、

    ちょっとずつ “自分の場所” が整っていく感覚があって面白い。

    ここからは、

    日々の気づきや違和感、考えていることなどを、

    ゆるく書いていくつもり。