টেরেফর্ম কনফিগারেশন কীভাবে পরীক্ষা করবেন?


37

আপনার যদি একটি টেরেরফর্ম কনফিগারেশন থাকে যার মাঝারি মানের জটিলতা ছিল, তবে আপনি কীভাবে কনফিগারেশনটির আশেপাশে পরীক্ষা লিখবেন যা ধারাবাহিক সংহতকরণ / ধারাবাহিক বিতরণ পাইপলাইনের অংশ হিসাবে কার্যকর করা যেতে পারে?

উদাহরণস্বরূপ, আপনার কাছে একটি মাল্টি-ক্লাউড কনফিগারেশন থাকতে পারে যা নিম্নলিখিত পছন্দসই স্থিতিটি নির্দিষ্ট করে:

  • আজুরে ডকারকে হোস্ট করার জন্য আজুর কনটেইনার পরিষেবাদি
  • আজুর ব্লব স্টোরেজ
  • এসকিউএল অ্যাজুরে
  • এডাব্লুএসে ডকার হোস্ট করার জন্য ইসি 2 কনটেইনার পরিষেবা
  • আমাজন এস 3 স্টোরেজ পরিষেবা
  • অ্যামাজন আরডিএস এসকিউএল সার্ভার ডাটাবেস

সম্ভাব্যভাবে terraform applyউপরের স্ক্র্যাচ থেকে তৈরি হতে পারে, বা আংশিক মোতায়েনের অবস্থা থেকে উপরের কাঙ্ক্ষিত অবস্থানে রূপান্তর হতে পারে।

আমি জানি যে টেরামফর্ম তার কার্য সম্পাদন পরিকল্পনার পর্যায়ে এবং অ্যাপ্লিকেশন পর্যায়ে বিভক্ত হয়ে যায় যা আসলে লক্ষ্য স্থাপত্যে পরিবর্তন করে। এটি কার্যকর করার পরিকল্পনার বিরুদ্ধে পরীক্ষা লিখতে ব্যবহার করা যেতে পারে, যদি তাই হয় তবে এগুলি লেখার জন্য ফ্রেমওয়ার্ক রয়েছে?


হতে পারে দরকারী: github.com/hashicorp/terraform/issues/5059
তেনসিবাই

আকর্ষণীয় সত্যই, সম্ভবত উত্তর যোগ্য।
রিচার্ড স্লেটার

আমি নিজেকে
টেরফর্মটি

উত্তর:


20

টেরফর্মটিতে এই সংহত করার জন্য বর্তমানে কোনও সম্পূর্ণ সমাধান নেই, তবে কিছু বিল্ডিং ব্লক রয়েছে যা পৃথক প্রোগ্রামিং ভাষায় পরীক্ষার লেখায় সহায়তা করতে কার্যকর হতে পারে।

টেরাফর্ম জেএসএন ফর্ম্যাটে স্টেট ফাইল তৈরি করে যা নীতিগতভাবে টেরফর্ম কী তৈরি করেছে সে সম্পর্কে নির্দিষ্ট ডেটা উত্তোলনের জন্য বহিরাগত প্রোগ্রামগুলি ব্যবহার করতে পারে। যদিও এই ফর্ম্যাটটি এখনও আনুষ্ঠানিকভাবে স্থিতিশীল হিসাবে বিবেচিত হয় না, বাস্তবে এটি পর্যাপ্ত পরিমাণে পরিবর্তিত হয় যে লোকেরা এটির সাথে সফলভাবে সংহত হয়েছে, স্বীকার করে যে তারা টেরফর্ম আপগ্রেড করার সাথে সাথে তাদের সামঞ্জস্য করার প্রয়োজন হতে পারে।

