在AWS EMR中设置环境变量

时间:2017-07-24 15:35:42

标签: bash amazon-web-services amazon-emr

我正在编写一个bash脚本来启动带有AWS cli的EMR集群,并希望在其上设置环境变量

我试图添加它,但它没有工作

--steps '[{"Args":["/bin/sh","-c","export MY_VARIABLE=xxx"],"Type":"CUSTOM_JAR","ActionOnFailure":"CONTINUE","Jar":"command-runner.jar","Properties":"","Name":"Set Env Variables"}]

基本上我想做的是以下内容:

  • 安排使用AWS Lambda创建AWS EMR集群(我将设置所有环境变量,例如git凭据)
  • 在引导机器时,安装一堆东西,包括git
  • git clone一个存储库(所以我需要使用存储在环境变量中的凭据)
  • 从此存储库执行一些代码

谢谢,

编辑:我也试过了:

 --configurations '[
 {
   "Classification": "spark-env",
   "Properties": {},
   "Configurations": [
       {
         "Classification": "export",
         "Properties": {
             "MY_VARIABLE": "MY_VARIABLE"
         }
       }
   ]
 }
 ]'

我可以在spark-env.sh中看到我现在拥有这些价值,但如果我只是回应$ MY_VARIABLE'在bash中我无法看到它们。

2 个答案:

答案 0 :(得分:0)

将环境变量作为参数传递给引导操作。

答案 1 :(得分:0)

使用MY_VARIABLE找不到echo的原因是因为MY_VARIABLE仅可用于spark-env。

假设您正在使用pyspark,则如果打开pyspark外壳程序(同时将ssh'd进入群集的一个节点)并尝试键入os.getenv("MY_VARIABLE"),则会看到分配给您的值到该变量。

针对您的用例的另一种解决方案是:代替使用凭据(通常不是首选方式),您可以使用一组密钥,使您可以使用SSH(而不是https)克隆存储库。您可以将这些密钥存储在aws ssm中,并在EMR引导脚本中检索它们。一个例子可能是:

bootstrap.sh

export SSM_VALUE=$(aws ssm get-parameter --name $REDSHIFT_DWH_PUBLIC_KEY --with-decryption --query 'Parameter.Value' --output text)
echo $SSM_VALUE >> $AUTHORIZED_KEYS

就我而言,我需要连接到Redshift实例,但这在您的用例中也可以很好地工作。

Alessio