টেরফর্ম: কেবলমাত্র একটি টিএফ ফাইল প্রয়োগ করুন


17

আমার একটি securitygroup.tfফাইলটিতে আমার সুরক্ষা গোষ্ঠী রয়েছে ।

একই দির মধ্যে প্রচুর পরিমাণে অন্যান্য সংস্থান বিবরণ রয়েছে (আরডিএস, ইক 2 ইত্যাদি)।

আমার জন্য terraform apply --auto-approve শুধুমাত্র একটি অনুষ্ঠানের উপায় আছে securitygroups.tf?

উত্তর:


19

আসলে তা না. যদিও এটিকে ঘিরে কাজ করার মানক উপায় হ'ল উদাহরণ:

terraform apply -target=aws_security_group.my_sg

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

terraform apply -target=aws_security_group.my_sg -target=aws_security_group.my_2nd_sg

তবে সম্ভাব্য দু'টি কাজের ক্ষেত্র রয়েছে:

  • -targetপরামিতি নির্ভরতা সম্মান করে।

    এর অর্থ হল যদি আপনি উদাঃ হন। -target=aws_instance.my_serverএবং এই উদাহরণটি ছিল, বলুন, এটি অন্তরঙ্গকরণের মাধ্যমে সংযুক্ত পাঁচটি সুরক্ষা গোষ্ঠী, সেই সুরক্ষা গোষ্ঠীর পরিবর্তনগুলি পরিকল্পনার মধ্যে অন্তর্ভুক্ত করা উচিত (আমি এটির পুরোপুরি পরীক্ষা করিনি, তবে আমি বিশ্বাস করি যে এটি কীভাবে কাজ করে))

    যদিও এটি কিছুটা অগোছালো, কারণ আপনি সম্ভবত কোনও উদাহরণ স্পর্শ করতে চান না। সুরক্ষিত null_resourceগোষ্ঠীগুলির জন্য একটি লক্ষ্য সরবরাহ করার জন্য একটি নিরাপদ বিকল্পের মতো কিছু ব্যবহার করা হতে পারে , তবে আবার আমি এটি চেষ্টা করিনি (যদিও অন্য কোনও 'নিরাপদ' সংস্থান থাকতে পারে তবে আপনি নির্ভর করতে পারেন?)।

  • একটি মডিউল তৈরি করুন।

    আপনি যেমন কোনও সরল সংস্থানকে লক্ষ্য করতে পারেন ঠিক তেমন একটি মডিউলও আপনি লক্ষ্য করতে পারেন:

    terraform apply -target=module.my_security_groups
    

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


2

আপনি যদি মডিউল দ্বারা আপনার কোডটি সংগঠিত করেন তবে আপনি কেবলমাত্র একটি মডিউলে টেরাফর্ম প্রয়োগ করতে পারেন, যেমন:

# securitygroup.tf
module "securitygroup" {
  source = "git@github.com:user/securitygroup-terraform-module.git?ref=master"
}

$ tf apply -target=module.securitygroup

1

এটি সম্ভব বলে মনে হচ্ছে না। কনফিগারেশন ফাইলগুলি লোড করার কোড এখানে রয়েছে এবং এটি বর্তমান ডিরেক্টরি (বা একটি নির্দিষ্ট) থেকে সমস্ত * .tf ফাইল লোড করে এবং একটি ফাইলে কনফিগারেশন সীমিত করার মতো কিছুই নেই।


0

টেরাফর্ম মডিউলটি ব্যবহার করা পছন্দনীয়, তবে যদি আপনাকে সত্যিই কোনও একক ফাইলের বিরুদ্ধে টেরাফর্ম প্রয়োগ করতে হয় তবে আমি এই ব্যাশ স্ক্রিপ্টটি একটি ফাইলের সমস্ত লক্ষ্য এবং মডিউলের বিরুদ্ধে টেরফর্ম প্রয়োগ কমান্ড উত্পন্ন করতে তৈরি করেছি:

#!/usr/bin/env bash
if [[ -z "$@" ]]; then
  echo "Missing file input arguments"
  exit 1
fi

echo "terraform apply \\"
for FILE in "$@"
do
  RESOURCE=$(sed -n 's/resource "\([^"]*\)" "\([^"]*\)".*/-target=\1.\2 \\/gp' $FILE)
  MODULE=$(sed -n 's/module "\([^"]*\)".*/-target=module.\1 \\/gp' $FILE)
  if [[ -z "$RESOURCE" ]] && [[ -z "$MODULE" ]]; then
    echo "Cannot detect terraform resource and module in $FILE"
    exit 1
  fi

  if [[ ! -z "$RESOURCE" ]]; then
    echo -e $"$RESOURCE"
  fi
  if [[ ! -z "$MODULE" ]]; then
    echo -e $"$MODULE"
  fi
done
echo "-refresh=true"

আমি আসলে বাশ বিশেষজ্ঞ নই, তবে ম্যাকের কাজ করার জন্য এটি পরীক্ষা করা হয়েছিল।

সম্পাদনা: সেড কমান্ড অনুমান করে যে সংস্থানগুলি এবং মডিউলগুলি যথাযথভাবে অনুসারে বিন্যাস করা হয়েছে terraform fmt:

resource "aws_eip" "my_public_ip" {
}

resource "aws_instance" "my_server" {
}

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