postgresql - CodeBuild 到 RDS 连接问题

标签 postgresql amazon-web-services amazon-rds aws-codebuild

我正在尝试从 CodeBuild 项目连接 Postgres RDS 无服务器实例。
这是失败的地方:psql --host ${PG_HOST} --dbname ${PG_DBNAME} --user ${SECRET_USER} -f /tmp/file/tmp/file 存在,所以文件权限/不存在的问题是不可能的
到目前为止,我尝试过的用户名和密码是:

  • 在 CodeBuild 中存储为环境变量
  • 存储在 AWS Secrets manager
  • env:
      secrets-manager:
         # key: secret-id:json-key:version-stage:version-id
         SECRET_USER: rds-db-credentials:username
         SECRET_PASSWORD: rds-db-credentials:password 
    
  • 直接在调用中作为参数给出
  • psql --host ${PG_HOST} --dbname ${PG_DBNAME} "user=mydbuser password=0fNKJtNv" -f /tmp/file;
    
  • 存储在 .pgpass 文件中
  • echo ${PG_HOST}:${PG_PORT}:${PG_DBNAME}:${SECRET_USER}:${SECRET_PASSWORD} > ~/.pgpass
    chmod 600 ~/.pgpass
    
    可以肯定的是,我也导出了变量,PGPASSFILE="~/.pgpass"当我回显用户名和密码时,我只会打印 *** ,例如:
    [Container] 2020/09/27 07:39:34 Running command cat ~/.pgpass
    something.eu-central-1.rds.amazonaws.com:5432:spumdb:***:***
    
    错误:
  • 对于 psql --host ${PG_HOST} --dbname ${PG_DBNAME} --user ${PG_USER} -f /tmp/file ,错误是
  • psql: warning: extra command-line argument "/tmp/file" ignored
    Password for user -f: 
    psql: fe_sendauth: no password supplied
    
  • 对于 psql --host ${PG_HOST} --dbname ${PG_DBNAME} --user ${SECRET_USER} -f /tmp/file ,错误是
  • Password for user ***: 
    psql: fe_sendauth: no password supplied
    
  • 对于 psql --host ${PG_HOST} --dbname ${PG_DBNAME} "user=mydbuser password=0fNKJtNv" -f /tmp/file ,错误为:
  • Password for user user=*** password=***: 
    psql: fe_sendauth: no password supplied
    
    仅供引用,
  • RDS 安全组的条目允许来自项目所在 AWS 区域的 CodeBuild 的所有 TCP 连接 (35.157.127.248/29)
  • CodeBuild 和 RDS 都位于 用户创建VPC的私有(private)子网
  • 我能够使用相同的 RDS 凭证从 EC2 实例连接到 RDS 实例
  • 我正在使用 Amazon Linux 2 的最新镜像 (aws/codebuild/amazonlinux2-x86_64-standard:3.0)

  • 看起来是 CodeBuild 端的问题,而不是 RDS 端的问题。出于某种原因,CodeBuild 没有获得参数的值,也只有用户名和密码,其他人如主机名、数据库名被正确评估!
    有人在任何地方看到任何问题吗?谢谢!

    最佳答案

    我试过 复制问题 ,但我唯一发现你应该使用 --username ,不是 --user .无论如何,这是我的 buildspec.yml用于验证:

    version: 0.2
    
    env:
      variables:
        PG_HOST: database-1.cm3c1syrcj06.us-east-1.rds.amazonaws.com
        PG_PORT: 5432
        PG_DBNAME: mydb
      secrets-manager:
          SECRET_USER: rds-db-credentials:username
          SECRET_PASSWORD: rds-db-credentials:password 
    phases:
      pre_build:
        commands:
           - echo ${PG_HOST}:${PG_PORT}:${PG_DBNAME}:${SECRET_USER}:${SECRET_PASSWORD} > ~/.pgpass
           - chmod 600 ~/.pgpass
      build:
        commands:
           - cat ~/.pgpass | rev
           - echo "\dt" > /tmp/file
           - psql --host ${PG_HOST} --dbname ${PG_DBNAME} --username ${SECRET_USER} -f /tmp/file
    
    在上面我使用了 小把戏显示密码和用户名,但相反。否则你只能看到 *** .
    一切都按预期工作 , CB 连接数据库,如 No relations found 所示(这是意料之中的,因为我的数据库是空的):
    enter image description here

    关于postgresql - CodeBuild 到 RDS 连接问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64086322/

    相关文章:

    postgresql - 如何在 Postgres res 策略中引用查询值

    amazon-web-services - 如何在 AWS EC2 上的 Windows 中查找驱动器的 EBS 卷 ID

    mysql - 在 aws 中将 hive 元数据数据库从 derby 更改为 RDS mysql 实例时出现问题

    amazon-web-services - 为 Amazon Aurora 启用数据 API

    postgresql - 如何在 PostgreSQL 中模拟死锁?

    security - 如何为Postgresql中的所有数据库创建一个只读权限的用户?

    ios - DynamoDB 获取项目计数

    amazon-web-services - AWS CLI 工具 - 无法从 S3 递归下载

    amazon-web-services - 安装 Amazon RDS 命令行工具 (RDSCli) 时出现问题

    postgresql - 在 Heroku 上部署 Play Framework 2.1.1