在我的scala应用程序中,我们正在与AWS进行交互。这是一个内部公司项目,但我们仍然需要隐藏2个参数,这是一个密钥和访问密钥。我们的代码存在于github上,所以我不确定是否有任何可行的方法在scala中执行它?或者我们是否需要将它们作为scala应用程序选择的服务器上的导出参数?如果是这样的话我该怎么做?
val hadoopConf=sc.hadoopConfiguration;
hadoopConf.set("fs.s3.impl", "org.apache.hadoop.fs.s3native.NativeS3FileSystem")
hadoopConf.set("fs.s3.awsAccessKeyId",myAccessKey)
hadoopConf.set("fs.s3.awsSecretAccessKey",mySecretKey)
编辑: 我们在不在EC2上的redhat物理服务器上运行此应用程序。因为它似乎不是关于scala,所以有人能指出我的方向来帮助解决这个问题吗?
答案 0 :(得分:3)
一种方法是使用environement variables
注入这两个值。
使用例如typesafe config
:https://github.com/typesafehub/config。
因此,您创建了一个application.conf
文件:
AWS {
accessKey = {$AWS_ACCESS_KEY} // env variable AWS_ACCESS_KEY
secret = {$AWS_SECRET} // env variable AWS_SECRET
}
要在您的应用程序中使用它,您可以通过这种方式访问值:
import com.typesafe.config.ConfigFactory
conf = ConfigFactory.load()
val awsAccessKey = conf getString "AWS.accessKey"
val awsSecret = conf getString "AWS.secret"
一个很好的特性是,当未设置所需的env变量时,代码将抛出运行时异常。