📌
GoアプリケーションをEC2上でデーモン化する方法
はじめに
Amazon Linux2 + Nginx + Go で Hello Worldの記事にて、EC2上で go run main.go
することでアプリケーションを起動し、ブラウザにURLを入力することで Hello World することができました。
しかし、EC2からログアウトするとアプリケーションも終了してしまいます。
本記事では、GoアプリーケーションをEC2上でデーモン化し、EC2インスタンス起動時にGoアプリケーションが自動的に起動されるようにします。
やること
- Hello World アプリケーションを
build
し、実行ファイルにする。 - そのアプリケーションを
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