কী কৌশল এখানে উপযুক্ত তা আপনি যা পরীক্ষা করতে চান ঠিক তার উপর অনেক নির্ভর করে। উদাহরণ স্বরূপ:

  • এমন একটি পরিবেশের ভার্চুয়াল সার্ভার আপ কাটনা এর দশকে, মত সরঞ্জাম Serverspec এই সার্ভারগুলিকে দৃষ্টিকোণ থেকে পরীক্ষা চালানোর জন্য ব্যবহার করা যাবে। এটি হয় ব্যান্ড আউট-অফ-ব্যান্ড প্রক্রিয়া ব্যবহার করে টেরাফর্ম থেকে পৃথকভাবে চালানো যেতে পারে, বা টেরফর্মের অংশ হিসাবে remote-execপ্রভিশনার ব্যবহার করে প্রয়োগ করুন । এটি "সার্ভারটি ডাটাবেসে পৌঁছতে পারে?" এর মতো প্রশ্নের যাচাইকরণের অনুমতি দেয় তবে "উদাহরণস্বরূপ সুরক্ষা গোষ্ঠীটি কি যথেষ্ট পরিমাণে নিষিদ্ধ?" এর মতো প্রশ্নের জন্য উপযুক্ত নয়, যেহেতু দৃust়ভাবে পরীক্ষা করাতে উদাহরণের বাইরে থেকে ডেটা অ্যাক্সেসের প্রয়োজন হয়।

  • বিদ্যমান টেস্ট ফ্রেমওয়ার্ক (যেমন রুবির জন্য আরএসপেক, unittestপাইথনের জন্য ইত্যাদি) ব্যবহার করে পরীক্ষাগুলি লেখা সম্ভব যা Terrafor রাজ্য ফাইল থেকে প্রাসঙ্গিক সংস্থান আইডি বা ঠিকানা সংগ্রহ করে এবং তারপরে সংস্থানসমূহের ডেটা পুনরুদ্ধার করতে প্রাসঙ্গিক প্ল্যাটফর্মের এসডিকে ব্যবহার করে এবং তা দৃ as়ভাবে জানায় যে তারা আশা হিসাবে সেট আপ করা হয়। এটি পূর্ববর্তী ধারণার আরও সাধারণ রূপ যা পরীক্ষার অধীনে পরিকাঠামোগত বাহিনীর বাইরে হোস্টের দৃষ্টিভঙ্গি থেকে পরীক্ষা চালানো হয় এবং এইভাবে দৃser়তার জন্য তথ্যগুলির একটি বিস্তৃত সেট সংগ্রহ করতে পারে।

  • আরও পরিমিত প্রয়োজনের জন্য, কেউ বিশ্বাস করতে বেছে নিতে পারে যে টেরেফর্ম রাজ্যটি বাস্তবতার সঠিক প্রতিনিধিত্ব (বহু ক্ষেত্রে বৈধ অনুমান) এবং কেবল তার উপর সরাসরি দৃsert়ভাবে দৃsert়ভাবে দাবি করে। এটি সাধারণ "লিন্টের মতো" মামলার ক্ষেত্রে সবচেয়ে উপযুক্ত, যেমন ব্যয়-বরাদ্দের উদ্দেশ্যে সঠিক সংস্থান ট্যাগিং স্কিম অনুসরণ করা হচ্ছে তা যাচাই করা।

প্রাসঙ্গিক টেরেরফর্ম গিথুব ইস্যুতে এ সম্পর্কে আরও কিছু আলোচনা রয়েছে ।

টেরফর্মের সর্বশেষতম সংস্করণগুলিতে কোনও খেলনাবিহীন অ্যাপ্লিকেশনটির জন্য রিমোট ব্যাকএন্ড ব্যবহার করার জন্য দৃ strongly়ভাবে সুপারিশ করা হয়, তবে এর অর্থ এই যে রাষ্ট্রীয় ডেটা স্থানীয় ডিস্কে সরাসরি উপলভ্য নয়। তবে terraform state pullকমান্ডটি ব্যবহার করে এটির একটি স্ন্যাপশট রিমোট ব্যাকএন্ড থেকে পুনরুদ্ধার করা যেতে পারে , যা JSON- ফর্ম্যাট করা স্টেট ডেটা স্টাডআউটে প্রিন্ট করে যাতে এটি একটি কলিং প্রোগ্রাম দ্বারা ক্যাপচার এবং পার্স করা যায়।


12

এই প্রশ্নের আপডেট হিসাবে, এখন রান্নাঘর-টেরাফর্ম রয়েছে যা উত্পাদন পরিবেশকে ভঙ্গ না করে Terraform কনফিগারেশন ফাইলগুলির পরীক্ষার অনুমতি দেয়। ভান্ডারটিতে বিভিন্ন Terraform সরবরাহকারীদের জন্য কয়েকটি উদাহরণ অন্তর্ভুক্ত রয়েছে।


12

আমরা সম্প্রতি অবকাঠামো কোড পরীক্ষার জন্য আমাদের সুইস আর্মি ছুরি সর্সযুক্ত টেরেটেস্ট খুলি ।

