টেরফর্ম: কোনও সংস্থার জন্য একাধিক ট্যাগ নির্দিষ্ট করার জন্য কি সংক্ষিপ্ত বাক্য গঠন রয়েছে?


10

কোনও সংস্থার সাথে একাধিক ট্যাগ সংযুক্ত করতে, আমি বর্তমানে একাধিক tagব্লক ব্যবহার করছি :

resource "aws_autoscaling_group" "instance" {
  ...

  tag {
    key                 = "Name"
    value               = "${var.cluster_prefix}"
    propagate_at_launch = true
  }

  tag {
    key                 = "Owner"
    value               = "${var.tag_Owner}"
    propagate_at_launch = true
  }

  tag {
    key                 = "Project"
    value               = "${var.tag_Project}"
    propagate_at_launch = true
  }
}

এটি কাজ করে তবে আমি আরও অবাক হই যে আরও বেশি সংক্ষিপ্ত বাক্য গঠন আছে কিনা I propagate_at_launchপ্রতিটি ট্যাগের জন্য আপনাকে নির্দিষ্ট করতে হবে বলে এটি কিছুটা ত্রুটিযুক্ত ।

আপডেট: প্রশ্নটি Terrafrom v0.12 প্রকাশের আগে লেখা হয়েছিল। তার পর থেকে ডায়নামিক নেস্টেড ব্লকগুলির সাহায্যে উন্নতি হয়েছে ( নীচে আমার উত্তর দেখুন )।

উত্তর:


7

একটি জন্য auto-scaling-groupএটা হল সবচেয়ে সংক্ষিপ্ত বাক্য গঠন পাওয়া যায়।

বেশিরভাগ অন্যান্য সংস্থার জন্য আপনি tagsসিনট্যাক্সটি ব্যবহার করে যা দেখতে দেখতে:

tags {
  Key1 = "value1"
  Key2 = "value2"
}

3

টেরামফর্ম v0.12 ডায়নামিক নেস্টেড ব্লকগুলির জন্য সমর্থন যুক্ত করেছে। নতুন বৈশিষ্ট্যগুলি সম্পর্কে তাদের ব্লগ পোস্ট থেকে নিম্নলিখিত উদাহরণটি উত্পন্ন হয়েছে (বিভাগটি ডায়নামিক নেস্টেড ব্লকগুলি দেখুন ):

locals {
  standard_tags = {
    Name    = var.cluster_prefix
    Owner   = var.tag_Owner
    Project = var.tag_Project
  }
}

resource "aws_autoscaling_group" "example" {
  # ...

  dynamic "tag" {
    for_each = local.standard_tags

    content {
      key                 = tag.key
      value               = tag.value
      propagate_at_launch = true
    }
  }
}

2

আরেকটি বিকল্প হ'ল terraform-null-labelমডিউলটি ব্যবহার করা । এটি tagsস্ট্যান্ডার্ড টেরারফর্ম মানচিত্র হিসাবে পরিচিত একটি ভেরিয়েবল পাস করার পক্ষে সমর্থন করে । মডিউল তারপরে একটি আউটপুট নির্গত করে tags_as_list_of_mapsযার মধ্যে আপনি যে ফর্ম্যাটটি করতে চান তাতে ট্যাগ থাকে। তবে এই মডিউলটি ব্যবহার করার আরও একটি ভাল কারণ হ'ল একটি নির্দিষ্ট কনভেনশন অনুসরণ করে এমন সংস্থানীয় সংস্থার নামগুলির একটি সেট তৈরি করা।

উদাহরণস্বরূপ, আপনি এটি করতে পারেন:

module "example" {
  source     = "git::https://github.com/cloudposse/terraform-null-label.git?ref=master"
  namespace  = "eg"
  stage      = "prod"
  name       = "bastion"
  tags       = { 
                 "BusinessUnit" = "XYZ" 
                 "Snapshot" = "true"
               }
}

সুতরাং আপনার উদাহরণ থেকে, আমরা তখন এর মতো কিছু লিখতে পারি:

resource "aws_autoscaling_group" "instance" {
  ...
  name = "${module.example.id}"
  ...
  tags = "${module.example.tags_as_list_of_maps}"
  ...
}

দ্রষ্টব্য: আমি nameকীভাবে জেনারেট করতে পারি তা দেখানোর জন্য ক্ষেত্রটি যুক্ত করেছি


প্রতিটি রিসোর্সকে "নাম" ইউনিক করার সর্বোত্তম উপায় কী হবে? আপনি যদি রিসোর্সগুলির প্রতিটি "নাম" নাল-লেবেল মডিউলটি ব্যবহার করেন তবে একই। আপনি যদি নিজের সাবনেটগুলির নাম-প্রাইভেট-সাবনেটের মতো প্রত্যয় সহ নামকরণ করতে চান? নাল-লেবেল এটি পরিচালনা করতে পারে এমন কোনও উপায় আছে?
ইজাক

0

aws_autoscaling_groupএখন ট্যাগের একটি তালিকা সমর্থন করে ( https://www.terraform.io/docs/providers/aws/r/autoscaling_group.html#tags )। তবে এটি অন্যান্য টের্রাফর্ম সংস্থানগুলির বাক্য গঠন থেকে কিছুটা পৃথক দেখাচ্ছে:

tags = [
  {
    key                 = "explicit1"
    value               = "value1"
    propagate_at_launch = true
  },
  {
    key                 = "explicit2"
    value               = "value2"
    propagate_at_launch = true
  },
]

এটি ইন্টারপোলেশনের মাধ্যমে গতিশীলভাবে ট্যাগগুলিও তৈরি করতে দেয়।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.