Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 从CloudFormation参数获取输入,并将其传递给从S3下载的脚本_Amazon Web Services_Amazon S3_Amazon Cloudformation - Fatal编程技术网

Amazon web services 从CloudFormation参数获取输入,并将其传递给从S3下载的脚本

Amazon web services 从CloudFormation参数获取输入,并将其传递给从S3下载的脚本,amazon-web-services,amazon-s3,amazon-cloudformation,Amazon Web Services,Amazon S3,Amazon Cloudformation,在沿着AWS CloudFormation模板创建时,我遇到了用户数据的16KB限制。。。。然后我发现我可以将脚本放在S3中(和我所有的用户数据一起),并将该文件作为用户数据的一部分复制过来,然后运行该脚本。。。但我的问题是,我如何将传递到CloudFormation中的参数(如下面所示)传递到从S3下载并运行的文件/script/userdata中?那么,如何将参数从CloudFormation传递到/root/usr.sh脚本中呢 以下是我的用户数据: "UserData": {

在沿着AWS CloudFormation模板创建时,我遇到了用户数据的16KB限制。。。。然后我发现我可以将脚本放在S3中(和我所有的用户数据一起),并将该文件作为用户数据的一部分复制过来,然后运行该脚本。。。但我的问题是,我如何将传递到CloudFormation中的参数(如下面所示)传递到从S3下载并运行的文件/script/userdata中?那么,如何将参数从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 S3下载脚本并调用它时,以脚本当前插入的方式附加参数
AWS::Region
。然后,脚本需要从命令行读取这些参数

参考如下参数:
{“Ref”:“InstanceTypeParameter”}


请参阅:

第三个选项似乎很好,但我不确定是否可以将{“Ref”:“InstanceTypeParameter”}之类的参数传递给bash脚本???。如果可能,您可以提供一个示例吗?在调用bash脚本时,在命令行上追加参数,就像在
aws配置集区域
中一样。然后,脚本可以访问参数,如
$1
$2
等。