code-server と ALB で AWS Cloud9 代替の研修用 IDE を提供する – アーキテクチャ概要編

こんにちは、広野です。

AWS Cloud9 は研修用途では非常に使い勝手が良かったのですが、AWS が新規アカウントへの提供を終了してしまいました。今回は私が試みた代替ソリューションの設計を紹介したいと思います。実装編は AWS CloudFormation テンプレートになりますが、続編記事として作成します。

インスピレーションを受けた記事

多くの有志の方々が AWS Cloud9 代替品の作成方法を記事にしてくれていまして、大変参考になりました。ですが中でも一番参考にしたのは AWS が提供してくれているハンズオンに含まれている IDE 作成テンプレートでした。

Coder code-server という、VSCode を WEB UI で使用できるソフトウェアを Amazon EC2 インスタンスにインストールし、AWS CloudFront および nginx 経由で公開する構成になっていました。

私はそれを Elastic Load Balancing の ALB 経由で研修受講者に使用してもらいたいと思い、そのように作成しました。

アーキテクチャ

VPC 周り

  • code-server サーバを配置する VPC です。何の変哲もない一般的なサブネット構成にしています。
  • NAT Gateway は課金節約のため、1 つのパブリックサブネットにしか配置していません。
  • code-server サーバは 1 ユーザーあたり 1 台を割り当てます。図では 1 つしかありませんが、人数分作成される想定です。ALB はユーザー全体で共用します。
  • code-server のログインパスワードはインストール時に設定しますが、AWS Secrets Manager で生成したものを使用します。
  • ALB には HTTPS アクセスさせるため、図には書いていませんが独自ドメインを使用します。そのための SSL 証明書はそのリージョンの AWS Certificate Manager で作成されていることが前提になります。
  • ALB から EC2 インスタンスへの通信は 80 番ポート (HTTP) を使用します。
  • ALB はインターネットに公開されますが、研修用途を想定して会社のソース IP アドレスからのみアクセスできるようにセキュリティグループを設定しています。

ALB 周り

  • ユーザーは、ALB に自分専用の URL でアクセスします。ただし、ドメインは共通で、パスに自分用の番号が入ったもの (ide1 など) を指定します。
  • ALB はパスベースルーティングで受け取ったパスからそのユーザーの Amazon EC2 インスタンスが所属しているターゲットグループに通信をルーティングします。

code-server 周り

  • ALB はパスベースルーティングで通信を送信するとき、パスは受け取ったまま (図のケースでは /ide2/) でターゲットに送信します。code-server には存在しないパスなので、そのまま通信を code-server で受けてしまうと当然 not found エラーになります。
  • この問題を解決するために、nginx を間に挟み、ポート番号の変更とパスの削除をしています。やりたいことはパスの削除だけなのですが、1台のサーバ内に nginx と code-server が共存するためにはポート番号を別々のものにしないといけないため、nginx を 80、code-server を 8008 でオープンするようにしています。

出来上がり

出来上がると、以下のログイン画面が表示されます。

ログインすると、以下のように VSCode の画面がブラウザ上に表示されます。ホームディレクトリは AWS Cloud9 を意識して environment にしています。OS のターミナルも ec2-user で開いているのが見えますね。めでたし、めでたし。

続編記事

実装編記事が出来次第、この章を更新します。

 

まとめ

いかがでしたでしょうか。

今回は概要編でしたので内容は浅いですが、設計の要点はご理解いただけるのではないかと思います。実装編では、具体的な設定に踏み込んで紹介します。

本記事が皆様のお役に立てれば幸いです。

著者について
広野 祐司

AWS サーバーレスアーキテクチャを駆使して社内クラウド人材育成アプリとコンテンツづくりに勤しんでいます。React で SPA を書き始めたら快適すぎて、他の言語には戻れなくなりました。サーバーレス & React 仲間を増やしたいです。AWS は好きですが、それよりもバックエンド構築を簡単にしてくれたことに対する感謝の気持ちの方が強いです。
取得資格:AWS 認定は15資格、IT サービスマネージャ、ITIL v3 Expert 等
2020 - 2024 Japan AWS Top Engineer 受賞
2022 - 2024 AWS Ambassador 受賞
2023 当社初代フルスタックエンジニア認定
好きなAWSサービス:AWS Amplify / AWS AppSync / Amazon Cognito / AWS Step Functions / AWS CloudFormation

広野 祐司をフォローする

クラウドに強いによるエンジニアブログです。

SCSKクラウドサービス(AWS)は、企業価値の向上につながるAWS 導入を全面支援するオールインワンサービスです。AWS最上位パートナーとして、多種多様な業界のシステム構築実績を持つSCSKが、お客様のDX推進を強力にサポートします。

AWSアプリケーション開発クラウドソリューション
シェアする
タイトルとURLをコピーしました