【问题标题】:Take input from CloudFormation parameter and pass it to script being downloaded from S3从 CloudFormation 参数获取输入并将其传递给从 S3 下载的脚本
【发布时间】:2015-12-07 07:11:58
【问题描述】:

在沿着我的 AWS CloudFormation 模板创建时,我达到了用户数据的 16KB 限制......然后我发现我可以将脚本放入 S3(包含我的所有用户数据)并将该文件作为用户的一部分复制过来数据并运行该脚本......但我的问题是如何将我传递给 CloudFormation 的参数(如下所示)传递到我从 S3 下载的文件/脚本/用户数据中,然后运行?那么如何将 CloudFormation 中的参数传递到/root/usr.sh 脚本中呢?

这是我的用户数据:

"UserData": {
          "Fn::Base64": {
            "Fn::Join": [
              "",
              [
                "#!/bin/bash -x\n\n",
                "yum -y install tcsh lvm2 sysstat\n\n\n",
                "# AWS CLI download and Installation\n",
                "curl \"https://s3.amazonaws.com/aws-cli/awscli-bundle.zip\" -o \"/usr/awscli-bundle.zip\"\n",
                "unzip /usr/awscli-bundle.zip -d /usr/awscmdline/\n",
                "/usr/awscmdline/awscli-bundle/install -i /usr/local/aws -b /usr/local/bin/aws\n",
                "/usr/local/aws/bin/aws configure set region ",
                {
                  "Ref": "AWS::Region"
                },
                "\n",
                "/usr/local/bin/aws s3 cp s3://test123/usr.sh /root/usr.sh \n",
                "chmod 744 /root/usr.sh \n",
                "/root/usr.sh"
              ]
            ]
          }
        }

这里是示例参数:

"Parameters": {
    "SelectInstanceType": {
      "Description": "EC2 instance type",
      "Type": "String",
      "Default": "r3.8xlarge",
      "AllowedValues": [
        "r3.large",
        "r3.xlarge",
        "r3.2xlarge",
        "r3.4xlarge",
        "r3.8xlarge",
        "c4.large",
        "c4.xlarge",
        "c4.2xlarge",
        "c4.4xlarge",
        "c4.8xlarge"
      ],
      "ConstraintDescription": "Must be a valid EC2 instance type."
    },
    "Keyname": {
      "Description": "Keypair to use to launch the instance",
      "Type": "AWS::EC2::KeyPair::KeyName"
    },
    "IPAddress": {
      "Description": "Private IP",
      "Type": "String",
      "Default": "10.10.10.X"
    },

【问题讨论】:

    标签: amazon-web-services amazon-s3 amazon-cloudformation


    【解决方案1】:

    有几种方法可以做到...

    文件中的配置

    您可以使用您的配置创建一个文件,然后从您的脚本中读取该文件。示例见:Setting environment variables with user-data

    设置环境变量

    作为用户数据脚本的一部分,在下载和调用脚本之前,请设置环境变量(也在上面的示例文件中)。

    执行脚本时传递参数

    从 Amazon S3 下载脚本并调用它时,附加参数的方式与您的脚本当前插入 AWS::Region 的方式相同。然后,您的脚本将需要从命令行读取这些参数。

    参考这样的参数:{ "Ref" : "InstanceTypeParameter" }

    见:CloudFormation Parameters documentation

    【讨论】:

    • 第三个选项,看起来不错,但我不确定我是否可以将 { "Ref" : "InstanceTypeParameter" } 之类的参数传递给 bash 脚本??...如果可能的话,你能提供一个例子吗?
    • 在调用 bash 脚本时,在命令行上附加参数,就像您已经为 aws configure set region 所做的一样。然后,您的脚本可以访问 $1$2 等参数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-30
    • 1970-01-01
    • 2021-10-01
    • 2016-05-04
    • 1970-01-01
    • 2017-02-12
    • 2015-06-07
    相关资源
    最近更新 更多