2025-05-15

EC2にデプロイするCIを作成

ExpressサーバーをEC2にデプロイするCIを最近作成したので、そのときの作業をメモとして残しておきます。

要件は以下です

  • EC2にデプロイする
  • SSH接続はできなず、Session Managerを使用する
  • サーバーはExpress
  • GitHub ActionsからデプロイできるようにCIを作成する

完成したコード

先にコードを載せて、コードの意図について説明します。

解説

1. EC2にソースコードをcloneする

今回はEC2とSSH接続ができないためbuildしたコードのみの転送が難しく、シンプルにEC2にソースコードをcloneして、そこからデプロイする形にしました。 このときにEC2でGitHubのSSHキーを作成して、GitHubに登録しておく必要があります。 そうすることでgit pullコマンドを実行するときにユーザーネームやパスワードを入力する必要がなくなります。

2. Session Managerで接続し、それぞれのコマンドを実行する

Deploy to EC2 via Session Managerでawsのcliを使用してSession ManagerでEC2に接続し、コマンドを実行しています。 sudo su - -c を使用して、ec2-userからrootユーザーに切り替えています。 これがないと環境変数が適用されず、pnpmpm2コマンドが実行できません。 また、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で管理するようにしたりと手探りなところもありますが、一旦デプロイができたので良かったです。

Thanks for the visit Nozo Blog