2017-10-03 11 views
1

AWSの雲の形でユーザー入力データをパラメータ入力する方法を教えてください。 例:CFTを実行しているときに、このパラメータの入力として「qa」を渡すパラメータEnvTypeがあります。このパラメータ値 "qa"を読み取ってuserdataに渡して、それをインスタンスディスクに書き込むことができます。 AWS CloudFormationのユーザーデータの受け渡し

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

は私がように、ユーザデータでこれを使用してみました:私はインスタンス内stacktypesという名前のファイルにEnvTypeのこの入力を追加したい

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

答えて

1

は、あなたが実際にCloudFormationの他の組み込み機能(例えばRefなど)からの結果を使用してユーザデータ列を「参加」するFn::Joinを使用する必要があります。ここではどのように行うのがexempleだ:

... 
    "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" 
       } 
      ] 
      ] 
     } 
     } 
     ... 
    } 
    } 
... 

これは面倒な作業になることができ、我々はUserDataのの世代に取り組むために、内部的なツールを開発したが、私は助けることができるオープンソースのツール(例:https://github.com/cloudtools/troposphere)がある知っています。

0

スタックパラメータをインスタンス内のファイルに渡す/追加することができます。 あなたは、このようなパラメータを持っている場合は、

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

あなたは、インスタンスのプロパティに以下のUserDataを追加しようとすることができます。

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

これはあなたのインスタンス内のファイル/path/yourfileEnvTypeパラメータを追加します。

関連する問題