0%
الحالة (State): القطعة المحورية والأكثر هشاشة

حالة Terraform

الملف الوحيد الذي سيكلّفك فقدانه عطلة نهاية الأسبوع.

10-15 دقيقة

الحالة (State): القطعة المحورية والأكثر هشاشة

يعمل شخصان على البنية التحتية نفسها. يضيف الأول طابور رسائل، ويطبّق التغيير، ثم يذهب لتناول الغداء. أما الثاني فقد استنسخ المستودع قبل ساعة، ومعه ملف terraform.tfstate المحلي الخاص به الذي لا يعرف شيئًا عن الطابور. يضيف قاعدة بيانات ويطبّق التغيير. حالته لا تتضمن الطابور، فيستنتج Terraform أن الطابور غير موجود وأنه لا شأن له به، إلى أن يشغّل أحدهم يومًا الأمر terraform destroy على إحدى الحالتين، فيدمّر نصف البنية التحتية ويترك النصف الآخر يتيمًا، يتعذّر التحكم فيه، ومع ذلك تُحتسب عليه الفواتير.

لا يحدث هذا السيناريو لأن الناس مهملون. بل يحدث لأن الحالة الافتراضية ملف محلي، والملف المحلي غير مرئي للآخرين. الحالة ليست ذاكرة مؤقتة ولا سجلًّا: إنها الشيء الوحيد الذي يربط سطرًا من شيفرتك بكائن حقيقي لدى المزوّد. وبدونها لا يعرف Terraform أن aws_s3_bucket.artefacts يقابل الحاوية skillverse-artefacts-demo-4821؛ فيستنتج أنه ينبغي إنشاءها، ويحاول ذلك.

ما وظيفة الحالة بالضبط

تحتوي الحالة، لكل مورد مُدار، على عنوانه في شيفرتك، ومعرّفه لدى المزوّد، ونسخة من جميع سماته لحظة آخر عملية. انظر إلى مقتطف منها:

{
  "version": 4,
  "terraform_version": "1.9.5",
  "serial": 12,
  "lineage": "8f3e0a1c-77b2-4c9a-9d10-2b6f4e5a1c33",
  "resources": [
    {
      "mode": "managed",
      "type": "aws_s3_bucket",
      "name": "artefacts",
      "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
      "instances": [
        {
          "attributes": {
            "arn": "arn:aws:s3:::skillverse-artefacts-demo-4821",
            "bucket": "skillverse-artefacts-demo-4821",
            "id": "skillverse-artefacts-demo-4821"
          }
        }
      ]
    }
  ]
}

التعليقات

التعليقات مدعومة عبر GitHub Discussions

سجّل الدخول باستخدام GitHub للمشاركة في النقاش

تم نسخ الرابط!