আজ, আপনি সম্ভবত আপনার সমস্ত পরিকাঠামো কোডটি ম্যানুয়ালি মোতায়েন, বৈধকরণ এবং অবর্ণন দ্বারা পরীক্ষা করছেন। টেরেটেস্ট আপনাকে এই প্রক্রিয়াটি স্বয়ংক্রিয় করতে সহায়তা করে:

  1. গো পরীক্ষায় লিখুন।
  2. প্রকৃত পরিবেশে প্রকৃত অবকাঠামো (যেমন, সার্ভার) স্থাপন করতে আপনার প্রকৃত আইএসি সরঞ্জামগুলি (যেমন, টেরফর্ম, প্যাকার ইত্যাদি) কার্যকর করতে টেরেটেস্টে সহায়তাকারীদের ব্যবহার করুন (যেমন, এডাব্লুএস)।
  3. টেরেটেস্টের সাহায্যকারীদের এইচটিটিপি অনুরোধ, এপিআই কল, এসএসএইচ সংযোগ ইত্যাদির মাধ্যমে সেই পরিবেশে সঠিকভাবে কাজ করে তা যাচাই করতে ব্যবহার করুন Use
  4. পরীক্ষার শেষে সমস্ত কিছু প্রকাশ করার জন্য টেরেস্টে সহায়কদের ব্যবহার করুন।

এখানে কিছু টেরারফর্ম কোডের জন্য উদাহরণ পরীক্ষা রয়েছে:

terraformOptions := &terraform.Options {
  // The path to where your Terraform code is located
  TerraformDir: "../examples/terraform-basic-example",
}

// This will run `terraform init` and `terraform apply` and fail the test if there are any errors
terraform.InitAndApply(t, terraformOptions)

// At the end of the test, run `terraform destroy` to clean up any resources that were created
defer terraform.Destroy(t, terraformOptions)

// Run `terraform output` to get the value of an output variable
instanceUrl := terraform.Output(t, terraformOptions, "instance_url")

// Verify that we get back a 200 OK with the expected text
// It can take a minute or so for the Instance to boot up, so retry a few times
expected := "Hello, World"
maxRetries := 15
timeBetweenRetries := 5 * time.Second
http_helper.HttpGetWithRetry(t, instanceUrl, 200, expected, maxRetries, timeBetweenRetries)

এগুলি ইন্টিগ্রেশন টেস্ট এবং আপনি যা পরীক্ষা করছেন তার উপর নির্ভর করে 5 থেকে 50 মিনিট সময় নিতে পারে। এটি দ্রুত নয় (যদিও ডকার এবং পরীক্ষার ধাপগুলি ব্যবহার করে আপনি কিছু জিনিস বাড়িয়ে দিতে পারেন), এবং আপনাকে পরীক্ষাগুলি নির্ভরযোগ্য করে তোলার জন্য কাজ করতে হবে, তবে এটি সময়ের পক্ষে উপযুক্ত।

পরীক্ষা করে দেখুন Terratest রেপো দস্তাবেজ এবং পরিকাঠামো কোডের বিভিন্ন ধরনের উদাহরণ প্রচুর এবং তাদের জন্য সংশ্লিষ্ট পরীক্ষার জন্য।


1
আমি আরও একটি বিশদভাবে টেরেটেস্টের সাথে আমার উদাহরণ প্রকল্পগুলির পরীক্ষার মধ্য দিয়ে একটি ব্লগ পোস্ট লিখেছি: ब्राइटফাম.কম / ব্লগ / / । এটি কারও পক্ষে মূল্যবান হতে পারে। চিয়ার্স, রব!
রব মরগান

টেরেস্টের বড় ভক্ত!
jlucktay

7

উল্লিখিত অন্যান্য সমস্ত অপশন ছাড়াও, আমি উল্লেখ করতে চাই যে ইনস্পেক ২.০ ক্লাউড প্রোভাইডার এপিআইয়ের জন্য সমর্থন যোগ করেছে। মূলত, আপনি টেরাফর্মের সাথে আইএসি লেখা চালিয়ে যেতে পারেন, তারপরে আপনার মেঘের উত্সের জন্য ইনস্পেকের সাথে কমপ্লিয়েন্সী চেক লিখতে পারেন। এছাড়াও, ইনস্পেক স্বতন্ত্র মেশিনগুলির জন্য লেখার পরীক্ষাগুলি সমর্থন করে যদি আপনার কখনও এটির প্রয়োজন হয়।

টেরাপের সাথে কীভাবে ইন্সপেক্ট ব্যবহার করবেন সে সম্পর্কে ক্রিস্টোফ হার্টম্যানের (ইনস্পেকের সহ-স্রষ্টা) একটি নিবন্ধ এখানে রয়েছে: https://lollyrock.com/articles/inspec-terraform/


