2016-11-20 1 views
1

Я новичок в cloudformation. Я использую cfn-init для создания файла. Но не создает файл, ни мой стек не работает. Стек успешно создается с использованием необходимых ресурсов, таких как экземпляр EC2. Также он устанавливает AWS CLI, как указано в пользовательских данных. Но он просто не создает файл, который я хочу создать. Я пробовал использовать дополнительные опции, позволяющие откатить стек. Но /var/log/cfn-init.log не создается. См. Шаблон ниже? Я что-то не так в этом делаю?AWS - cfn-init, не создавая файл

{ 
    "Parameters" : { 
    "KeyName" : { 
     "Description" : "The EC2 Key Pair to allow SSH access to the instance", 
     "Type" : "AWS::EC2::KeyPair::KeyName" 
    } 
    }, 
    "Resources" : { 
    "Ec2Instance" : { 
     "Type" : "AWS::EC2::Instance", 
     "Metadata" : { 
     "Comment" : "Install a simple application", 
     "AWS::CloudFormation::Init" : { 
      "config" : { 
      "files" : { 
       "/tmp/setup.mysql" : { 
       "content" : { "Fn::Join" : ["", ["[default]\n","region=",{"Ref": "AWS::Region"}]]}, 
       "mode" : "000775", 
       "owner" : "ec2-user", 
       "group" : "ec2-user" 
       }  
      } 
      } 
      } }, 

     "Properties" : { 
     "SecurityGroups" : [ { 
       "Ref" : "InstanceSecurityGroup" } 
       ], 
     "IamInstanceProfile" : {"Ref" : "RootInstanceProfile"} , 
     "KeyName" : { "Ref" : "KeyName"}, 
     "InstanceType" : "t2.micro", 
     "ImageId" : "ami-58277d3d", 
     "UserData": { 
        "Fn::Base64": { 
         "Fn::Join": [ 
          "", 
          [ 
           "curl https://s3.amazonaws.com/aws-cli/awscli-bundle.zip -o awscli-bundle.zip\n", 
           "unzip awscli-bundle.zip\n", 
           "sudo ./awscli-bundle/install -i /usr/local/aws -b /usr/local/bin/aws\n", 
           "/opt/aws/bin/cfn-init -v ", 
           "   --stack ", { "Ref" : "AWS::StackName" }, 
           "   --resource Ec2Instance ", 
           "   --region ", { "Ref" : "AWS::Region" }, "\n", 
           "cfn-signal -e 0", 
           " --stack ", 
           { 
            "Ref": "AWS::StackName" 
           }, 
           " --region ", 
           { 
            "Ref": "AWS::Region" 
           }, 
           " --resource ", 
           "Ec2Instance", 
           "\n" 
          ] 
         ] 
        } 
       } 
     } 
    }, 


     "RootRole": { 
     "Type": "AWS::IAM::Role", 
     "Properties": { 
      "AssumeRolePolicyDocument": { 
       "Version" : "2012-10-17", 
       "Statement": [ { 
        "Effect": "Allow", 
        "Principal": { 
        "Service": [ "ec2.amazonaws.com" ] 
        }, 
        "Action": [ "sts:AssumeRole" ] 
       } ] 
      }, 
      "Path": "/", 
      "Policies": [ { 
       "PolicyName": "root", 
       "PolicyDocument": { 
        "Version" : "2012-10-17", 
        "Statement": [ { 
        "Effect": "Allow", 
        "Action": ["cloudwatch:PutMetricData"], 
        "Resource": "*" 
        } ] 
       } 
       } ] 
      } 
     }, 
     "RootInstanceProfile": { 
     "Type": "AWS::IAM::InstanceProfile", 
     "Properties": { 
      "Path": "/", 
      "Roles": [ { 
       "Ref": "RootRole" 
      } ] 
     } 
     }, 



    "InstanceSecurityGroup" : { 
     "Type" : "AWS::EC2::SecurityGroup", 
     "Properties" : { 
     "GroupDescription" : "Enable SSH access via port 22", 
     "Tags" : [{ "Key" : "Name", "Value" : "SecurityGr_EC2WithParam" }], 
     "SecurityGroupIngress" : [ { 
      "IpProtocol" : "tcp", 
      "FromPort" : "22", 
      "ToPort" : "22", 
      "CidrIp" : "0.0.0.0/0" 
     } ] 
     } 
    } 
    } 
} 
+0

Что вы пытаетесь вставить в содержимое файла точно? это область по умолчанию? вы можете захотеть снова проверить этот блок – Ali

+0

Я смог решить этот Али. Добавлена ​​первая строка в «UserData» как «#!/Bin/bash \ n». Для любых команд для работы нам необходимо предоставить среду оболочки в Userdata, без которой она не может создавать файлы. благодаря – Wills

ответ

0

Как обнаружили в вашем comment, то UserData свойство на вашем AWS::EC2::Instance ресурсов требует, чтобы первая строка будет #!/bin/bash\n.

Это необходимо для того, чтобы пользователь-данных, обрабатываемых cloud-init следует интерпретировать как User-Data Script, как указано в документации раздела AWS EC2, Running Commands on Your Linux Instance at Launch:

Пользовательские скрипты данные должны начать с #! символы и путь к интерпретатору, который вы хотите прочитать сценарий (обычно /bin/bash).

Заметим также, что sudo не обязательно в сценарии пользователя данных, а также отмечено в документации:

Сценарии вводятся в качестве пользовательских данных выполняются как root пользователя, поэтому не следует использовать sudo команда в скрипте.

Наконец, note что AWS CLI поставляется с предварительно установленным на экземплярах Amazon Linux AMI по умолчанию, поэтому вы заметили AWS CLI было еще установлено на вашем экземпляре, несмотря на сценарий пользователя данные не работает правильно.

Смежные вопросы