【ITニュース解説】Deploying A Dockerized Golang App To AWS App Runner

2025年09月06日に「Dev.to」が公開したITニュース「Deploying A Dockerized Golang App To AWS App Runner」について初心者にもわかりやすいように丁寧に解説しています。

作成日: 更新日:

ITニュース概要

Go言語アプリをDockerコンテナ化し、AWSにデプロイする手順を紹介。GitHub ActionsでコンテナイメージをビルドしてECRに保存し、EC2上のMongoDBと連携させ、AWS App Runnerでアプリを公開する流れを解説する。

ITニュース解説

Webアプリケーションを開発し、世界中に公開するプロセスは、近年大きく進化している。その中心にあるのが「コンテナ」技術と「クラウドサービス」の活用だ。Go言語で開発されたアプリケーションをDockerというコンテナ技術でパッケージ化し、それをAWS(Amazon Web Services)のApp Runnerというサービスを使って簡単に公開するまでの一連の流れは、現代的なWebアプリケーション開発とデプロイの基礎を学ぶ上で非常に有益である。

このデプロイプロセスでは、いくつかの重要な技術が連携して動作する。まず、アプリケーション本体はGo言語で作られたタスク管理アプリである。次に、このアプリケーションを実行環境ごと「Dockerコンテナ」という箱に詰める。Dockerを使う最大の利点は、開発者のPCでも本番のサーバーでも、どこでも同じようにアプリケーションを動かせる点にある。このコンテナの設計図となるのがDockerfileと呼ばれる設定ファイルだ。作成したDockerコンテナのイメージは、Amazon ECR(Elastic Container Registry)という専用の保管庫に保存される。そして、この「ソースコードの変更を検知し、DockerイメージをビルドしてECRに保存する」という一連の作業を自動化するために、GitHub ActionsというCI/CDツールを利用する。CI/CDとは、継続的インテグレーション/継続的デプロイメントの略で、開発の効率を飛躍的に向上させる仕組みである。具体的には、GitHubリポジトリにコードがプッシュされると、定義されたワークフローが自動的に実行され、人の手を介さずにコンテナイメージが最新の状態に更新されるようになる。

GitHub ActionsがAWSのサービスであるECRにアクセスするには、当然ながら認証が必要になる。従来はアクセスキーと呼ばれる永続的な認証情報をGitHubに設定する方法が一般的だったが、これは漏洩のリスクを伴う。そこで、より安全な方法としてOIDC(OpenID Connect)という仕組みが推奨されている。これは、GitHub Actionsが特定の操作を行う際にだけ、AWSから一時的な許可証を発行してもらう方式だ。AWS側ではIAM(Identity and Access Management)というサービスを使い、「特定のGitHubリポジトリからのECRへのプッシュ操作のみを許可する」という役割(IAMロール)を作成し、信頼ポリシーを設定する。これにより、必要な権限だけを一時的に付与することができ、セキュリティを大幅に高めることが可能となる。

Webアプリケーションには、ユーザー情報やタスク内容などのデータを永続的に保存するためのデータベースが不可欠だ。今回は、Amazon EC2という仮想サーバーサービス上に、NoSQLデータベースの一種であるMongoDBを構築する。まず、EC2でUbuntu OSがインストールされた仮想サーバーインスタンスを立ち上げる。この際、外部からMongoDBに接続できるよう、セキュリティグループという仮想ファイアウォールの設定で、MongoDBが使用するポート(27017)を開放しておく必要がある。インスタンスが起動したら、コマンドラインで接続し、MongoDBをインストールする。初期状態のMongoDBは認証なしで誰でもアクセスできてしまうため、セキュリティのために管理者ユーザーを作成し、パスワード認証を有効にする。さらに、アプリケーションが動作するApp Runnerから接続できるよう、MongoDBの設定ファイルを編集し、外部からの接続を許可するように変更する。この設定を怠ると、アプリケーションはデータベースに接続できず、正常に動作しない。

すべての準備が整ったところで、いよいよアプリケーションをAWS App Runnerにデプロイする。App Runnerは、コンテナ化されたアプリケーションのデプロイ、実行、スケーリングを自動で管理してくれる非常に便利なサービスだ。開発者はサーバーの管理や負荷分散といった複雑な作業から解放され、アプリケーションの開発に集中できる。App Runnerのサービス作成画面では、まずコンテナイメージのソースとして、先ほどGitHub ActionsでプッシュしたECRリポジトリを指定する。次に、アプリケーションがMongoDBに接続するための情報を設定する。具体的には、MongoDBが動作しているEC2インスタンスのプライベートIPアドレス、ポート番号、ユーザー名、パスワードなどを環境変数としてApp Runnerに渡す。ここで重要なのは、パブリックIPではなくプライベートIPを使用することだ。これにより、インターネットを介さず、AWS内の閉じたネットワークで安全かつ高速に通信ができる。このために、App Runnerのネットワーク設定でカスタムVPCを指定し、EC2インスタンスと同じネットワークに所属させる。設定が完了しデプロイを実行すると、App RunnerはECRからイメージを取得してコンテナを起動し、ロードバランシングやヘルスチェックなどを自動的に設定してくれる。デプロイが成功すると、サービスは「実行中」ステータスとなり、インターネットからアクセス可能なURLが自動的に発行される。このURLにブラウザでアクセスすれば、タスク管理アプリケーションが実際に動作していることを確認できる。

このように、Docker、GitHub Actions、EC2、そしてApp Runnerといったサービスを組み合わせることで、ソースコードの変更から本番環境へのデプロイまでを自動化し、安全かつスケーラブルなWebアプリケーションを効率的に構築・運用することが可能になる。個々の技術は専門的だが、それぞれが担う役割と連携の流れを理解することは、システムエンジニアを目指す上で非常に重要である。この一連のプロセスは、現代のクラウドネイティブなアプリケーション開発における一つの典型的なパターンと言えるだろう。

関連コンテンツ

関連IT用語

【ITニュース解説】Deploying A Dockerized Golang App To AWS App Runner | いっしー@Webエンジニア