2015-12-22 109 views
0

在我的scala应用程序中,我们正在与AWS进行交互。这是一个内部公司项目,但我们仍然需要隐藏2个参数,这是一个密钥和访问密钥。我们的代码存在于github上,所以我不确定是否有任何可行的方式在scala中执行它?或者我们需要将它们作为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上这个程序没有。因为它看起来不像scala,所以任何人都可以指出我的方向来帮助解决这个问题吗?

+2

这实在不是一个Scala问题;这是一个“我如何在运行时将秘密加载到我的应用程序中”的问题。为了获得有用的答案,您需要更多地描述环境(程序运行的地方)的_lot_。 –

+0

您是否在EC2实例中运行应用程序? – Alex

+0

只需在服务器上将这些键设置为环境变量即可。 – Ashalynd

回答

3

一种方法是使用environement variables注入这两个值。

这可以很容易地实现,例如使用typesafe confighttps://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变量未设置时,运行时异常。