برنامه نویسی

terraform ضمنی در مقابل وابستگی های صریح

درک وابستگی در Terraform

هنگام تعریف زیرساخت ها در Terraform ، منابع اغلب به یکدیگر متکی هستند. دو روش برای رسیدگی به این وابستگی ها وجود دارد:

  • ضمنی: Terraform به طور خودکار ترتیب ایجاد منابع را بر اساس وابستگی ها تعیین می کند
  • صریح: ما تعریف می کنیم که چه سفارش باید صریح باشد

در این پست وبلاگ مثالهایی را برای هر دو مشاهده خواهید کرد و همچنین تفاوت های بین وابستگی های صریح و ضمنی Terraform را درک می کنید.

ضمنی

Terraform هنگامی که یک منبع به ویژگی های منبع دیگری اشاره می کند ، به طور خودکار وابستگی های ضمنی را تشخیص می دهد.

resource "aws_lambda_event_source_mapping" "test" {
  event_source_arn  = aws_dynamodb_table.test.stream_arn
  function_name     = aws_lambda_function.test.arn
  starting_position = "LATEST"
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

در اینجا ، Terraform این را می داند aws_lambda_function. این باید قبلاً ایجاد شود aws_lambda_event_source_mapping. این چون contion_name ویژگی به آن بستگی دارد.
همانطور که می بینید نیازی به مشخص کردن دستی نیست بستگی به_ون داردبا این حال ، اشکال زدایی در صورت بروز هرگونه مسئله ، می تواند کمی سخت تر باشد.

صریح

بعضی اوقات ، Terraform وابستگی ها را به درستی تشخیص نمی دهد ، به خصوص هنگام استفاده از روابط غیرمستقیم. در این موارد ، ما از وابستگی های صریح از طریق استفاده می کنیم بستگی به_ون داردبشر

سناریو:
ما باید بسته های پایتون را درون یک لایه لامبدا نصب کنیم.
سپس ، ما می خواهیم قبل از بارگذاری در AWS ، وابستگی های نصب شده را فشرده کنیم.
اگر Terraform یک دستور را اجرا نکند ، ممکن است فرایند zipping قبل از نصب وابستگی ها اجرا شود و باعث استقرار شکسته شود.

data "archive_file" "layer_code" {
  type        = "zip"
  output_path = "/tmp/test.zip"
  source_dir  = "${path.module}/src/functions/test/layer/"

  depends_on = [
    terraform_data.test_lambda_revision  # Ensures dependencies are installed first
  ]
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

اکنون ، Terraform منتظر است test_lambda_revision برای نصب وابستگی ها با استفاده از Docker قبل از اضافه کردن بسته.

چرا وابستگی صریح در اینجا مهم است؟

  • قبل از نصب وابستگی ، از انتقال یک بسته ناقص جلوگیری می کند.
  • ترتیب صحیح اجرای را تضمین می کند حتی اگر Terraform به طور خودکار آن را تشخیص ندهد.
  • از عدم موفقیت در استقرار به دلیل وابستگی های مفقود شده در لامبدا جلوگیری می کند.

در مورد از بین بردن منابع با وابسته های ضمنی در مقابل صریح چیست؟

هنگامی که منابع باید از بین بروند ، Terraform نظم معکوس می کند ، به این معنی که از آن زمان برای وابستگی ضمنی aws_lambda_event_source_mapping بستگی به عملکرد لامبدا دارد ، ابتدا باید لامبدا را از بین ببرد و سپس نقشه برداری منبع رویداد را از بین ببرد.
در مورد نابودی صریح و بستگی به_ون دارد دستور حذف را اجرا می کند. پس از کد_ کد مورد استفاده برای کدگذاری منبع ، به آن بستگی دارد
terraform_data.test_lambda_revision برای نصب بسته ها ، کد_ کد ابتدا حذف می شود که معنی دارد.

پایان

Terraform به طور خودکار وابستگی ها را بر اساس منابع منابع (وابستگی های ضمنی) کنترل می کند ، اما گاهی اوقات ما نیاز به اجرای دستی با استفاده از بستگی به_ن (وابستگی های صریح) داریم.

وابستگی های صریح (بستگی به_ون) ​​در صورت عدم وجود Terraform ممکن است ترتیب صحیح را تشخیص ندهد ، مانند هنگام برخورد با اسکریپت های خارجی ، تولید پرونده یا وابستگی های غیرمستقیم.
هنگام از بین بردن منابع ، هم وابستگی های ضمنی و صریح تضمین می کنند که Terraform منابع را در دنباله صحیح از بین می برد و از خطاهایی که در آن یک منبع قبل از وابستگی های آن حذف می شود ، جلوگیری می کند.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا