2015-12-22 146 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變量未設置時,運行時異常。