0

以下是我們模板的一部分。我們在那裏輸出一個路徑變量。但是,從模板運行,這不起作用。如果我SSH進入服務器並運行同一行,它的工作原理,我可以使用gradle。但只是從模板,它不知道怎麼執行。其他chmod命令的工作,所以該塊顯然執行。任何幫助,高度讚賞。CloudFormation如何導出變量

... 
     "LaunchConfiguration": { 
      "Type": "AWS::AutoScaling::LaunchConfiguration", 
      "Metadata": { 
       "AWS::CloudFormation::Init": { 
        "config": { 
        "packages": { 
         "yum": { 
         "java-1.8.0-openjdk-devel": [] 
         } 
        }, 
        "sources": { 
         "/opt": "https://services.gradle.org/distributions/gradle-3.4.1-bin.zip", 
         "/home/ec2-user": "https://github.com/ABC/XYZ/archive/master.zip" 
        }, 
        "files": { 
         "/tmp/gradle_config": { 
         "content": { 
          "Fn::Join": ["", 
          [ 
           "#!/bin/bash -ex\n", 
           "chmod -R 755 gradle-3.4.1/\n", 
           "export PATH=$PATH:/opt/gradle-3.4.1/bin\n" //<<<< This does not work 
          ] 
          ] 
         }, 
         "mode": "000500", 
         "owner": "root", 
         "group": "root" 
         }, 
         "/tmp/app_config": { 
         "content": { 
          "Fn::Join": ["", 
          [ 
           "#!/bin/bash -ex\n", 
           "chmod -R 777 XYZ-master/\n" 
          ] 
          ] 
         }, 
         "mode": "000500", 
         "owner": "root", 
         "group": "root" 
         } 
        }, 
        "commands": { 
         "01_config": { 
          "command": "/tmp/gradle_config", 
          "cwd" : "/opt" 
         }, 
         "02_config": { 
          "command": "/tmp/app_config", 
          "cwd" : "/home/ec2-user" 
         } 
        } 
        } 
       } 
      }, ... 

回答

1

我找到了解決方案。所有這些行都以root用戶身份執行。因此export PATH...不適用於我的ec2-user。我處理的方式是將路徑變量(全局)放入/etc/environment文件中。

在我的代碼片段,只需更換

"export PATH=$PATH:/opt/gradle-3.4.1/bin\n",

"echo \"PATH=$PATH:/opt/gradle-3.4.1/bin\" >> /etc/environment"",