我有一个托管在Heroku上的烧瓶应用,需要使用boto.cmdshell在AWS EC2实例(Amazon Linux AMI)上运行命令。几个问题:
感谢。
答案 0 :(得分:5)
Heroku可让您利用config variables来管理您的应用。这是我的config.py文件的一个例子,它位于我的烧瓶应用程序中:
import os
# flask
PORT = int(os.getenv("PORT", 5000))
basedir = str(os.path.abspath(os.path.dirname(__file__)))
SECRET_KEY = str(os.getenv("APP_SECRET_KEY"))
DEBUG = str(os.getenv("DEBUG"))
ALLOWED_EXTENSIONS = str(os.getenv("ALLOWED_EXTENSIONS"))
TESTING = os.getenv("TESTING", False)
# s3
AWS_ACCESS_KEY_ID = str(os.getenv("AWS_ACCESS_KEY_ID"))
AWS_SECRET_ACCESS_KEY = str(os.getenv("AWS_SECRET_ACCESS_KEY"))
S3_BUCKET = str(os.getenv("S3_BUCKET"))
S3_UPLOAD_DIRECTORY = str(os.getenv("S3_UPLOAD_DIRECTORY"))
现在我可以有两组不同的结果。它来自我的Environment variables。一个是我的应用程序在我的本地计算机上,而是在生产时从Heroku配置变量。例如。
DEBUG = str(os.getenv("DEBUG"))
在我的本地计算机上为“TRUE”。但是Heroku上的假。为了检查你的Heroku配置运行。
Heroku config
另请注意,如果您希望将某些文件保留在本地项目的一部分而不是heroku或github,则可以使用git ignore。当然,那些文件将不会存在于您的生产应用程序中。
答案 1 :(得分:4)
我在寻找的是如何处理私钥的指导。 @DrewV和@yfeldblum都向我指出了正确的方向。我最终将我的私钥变成了一个字符串并将其存储在Heroku配置变量中。
如果有人想要做类似的事情,这里有一个使用paramiko的示例代码snippit:
import paramiko, base64
import StringIO
import os
key = paramiko.RSAKey.from_private_key(StringIO.StringIO(str(os.environ.get("AWS_PRIVATE_KEY"))))
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(str(os.environ.get("EC2_PUBLIC_DNS")), username='ec2-user', pkey=key)
stdin, stdout, stderr = ssh.exec_command('ps')
for line in stdout:
print '... ' + line.strip('\n')
ssh.close()
感谢@DrewV和@yfeldblum的帮助(upvote for both)。
答案 2 :(得分:3)
您可以使用config vars在Heroku上运行的应用程序中存储配置项。
您可以使用用户名/密码组合。您可以使用户名变得简单;但请务必生成一个强密码,例如openssl rand -base64 32
。