टेराफॉर्म की आधिकारिक साइट में, उनके पास इस तरह का एक उदाहरण है (https: //registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_role_policy):

resource "aws_iam_role_policy" "test_policy" {
  name = "test_policy"
  role = aws_iam_role.test_role.id

  # Terraform's "jsonencode" function converts a
  # Terraform expression result to valid JSON syntax.
  policy = jsonencode({
    Version = "2012-10-17"
    Statement = [
      {
        Action = [
          "ec2:Describe*",
        ]
        Effect   = "Allow"
        Resource = "*"
      },
    ]
  })
}

resource "aws_iam_role" "test_role" {
  name = "test_role"

  assume_role_policy = jsonencode({
    Version = "2012-10-17"
    Statement = [
      {
        Action = "sts:AssumeRole"
        Effect = "Allow"
        Sid    = ""
        Principal = {
          Service = "ec2.amazonaws.com"
        }
      },
    ]
  })
}

जहां वे पॉलिसी में रोल आईडी सेट करके एक भूमिका के लिए एक पॉलिसी संलग्न करते हैं, अर्थात्:

role = aws_iam_role.test_role.id

लेकिन इसे इस तरह से सेट करना हमारे टीम प्रोजेक्ट्स में से एक में मेरे काम नहीं आया, मुझे त्रुटियां मिलती रहीं (विवरण यहां देखें टेराफॉर्म द्वारा परिभाषित कार्य भूमिका ECS शेड्यूल किए गए कार्य के लिए ठीक से काम नहीं कर रही है)। आखिरकार, मुझे एहसास हुआ कि मुझे अपनी नीति में इस तरह भूमिका नाम का उपयोग करके इसे सेट करना होगा:

role = aws_iam_role.my_role.name

लेकिन मुझे हमारे अन्य टीम प्रोजेक्ट्स में ऐसे उदाहरण दिखाई देते हैं जहां मेरे सहकर्मी रोल आईडी का उपयोग कर रहे हैं। मुझे आश्चर्य है कि टेराफॉर्म के संदर्भ में आईडी और नाम के बीच अंतर क्या हैं और इसका उपयोग कब करना है।

0
JackOuttaBox 14 फरवरी 2021, 02:56
aws_iam_role के दस्तावेज़ीकरण के अनुसार, id और name विशेषताएँ दोनों "The name of the role" हैं। दोनों में कोई अंतर नहीं लगता। व्यक्तिगत रूप से मैं name का उपयोग करता हूं। (registry.terraform.io/providers/hashicorp /aws/नवीनतम/दस्तावेज़/…)
 – 
m_callens
14 फरवरी 2021, 03:21

1 उत्तर

सबसे बढ़िया उत्तर

जैसा कि पहले ही बताया जा चुका है, id और name के बीच कोई अंतर नहीं है। आप इसे केवल अपनी भूमिका आउटपुट करके देख सकते हैं:

output "test" {
  value = aws_iam_role.test_role
}

जो दर्शाता है कि id और name दोनों test_role पर सेट हैं:

test = {
  "arn" = "arn:aws:iam::xxxxxx:role/test_role"
  "assume_role_policy" = "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Sid\":\"\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"ec2.amazonaws.com\"},\"Action\":\"sts:AssumeRole\"}]}"
  "create_date" = "2021-02-14T01:25:48Z"
  "description" = ""
  "force_detach_policies" = false
  "id" = "test_role"
  "max_session_duration" = 3600
  "name" = "test_role"
  "name_prefix" = tostring(null)
  "path" = "/"
  "permissions_boundary" = tostring(null)
  "tags" = tomap({})
  "unique_id" = "AROASZHPM3IXXHCEBQ6OD"
}
1
Marcin 14 फरवरी 2021, 04:28
1
आपके उत्तर को पढ़ने पर, मैं वापस गया और अपने प्रतिबद्ध इतिहास की सावधानीपूर्वक जाँच की और इतिहास का निर्माण किया, और महसूस किया कि मेरे द्वारा की गई किसी मानवीय त्रुटि के कारण role.id काम नहीं कर रहा था। और मैंने परीक्षण किया कि वास्तव में role.id और role.name समान हैं। धन्यवाद!
 – 
JackOuttaBox
14 फरवरी 2021, 08:23