amazon-web-services - Cloudformation - 在 EC2 服务器中使用参数

标签 amazon-web-services parameters aws-cloudformation

下面是我的cloudformation模板。基本上我想在 EC2 ubuntu 服务器的命令中使用名为“User”的参数。 我尝试了很多解决方案,但是 mkdir 命令没有失败,模板的其余部分正在工作。 在下面的示例中,我尝试将“User”值设置为标签和属性。两者都失败了。如果您见过任何此类示例,请提出建议。

{
"AWSTemplateFormatVersion": "2010-09-09",
"Parameters": {
    "UserName": {
        "Type": "String",
        "Description": "Enter the username",
        "AllowedPattern": "[a-zA-Z0-9_\\-]+",
        "ConstraintDescription": "It should be a combination of characters from [A-Z],[a-z],[0-9],- and _."
    },
  "KeyName": {
  "Description" : "Name of an existing EC2 KeyPair to enable SSH access to the instances",
  "Type": "AWS::EC2::KeyPair::KeyName",
  "ConstraintDescription" : "must be the name of an existing EC2 KeyPair."
}
},
"Resources": {
    "EC2Ansiblemaster2743": {
        "Type": "AWS::EC2::Instance",
        "Metadata": {
            "User"   : { "Ref": "UserName" },
            "AWS::CloudFormation::Init" : {
                "configSets" : {
                    "CreateFile" : [
                        "create_file"
                    ]
                    },
                "create_file" : {
                    "files" : {
                        "/home/ubuntu/healthy.txt": {
                            "content": "Hello"
                    }
                    },


                    "commands" : {
                        "mkdir" : {
                        "command" : "sudo mkdir /home/$User" 
                    }
                        }
            }}
        },
        "Properties": {
            "AvailabilityZone": "us-east-2a",
            "ImageId": "ami-05c1fa8df71875112",
            "InstanceType": "t2.micro",
            "SourceDestCheck": false,
            "KeyName"        : { "Ref" : "KeyName" },
           "Tags" : [
                    {
                    "Key" : "User",
                    "Value" : { "Ref": "UserName" }
                    }],
            "UserData": {
                "Fn::Base64": {
                    "Fn::Join": [
                        "",
                        [    
                            "#!/bin/bash -xe\n",
                            "sudo apt-get update\n",
                            "sudo apt-get -y install python-pip\n",
                            "sudo pip install https://s3.amazonaws.com/cloudformation-examples/aws-cfn-bootstrap-latest.tar.gz\n",
                            "# Install the files and packages from the metadata\n",
                            "sudo /usr/local/bin/cfn-init ",
                            "         --stack ",
                            {
                                "Ref": "AWS::StackName"
                            },
                            "         --resource EC2Ansiblemaster2743 ",
                            "         --configsets CreateFile ",
                            "         --region ",
                            {
                                "Ref": "AWS::Region"
                            },
                            "\n",
                            "# Signal the status from cfn-init\n",
                            "sudo /usr/local/bin/cfn-signal -e $? ",
                            "         --stack ",
                            {
                                "Ref": "AWS::StackName"
                            },
                            "         --resource EC2Ansiblemaster2743 ",
                            "         --region ",
                            {
                                "Ref": "AWS::Region"
                            },
                            "\n"
                        ]
                    ]
                }
            },
            "SecurityGroupIds": [
                {
                    "Ref": "EC2SG2AnsM0012743"
                }
            ]
        }
    },
    "EC2SG2AnsM0012743": {
        "Type": "AWS::EC2::SecurityGroup",
        "Properties": {
            "GroupName": "SGAnsibleMas2743",
            "GroupDescription": "First",
            "SecurityGroupIngress": [
                {
                    "CidrIp": "0.0.0.0/0",
                    "FromPort": "0",
                    "ToPort": "65535",
                    "IpProtocol": "tcp",
                    "Description": "From Anywhere"
                },
                {
                    "CidrIp": "0.0.0.0/0",
                    "FromPort": "22",
                    "ToPort": "22",
                    "IpProtocol": "tcp",
                    "Description": "SSH from anywhere , from and to port will be same - 22"
                }
            ]
        },
    }
}

}

最佳答案

我使用 Fn:Sub 来获取 Userdata 的参数。

            {
                                "Fn::Sub": 

                                [
                                "UserName=${variable}\n",
                                {
                                "variable": {
                                "Ref": "UserName"
                                 }
                                 }]

后来我通过curl 169.254.169.254/latest/user-data 来提取用户名字符串。 如果有更简单的解决方案可以解决此问题,请告诉我。

关于amazon-web-services - Cloudformation - 在 EC2 服务器中使用参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59630839/

相关文章:

r - 稳定分布对数似然和 AIC 值

r - deSolve 包参数可以包含矩阵吗?

websocket - 连接到 AWS API Gateway websocket 时返回连接 ID

r - 如何在模块化 Shiny 应用程序中连接 AWS S3 凭证

amazon-web-services - 什么是 AWS 公共(public) IP 限制? (公共(public) IP 不是弹性 IP)

mysql - 从本地机器连接到 AWS 上的 MySQL

powershell - CloudFormation 用户数据到 Base64 解码不正确

amazon-web-services - 我如何在 PHP 上将上传的图像存储到 AWS S3

ruby - 为什么 Ruby 输出 [[ :rest]] when the parameter method is called on String objects?

amazon-web-services - 由 Lambda 函数支持的 AWS CDK 自定义资源