هل هناك طريقة لوضع علامة على حجم الجذر عند التهيئة من قالب التشكيل السحابي?

StackOverflow https://stackoverflow.com//questions/24026425

سؤال

أقوم بإنشاء مثيل من خلال البرنامج النصي لتشكيل السحابة.

الطريقة الوحيدة التي وجدت لإرفاق قسم نظام التشغيل كان من خلال" بلوكديفيسمابينغز " الملكية.(لقد حاولت استخدام خاصية "وحدات التخزين" من قبل ، ولكن لا يمكن تركيب المثيل ، أخبرني النظام أنه تم تعيين/ديف / سدا بالفعل وتراجع إنشاء المثيل)

هنا هو الجزء ذي الصلة من القالب الخاص بي:

  "Resources" :
  {
    "Ec2Instance" :
    {
      "Type" : "AWS::EC2::Instance",
      "Properties" :
      {
        "BlockDeviceMappings" :
        [{
          "DeviceName" : "/dev/sda",
          "Ebs" :
          {
            "VolumeSize" : { "Ref" : "RootVolumeSize" },
            "SnapshotId" :
            { "Fn::FindInMap" : [ "RegionMap",
              { "Ref" : "AWS::Region" }, "RootVolumeSnapshotId" ]
            }
          }
        }],
        ...
       }
     }

سؤالي هو ، كيف يمكنني وضع علامة على حجم إبس ، أنني خلق هنا مع" بلوكديفيسمابينغز " الملكية?لم أجد الحل الواضح.

شكرا.

هل كانت مفيدة؟

المحلول

كان قادرا على جعلها تعمل من خلال واجهة أوس كلي ، دور إيام ، و وسيرداتا التهيئة.

تمت إضافة هذا إلى AWS::EC2::Instance:Properties:UserData

{ "Fn::Base64" : { "Fn::Join" : [ "\n", [
  "#!/bin/bash",
  "set -eux",
  "exec > >(tee /tmp/user-data.log | logger -t user-data -s 2>/dev/console) 2>&1",
  { "Fn::Join" : [ "", [
    "AWS_STACK_NAME='", { "Ref" : "AWS::StackName" }, "'"
  ]]},
  { "Fn::Join" : [ "", [
    "AWS_ROOT_VOLUME_SNAPSHOT_ID='",
      { "Fn::FindInMap" :
         [ "RegionMap", { "Ref" : "AWS::Region" }, "RootVolumeSnapshotId" ]},
      "'"
  ]]},
  "AWS_INSTANCE_ID=$( curl http://169.254.169.254/latest/meta-data/instance-id )",
  "",
  "AWS_HOME=/opt/aws",
  "AWS_BIN_DIR=\"${AWS_HOME}/bin\"",
  "export EC2_HOME=\"${AWS_HOME}/apitools/ec2\"",
  "export JAVA_HOME=/etc/alternatives/jre_1.7.0",
  "",
  "ROOT_DISK_ID=$(",
  "    \"${AWS_BIN_DIR}/ec2-describe-volumes\" \\",
  "        --filter \"attachment.instance-id=${AWS_INSTANCE_ID}\" \\",
  "        --show-empty-fields \\",
  "      | grep '^VOLUME' \\",
  "      | awk '{printf \"%s,%s\\n\", $4, $2}' \\",
  "      | grep '^${AWS_ROOT_VOLUME_SNAPSHOT_ID}' \\",
  "      | cut --delimiter=, --fields=2",
  "    exit ${PIPESTATUS[0]}",
  "  )",
  "\"${AWS_BIN_DIR}/ec2-create-tags \\",
  "  \"${ROOT_DISK_ID}\" \\",
  "  --tag \"Name=${AWS_STACK_NAME}-root\"",
  ""
]]}}

يجب أيضا إضافة مرجع إلى دور إدارة الهوية والولوج يمكنه وصف وحدات التخزين وإنشاء العلامات.

تمت إضافة هذا إلى قسم "الموارد" :

"InstanceProfile" :
{
  "Type" : "AWS::IAM::InstanceProfile",
  "Properties" :
  {
    "Path" : "/",
    "Roles" : [ "ec2-tag-instance" ]
  }
}

المشار إليها هذا الملف في Instance الموارد:

"Ec2Instance" :
{
  "Type" : "AWS::EC2::Instance",
  "Properties" :
  {
    ...
    "IamInstanceProfile" : {"Ref" : "InstanceProfile"},
    ...
  }
}

و في IAM واجهة المستخدم إنشاء دور جديد يسمى ec2-tag-instance, ، وتعيين هذه السياسة:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ec2:Describe*",
        "ec2:CreateTags"
      ],
      "Resource": "*"
    }
  ]
}

