2025-05-15
ExpressサーバーをEC2にデプロイするCIを最近作成したので、そのときの作業をメモとして残しておきます。
要件は以下です
先にコードを載せて、コードの意図について説明します。
今回はEC2とSSH接続ができないためbuildしたコードのみの転送が難しく、シンプルにEC2にソースコードをcloneして、そこからデプロイする形にしました。
このときにEC2でGitHubのSSHキーを作成して、GitHubに登録しておく必要があります。
そうすることでgit pull
コマンドを実行するときにユーザーネームやパスワードを入力する必要がなくなります。
Deploy to EC2 via Session Manager
でawsのcliを使用してSession ManagerでEC2に接続し、コマンドを実行しています。
sudo su - -c
を使用して、ec2-userからrootユーザーに切り替えています。
これがないと環境変数が適用されず、pnpm
やpm2
コマンドが実行できません。
また、COMMAND_ID
を取得して、次のaws ssm get-command-invocation
コマンドの実行状態を確認しています。
環境変数は./scripts/set-environment-variables.sh
を使用して、.env
ファイルに書き込んでいます。
具体的な処理の内容は以下のような感じです。
環境変数はAWS Systems Manager Parameter Storeに保存しておき、aws ssm get-parameters-by-path
コマンドを使用して取得しています。
Secret Managerを使用しようか迷ったーのですが、ローテーションの必要がなかったため、Parameter Storeを使用しました。
以上でデプロイのCIの設定が完了です。
EC2の接続方法が制限されていたのでEC2内でgit pull
コマンドを実行したり、環境変数をawsで管理するようにしたりと手探りなところもありますが、一旦デプロイができたので良かったです。