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

해결책을 찾았습니다. 모든 행은 루트 사용자로 실행됩니다. 따라서 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"",