1. 配置heroku接入AWS S3服务的凭证
heroku官网上的命令示例总是跟实践差着一步,截图为证:
径直无脑照做您会收到报错:
C:\Users\Benjamin Chen>heroku config:set AWS_ACCESS_KEY_ID=mykeyidxxx AWS_SECRET_ACCESS_KEY=mykeyyyy
» Error: Missing required flag:
» -a, --app APP app to run command against
» See more help with --help
正确的做法是加入app名作为参数,在正确的位置…(heroku官方就不能写个具体点的示例么!):
C:\Users\Benjamin Chen>heroku config:set -a chem2reg AWS_ACCESS_KEY_ID=mykeyidxxx AWS_SECRET_ACCESS_KEY=mykeyyyy
Setting AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and restarting ⬢ chem2reg... done, v5
AWS_ACCESS_KEY_ID: mykeyidxxx
AWS_SECRET_ACCESS_KEY: mykeyyyy
加入了-a chem2reg,chem2reg是我放在heroku上的app名字。
2. 从AWS S3导入postgres备份数据到heroku上的postgres数据库
为啥不直接从本地导入数据呢?为啥还要到AWS上折腾?
没得选,heroku制定的规则!
heroku官网上的指导
官网的指导一如既往的是完全不够的!
十八摸之后,你应该这么干:
首先要进入到AWS控制台,创建IAM用户第一步:
IAM用户创建第二步,搜索s3,然后选择策略,因为不是很懂所以我选了fullaccess权限,看你还有什么妖蛾子哼!
后面几步没什么好说的,一路直行。
创建IAM用户的目的是拿到访问密匙ID:example_mykeyid/私有访问密匙:example_mykey
拿到密匙的目的是~~构建signed url
构建signed url的目的是为了使用下面这条命令来导入postgreSQL数据:
heroku pg:backups:restore '<SIGNED URL>' DATABASE_URL
构建signed url的过程可参考《使用Python AWS SDK boto3生成签名链接(signed url)》
生成的链接如下(每次都会有所不同,链接有效时间为一小时):
https://mypsdata.s3.amazonaws.com/cisdatabase_dump?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAXX4JXBAKZCGFZTDK%2F20210731%2Fus-east-2%2Fs3%2Faws4_request&X-Amz-Date=20210731T113531Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=001763859fbddaef7099bb932e49639630f8018faa304f023cb05e7ace1f6a14
其中,mypsdata是存储桶的名字,cisdatabase_dump是我放在桶里的pg数据库备份文件名
万事具备!控制台上输入命令:
heroku pg:backups:restore -a chem2reg "https://mypsdata.s3.amazonaws.com/cisdatabase_dump?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAXX4JXBAKZCGFZTDK%2F20210731%2Fus-east-2%2Fs3%2Faws4_request&X-Amz-Date=20210731T113531Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=001763859fbddaef7099bb932e49639630f8018faa304f023cb05e7ace1f6a14" postgresql-polished-14609
数据库备份导入heroku成功!
注意!在windows操作系统中使用该命令时,signed url一定要用双引号括起来
【发表真的是为了记忆】
【要不然是真的记不住】