📌

GoアプリケーションをEC2上でデーモン化する方法

2020/09/30に公開

はじめに

Amazon Linux2 + Nginx + Go で Hello Worldの記事にて、EC2上で go run main.go することでアプリケーションを起動し、ブラウザにURLを入力することで Hello World することができました。

しかし、EC2からログアウトするとアプリケーションも終了してしまいます。
本記事では、GoアプリーケーションをEC2上でデーモン化し、EC2インスタンス起動時にGoアプリケーションが自動的に起動されるようにします。

やること

  1. Hello World アプリケーションをbuildし、実行ファイルにする。
  2. そのアプリケーションをsystemctlの管理化に置く(デーモン化)。

Hello World アプリケーションの実行ファイル化

以下のコマンドを実行するだけで、実行ファイルができます。

ec2-user@<ipアドレス> ~]$ GOOS=linux GOARCH=amd64 go build main.go

systemctl によるデーモン化と動作確認

まずは、デーモン化するための設定ファイルを作成します。

ec2-user@<ipアドレス> ~]$ sudo vi /etc/systemd/system/<任意の名前>.service
[Unit]
Description=<任意の説明>
After=network.target

[Service]
Type=simple
WorkingDirectory=/home/ec2-user # ← 作業ディレクトリも指定しておきましょう。
ExecStart=/home/ec2-user/main # ←実行パスを指定します
Restart = always

[Install]
WantedBy=multi-user.target

設定ファイルができたら、以下のコマンドを順番に実行します。

# 設定ファイルの再読み込み
ec2-user@<ipアドレス> ~]$ sudo systemctl daemon-reload

# サービスの自動起動有効化
ec2-user@<ipアドレス> ~]$ sudo systemctl enable <任意の名前>.service

# サービス起動
ec2-user@<ipアドレス> ~]$ sudo systemctl start <任意の名前>.service

# サービスの状態確認
ec2-user@<ipアドレス> ~]$ sudo systemctl status <任意の名前>.service

最後にEC2インスタンスからログアウトし、動作確認を行います。

# EC2 インスタンスからログアウト
ec2-user@<ipアドレス> ~]$ exit

# 動作確認
$ curl http://<パブリックDNS>/fuga
Hello World!!!

Discussion