0

Ce qui suit fait partie de notre modèle. Nous exportons une variable de chemin là. Cependant, en cours d'exécution à partir du modèle, cela ne fonctionne pas. Si je SSH dans le serveur et exécutez la même ligne, cela fonctionne et je peux utiliser gradle. Mais juste à partir du modèle, il ne sera pas exécuté. Les autres commandes chmod fonctionnent, donc le bloc est clairement exécuté. Toute aide est grandement appréciée.CloudFormation comment exporter une variable

... 
     "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" 
         } 
        } 
        } 
       } 
      }, ... 

Répondre

1

J'ai trouvé la solution. Toutes ces lignes sont exécutées en tant qu'utilisateur root. Le export PATH... n'était donc pas pour mon ec2-user. La façon dont j'ai géré est en mettant la variable path (globalement) dans le fichier /etc/environment.

Dans mon extrait de code, il suffit de remplacer

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

avec

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