وقال هذا ، سيكون أجمل بكثير إذا BlockDeviceMappings:Ebs قد دعمت Tags عنصر.

نصائح أخرى

شكرا أليكس،

لقد وجدت أن هناك علامة اقتباس مزدوجة مفقودة بعد ec2-إنشاء العلامات :)

  "\"${AWS_BIN_DIR}/ec2-create-tags\" \\",
  "  \"${ROOT_DISK_ID}\" \\",
  "  --tag \"Name=${AWS_STACK_NAME}-root\"",

بالإضافة إلى ذلك، إذا لم تكن المثيلات موجودة في المنطقة الافتراضية us-east-1، فيرجى أيضًا تحديد "-- المنطقة المنطقة" في ال ec2-إنشاء العلامات و ec2-وصف-وحدات التخزين الأوامر.

إذا تم وضع علامة على مكدس Cloudformation الخاص بك وتريد مجلدات EC2 المرفقة لنسخ العلامات من المكدس، يمكنك استخدام قيمة UserData أدناه.

giveacodicetagpre.

  1. اكتب جميع stdout و stderr إلى ملف لتصحيح الأخطاء:

    exec> exec> / tmp/part-001.log 2> & 1

  2. (يتطلب الإذن) احصل على العلامات من المكدس:

    TAGS=$(aws cloudformation describe-stacks --stack-name ${AWS::StackName} --query 'Stacks[0].Tags' --region ${AWS::Region})

  3. احصل على معرف مثيل EC2 من نقطة النهاية الوصفية:

    EC2_INSTANCE_ID=$(curl -s http://169.254.169.254/latest/meta-data/instance-id)

  4. (يتطلب الإذن) احصل على معرفات EBS:

    EBS_IDS=$(aws ec2 describe-volumes --filters Name=attachment.instance-id,Values="$EC2_INSTANCE_ID" --region ${AWS::Region} --query 'Volumes[*].[VolumeId]' --out text | tr "\n" " ")

  5. (يتطلب الإذن) إضافة علامات إلى أحجام EBS: aws ec2 create-tags --resources $EBS_IDS --tags "$TAGS" --region ${AWS::Region}

  6. علامات تنسيق ECS:

    TAGS=$(echo $TAGS | tr "Key" "key" | tr "Value" "value")

  7. (يتطلب الإذن) علامة كتلة ECS:

    aws ecs tag-resource --resource-arn arn:aws:ecs:${AWS::Region}:${AWS::AccountId}:cluster/${EcsClusterName} --tags "$TAGS"

  8. يجب أن تبدو السياسة مثل هذا:

    giveacodicetagpre.

يمكنك استخدام قالب Cloudformation لإنشاء موارد مثل قاعدة الحدث CloudWatch و Lambda.يمكن أن يبدأ استدعاء Lambda ليس فقط عند وجود حدث إنشاء مثيل ولكن عندما تحدث التحديثات على العلامات المثلى.

هذا هو ما فعلته في ec2 usddata الخاص بي.أعتقد أنها أبسط بكثير من الإجابة أعلاه.

giveacodicetagpre.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top