2017-10-03 11 views
1

Wie übermittele ich Parameter Eingabedaten zu userdata in AWS cloudformation. Beispiel: Ich habe einen Parameter EnvType, bei dem ich "qa" als Eingabe für diesen Parameter übergeben werde, während CFT läuft. Ich möchte, dass dieser Parameterwert "qa" gelesen und an Benutzerdaten übergeben wird, damit ich ihn auf die Instanzplatte schreiben kann.AWS CloudFormation userdata passing

Parameters: { 
    "EnvType": { 
     "Description": "Environment type", 
     "Type": "String", 
     "AllowedValues": [ 
      "prod", 
      "qa" 
     ] 
    } 

Ich habe versucht, dies in Benutzerdaten verwenden als:

export STACK_TYPE='", 
{ 
"Ref": "EnvType" 
}, 
"'\n", 
"echo \"$STACK_TYPE\" > stacktypes\n 

Wo ich diese Eingabe von EnvType in eine Datei mit dem Namen stacktypes in der Instanz anhängen wollte.

Antwort

1

Sie müssen Fn::Join verwenden, um die Benutzerdatenstrings mit Ergebnissen aus anderen intrinsischen Funktionen von CloudFormation (wie Ref) zu verbinden. Hier ist ein exemple, wie es gemacht wird:

... 
    "MyInstance": { 
    "Type": "AWS::EC2::Instance", 
    "Properties": { 
     "UserData": { 
     "Fn::Base64": { 
      "Fn::Join": [ 
      "", 
      [ 
       "#cloud-config\n\nrepo_upgrade: all\n\n\nwrite_files:\n- path: /root/init.sh\n owner: root:root\n permissions: '0755'\n content: |\n #!/bin/bash\n\n EC2_INSTANCE_ID=`wget -q -O - http://169.254.169.254/latest/meta-data/instance-id`\n aws cloudformation signal-resource --stack-name ", 
       { 
       "Ref": "AWS::StackName" 
       }, 
       " --status SUCCESS --logical-resource-id AutoScalingGroup --unique-id $EC2_INSTANCE_ID --region ", 
       { 
       "Ref": "AWS::Region" 
       } 
      ] 
      ] 
     } 
     } 
     ... 
    } 
    } 
... 

Dies ist eine mühsame Aufgabe sein kann, haben wir ein Werkzeug intern die Erzeugung von Userdata in Angriff zu nehmen, aber ich weiß, es gibt Open-Source-Tools, die helfen kann (zB: https://github.com/cloudtools/troposphere).

0

Sie können den Stapelparameter an eine Datei in Ihrer Instanz übergeben/anhängen. Wenn Sie Parameter wie diese haben,

Parameters: { 
"EnvType": { 
    ... 
} 

können Sie versuchen, die Userdata unten in die Instanz-Eigenschaften hinzuzufügen.

"Properties": { 
     ... 
     "UserData": { 
     "Fn::Base64": { 
      "Fn::Join": [ 
      "", 
      [ 
       "#!/bin/bash -xe\", 
       "echo ", 
       { 
       "Ref": "EnvType" 
       }, 
       " >> /path/yourfile\n" 
      ] 
      ] 
     } 
     } 
    } 

Dies wird die EnvType Parameter in die Datei /path/yourfile in Ihrer Instanz anhängen.

Verwandte Themen