这是当前运行迁移的 Prisma 操作文件:
name: Deploy Prisma Migration
on:
push:
branches:
- master
pull_request:
branches:
- master
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout repo
uses: actions/checkout@v3
- name: Setup Node
uses: actions/setup-node@v3
- name: Install dependencies
run: npm install
- name: Apply all pending migrations to the database
run: npx prisma migrate deploy
env:
DATABASE_URL: ${{ secrets.DATABASE_URL }}
但它失败了,因为我不允许外部使用或我已连接的 EC2 实例的 IP。
是否还有其他方法,例如来自 EC2 的 SSH 隧道(因为我已将 EC2 连接到 RDS)
是否还有其他方法,例如来自 EC2 的 SSH 隧道
您可以按照这个问题,在 PgAdmin 中使用 SSH 隧道。
同样的想法也适用于 Prisma,它充当需要连接到数据库的客户端。
主要要求是建立从外部网络(在您的情况下为 GitHub Actions 运行程序)到 RDS 实例的安全连接,该连接仅限于外部访问。这就是 SSH 隧道的用武之地,它通过允许的中介(EC2 实例)提供安全路径。
您需要在本地计算机或 GitHub 运行程序上创建 SSH 密钥对。该密钥将用于建立与 EC2 实例的安全 SSH 连接。 (
ssh-keygen
)。确保您的 EC2 实例已启用 SSH 并且可以访问 RDS 数据库,如此答案中所示。将您生成的公钥添加到 EC2 实例上的 ~/.ssh/authorized_keys
文件以允许访问。您的 GitHub 工作流程应将私钥回显到文件中,设置适当的权限,然后使用 SSH 命令创建隧道:
- name: Set up SSH Tunnel for Database Access
run: |
echo "$PRIVATE_KEY" > private_key && chmod 600 private_key
ssh -o StrictHostKeyChecking=no -i private_key ${USER_NAME}@${HOSTNAME} -L local_port:RDS_endpoint:RDS_port -N &
sleep 5
当您的 GitHub Actions 工作流程运行时,它应该创建一个到 EC2 实例的 SSH 隧道,而 EC2 实例又可以访问 RDS 数据库。这样您就可以安全地执行数据库操作,而无需将 RDS 实例暴露到公共互联网。