5

অ্যাউস-সাইডে https://github.com/k1LoW/awspec রয়েছে - terraform.state এবং পরীক্ষায় খাওয়ানো সম্ভব হবে, Wheter terraformটি সঠিকভাবে প্রয়োগ হয়েছে।

তবে আমি মনে করি, নিম্ন স্তরের সরঞ্জামটি পরীক্ষা করার বাইরেও আপনি ব্যবহার করেছেন, পুরো অবকাঠামোগত কীভাবে পরীক্ষা করা যায় সে সম্পর্কে চিন্তা করা সম্ভবত এটি একটি ভাল ধারণা।

আমরা এই ধারণাটি সম্পর্কে এখানে আলোচনা করছি:

https://github.com/DomainDrivenArchitecture/dda-cloudspec/blob/development/README.md

সামনে আক্রমণকারীদের পরীক্ষার জন্য, আমি সমাধান ব্যবহারের জন্য প্রস্তুত জানি না ...

আমরা কিছু একটি মিশ্রণ ব্যবহার পরীক্ষায় করেনি terraform plan -out=plan.dumpএবং grepউপাদান নামের অনুপস্থিতি জন্য। আরও অ্যাক্সেসযোগ্য পরিকল্পনার ফর্ম্যাটটি নিয়ে এখানে আলোচনা রয়েছে: github.com/hashicorp/terraform/issues/11883

তবে এই মুহুর্তে আমরা আমাদের অবকাঠামোর গুরুত্বপূর্ণ অংশগুলির জন্য একটি ম্যানুয়াল পরিকল্পনা পর্যালোচনা প্রক্রিয়াটি ব্যবহার করছি।


4
লক্ষ্যটি হ'ল টেরাফর্ম কনফিগারেশনের পরিবর্তনগুলি প্রত্যাশিত প্রয়োজনীয়তাগুলি ভঙ্গ করবে না, একবার এটি খুব দেরী করে মোতায়েন করা হয়েছে, সর্বোপরি আপনার কোনও ব্যর্থতা দেখা গেছে যে কোনও ডিবি যেখানে করা উচিত নয় সেখানে সরিয়ে দেওয়া হয়েছে, তবে আপনি ইতিমধ্যে লক্ষ্যবস্তু পরিবেশটি ভঙ্গ করেছেন। .. প্রশ্নটি টেরাফর্ম কোডটি পরীক্ষা করার বিষয়ে, শেষের ফলাফলটি পরীক্ষা না করে, ইউনিট পরীক্ষা বনাম ইন্টিগ্রেশন পরীক্ষার।
তেনসিবাই

ভাল পয়েন্ট ... আক্রমণকারীদের পরীক্ষার জন্য একটি বিভাগ যুক্ত করেছে।
জার্গার

0

গিটহাব ইস্যু থ্রেডে আপাতদৃষ্টিতে প্রস্তাবিত টেরেরফর্মটি পরীক্ষা করার জন্য আমি এই মার্জিত, কম প্রযুক্তি পদ্ধতি দেখেছি । এটি প্রতিটি পরিস্থিতির জন্য উপযুক্ত নয় তবে এটি মডিউল যুক্তি যাচাইয়ের জন্য দুর্দান্ত।

একটি রুট মডিউল তৈরি করুন যা পরীক্ষার অধীনে মডিউলটি অন্তর্ভুক্ত করে এবং পরীক্ষা-নিরীক্ষার ফলাফলগুলি যাচাই করে। দুটি ফাইল ব্যবহার করে এখানে একটি সাধারণ উদাহরণ:

  • main.tf যে পরীক্ষা চালাতে হবে
  • simple_module/outputs.tf যা পরীক্ষার অধীনে একটি মডিউল প্রতিনিধিত্ব করে

./main.tf

terraform {
  required_version = ">= 0.12"
}

module "simple_module" {
  source = "./simple_module"
}

locals {
  expected = 1
  got      = module.simple_module.module-returns-1
}

# Test Output
output "expect-1" {
  value = upper(local.expected == local.got)
}

output "expect-other" {
  value = "other" == local.got ? upper(true) : "FALSE. Got ${local.got}"
}

./simple_module/outputs.tf

output "module-returns-1" {
  value = 1
}

পরীক্ষা চালান

terraform init
terraform apply -auto-approve
Apply complete! Resources: 0 added, 0 changed, 0 destroyed.

Outputs:

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