2016-11-20 2 views
1

Ich bin neu in cloudformation. Ich benutze cfn-init, um eine Datei zu erstellen. Aber erstellt weder eine Datei noch mein Stack schlägt fehl. Der Stack wird erfolgreich mit den erforderlichen Ressourcen wie der EC2-Instanz erstellt. Außerdem wird AWS CLI wie in Benutzerdaten erwähnt installiert. Aber es erstellt einfach nicht die Datei, die ich erstellen möchte. Ich habe versucht, erweiterte Optionen zu verwenden, um das Zurücksetzen des Stapels zu verhindern. Aber die Datei /var/log/cfn-init.log wird nicht erstellt. Siehe die Vorlage unten? Mache ich etwas falsch?AWS - cfn-init erstellt keine Datei

{ 
    "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

Was möchten Sie genau in den Dateiinhalt einfügen? ist es Standardregion? Vielleicht möchten Sie eine Überprüfung auf diesen Block wieder – Ali

+0

Ich konnte diesen Ali zu lösen. Die erste Zeile in "UserData" wurde als "#!/Bin/bash \ n" hinzugefügt. Damit irgendwelche Befehle funktionieren, müssen wir eine Shell-Umgebung in Userdata bereitstellen, ohne dass sie keine Dateien erstellen kann. Vielen Dank – Wills

Antwort

0

Wie in Ihrem comment entdeckt, das UserData Eigentum auf Ihrer AWS::EC2::Instance Ressource erfordert die erste Zeile #!/bin/bash\n zu sein.

Dies, damit die Benutzer-Daten notwendig ist, durch cloud-init verarbeitet als User-Data Script interpretiert werden, wie in der AWS EC2 Dokumentation Abschnitt erwähnt, Running Commands on Your Linux Instance at Launch:

Daten Benutzer Shell-Skripte mit der #! starten müssen Zeichen und der Pfad zum Interpreter, den Sie das Skript lesen möchten (üblicherweise /bin/bash).

Beachten Sie auch, dass sudo ist nicht notwendig, in Ihren Benutzerdaten Skript, wie auch in der Dokumentation festgestellt:

Scripts als Benutzerdaten eingegeben werden als root Benutzer ausgeführt, so verwenden Sie nicht die sudo Befehl im Skript.

Schließlich note, dass die AWS CLI auf die standardmäßig Amazon Linux AMI-Instanzen vorinstalliert kommt, weshalb Sie die AWS CLI bemerkt noch auf die Instanz installiert wurde trotz Ihrer Benutzerdaten Skript nicht korrekt ausgeführt wird.