linux - CloudFormation如何导出变量

标签 linux amazon-web-services aws-cloudformation amazon-linux

以下是我们模板的一部分。我们在那里导出一个路径变量。但是,从模板运行,这不起作用。如果我通过 SSH 连接到服务器并运行同一行,它就可以工作并且我可以使用 gradle。但仅仅从模板来看,它不知何故没有被执行。其他 chmod 命令有效,因此该 block 显然已执行。非常感谢任何帮助。

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

最佳答案

我找到了解决方案。所有这些行都以 root 用户身份执行。因此,export PATH... 不适合我的 ec2-user。我处理的方法是将路径变量(全局)放入 /etc/environment 文件中。

在我的代码片段中,只需替换

“导出 PATH=$PATH:/opt/gradle-3.4.1/bin\n”,

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

关于linux - CloudFormation如何导出变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42784123/

相关文章:

c++ - 运行 3 个线程时出现段错误

Linux,如何对文件的行进行排序

linux - 如何使用 wget 一次下载所有这些文件?

amazon-web-services - AWS C9 - 您的环境配额用完。请腾出一些空闲空间

amazon-web-services - 从 VPC 内的 EC2 连接到 ElastiCache(VPC 外)实例

wordpress - AWS 代码部署 : How to stop it from deleting files?

linux - codeigniter 未捕获错误 : Call to undefined function pg_pconnect() in linux codeigniter

amazon-web-services - 无法通过 Cloudformation 创建 EC2 实例

amazon-web-services - 在 CentOS7 中 - 没有可用的 aws-cfn-bootstrap 软件包

amazon-web-services - 用于阻止非 MFA 用户的 SCP 正在阻止其他 AWS 操作