টেরফর্ম: একটি রিমোট স্টেট ফাইলের জন্য শংসাপত্র নির্বাচন করা


10

আমার টেরফর্মে বিদ্যমান অবকাঠামো রয়েছে এবং এটি কিছুক্ষণ ব্যবহার করে আসছি। সম্প্রতি আমি আমার স্থানীয় ল্যাপটপের অ্যাডাব্লুএস শংসাপত্রগুলি (ক্রেডিটগুলিতে সঞ্চিত ~/.aws/credentials) অদলবদল করেছিলাম এবং আমি সেই শংসাপত্রগুলি পুনরায় সেট না করা পর্যন্ত এটি কাজ করা বন্ধ করে দেয়।

সমস্যাটি হ'ল আমি নিজেই টেরফর্ম উত্সে ক্রেডিটগুলি ঘোষনা করছি তবে মনে হয় এটি মোটেও ব্যবহার করছে না।

terraform {
  backend "s3" {
    bucket = "example_tf_states"
    key    = "global/vpc/us_east_1/example_state.tfstate"
    encrypt = true
    region     = "us-east-1"
  }
}

provider "aws" {
  access_key = "${var.access_key}"
  secret_key = "${var.secret_key}"
  region = "${var.region}"
}



variable "access_key" {
  default = "<hidden_for_stack_exchange_post>"
}

variable "secret_key" {
  default = "<hidden_for_stack_exchange_post>"
}

variable "region" {
  default = "us-east-1"
}

অ্যাক্সেস আইডি অনুমতিগুলি 100% ভাল। আমি উপরের টেরেরফর্ম ভেরিয়েবলের ঘোষণাপত্রের মতো aws configureযে সেটিংসগুলিতে যায় ~/.aws/credentialsসেগুলির জন্য আমি একই অ্যাকাউন্ট আইডি এবং গোপন কী উভয় ব্যবহার করছি।

ক্রেডিটগুলি যতক্ষণ না থাকে ততক্ষণ সবকিছু ঠিক থাকে~/.aws/credentials তবে ওএস স্তরের শংসাপত্রগুলি rm ~/.aws/credentialsনিখোঁজ হওয়ার সাথে সাথে (অর্থাত্ টেরফর্ম) অপারেশনগুলি চালানোর চেষ্টা করার সময় আমি নিম্নলিখিতটি পাই terraform plan: যেমন :

Failed to load backend:
Error configuring the backend "s3": No valid credential sources found for AWS Provider.
  Please see https://terraform.io/docs/providers/aws/index.html for more information on
  providing credentials for the AWS Provider

Please update the configuration in your Terraform files to fix this error.
If you'd like to update the configuration interactively without storing
the values in your configuration, run "terraform init".

যদি আমি এটি ~/.aws/credentialsচালিয়ে aws configureআবার آباد করি তবে এটি আবার ঠিকঠাক হবে fine

আমি বুঝতে পারছি না - যদি আমার providerসেটিংটি টেরারফর্ম উত্স কোডের অভ্যন্তরে শংসাপত্রগুলি স্পষ্টভাবে ঘোষণা করছে, তবে আমার ওএস-স্তরের এডাব্লুএস কনফিগারেশনটি মোটেই কেন গুরুত্বপূর্ণ?

আমি কীভাবে টেরাফর্মকে কেবলমাত্র আমার টেরফর্ম কনফিগারেশনে সংজ্ঞায়িত ক্রেডিটগুলি ব্যবহার করতে পারি এবং আমার ওএস ব্যবহারকারী প্রোফাইলে কী আছে তা উপেক্ষা করতে পারি?

সম্পাদনা করুন, এটি Terraform v0.11.7

সম্পাদনা করুন: দয়া করে নোট করুন যে আমি কেন স্ট্যাটিকালি ঘোষিত শংসাপত্র সরবরাহকারীর ঘোষণায় ব্যবহার করা হচ্ছে না তা নিয়ে সমস্যাটি সমাধান করার চেষ্টা করছি। বিকল্প পদ্ধতি বা কাজের ক্ষেত্রগুলি খুঁজছেন না। ধন্যবাদ।


এইচআরএম ... ঠিক একটা কুঁচক নিশ্চিত করুন যে AWS_PROFILEবা AWS_DEFAULT_PROFILEপরিবেশের ভেরিয়েবলগুলি সেট করা নেই কারণ সেগুলি এডাব্লুএস এসডিকে একটি ইঙ্গিত যা এটি শংসাপত্র ফাইলটিতে দেখা উচিত।
এরিক অস্টারম্যান

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

উত্তর:


10

আপনার প্রথম প্রশ্ন

যদি আমার সরবরাহকারীর সেটিংটি টেরফর্ম উত্স কোডের অভ্যন্তরে শংসাপত্রগুলি স্পষ্টভাবে ঘোষণা করছে তবে আমার ওএস-স্তরের এডাব্লুএস কনফিগারেশনটি মোটেই কেন গুরুত্বপূর্ণ?

ত্রুটি বার্তা "ব্যাকএন্ড লোড করতে ব্যর্থ: ব্যাকএন্ড" s3 "কনফিগার করার সময় ত্রুটিটি আপনার ব্যাকএন্ড এস 3 কনফিগারেশনকে উল্লেখ করছে।

ফাইলটি দেখুন ./.terraform/terraform.tfstateএবং আপনি এস 3 ব্যাকএন্ড কনফিগারেশন দেখতে পাবেন।

টেরাফর্ম এস 3 ব্যাকএন্ড টেরফর্ম এডাব্লুএস সরবরাহকারীর চেয়ে আলাদা। ত্রুটি বার্তা "এডাব্লুএস সরবরাহকারীর জন্য কোনও বৈধ শংসাপত্র উত্স পাওয়া যায় নি।" বিভ্রান্তিকর। এটি সূচিত করে যে AWS সরবরাহকারী কনফিগারেশন ব্যবহার করা হয়েছে, যা মিথ্যা। এস 3 ব্যাকএন্ড শংসাপত্রগুলি পৃথকভাবে কনফিগার করা হয় এবং terraform.tfstateফাইলটিতে সঞ্চিত হয় ।

আপনার ওএস-স্তরের এডাব্লুএস কনফিগারেশনটি গুরুত্বপূর্ণ কারণ এখানে যদি নথিভুক্ত হিসাবে কোনও এস 3 ব্যাকেন্ডের শংসাপত্রগুলি নির্দিষ্ট না করা হয় তবে https://www.terraform.io/docs/backends/tyype/s3.html , তারপরে নিম্নলিখিতটি ব্যবহার করে ডিফল্টগুলি ক্রম অনুসারে:

  1. পরিবেশ পরিবর্তনশীল AWS_ACCESS_KEY_ID এবং AWS_SECRET_ACCESS_KEY
  2. এডাব্লুএস শেয়ার্ড শংসাপত্র ফাইল, ডিফল্ট মান "~ / .aws / শংসাপত্রগুলি"।

আপনি আপনার এস 3 ব্যাকএন্ড কনফিগারেশনে কোনও শংসাপত্র নির্দিষ্ট করেন নি তাই টেরাপেরফেটটি এডাব্লুএস ভাগ করে নেওয়া শংসাপত্রের ফাইলটিতে ডিফল্ট হয়।

আপনার এস 3 ব্যাকেন্ড কনফিগারেশনে কোনও শংসাপত্র নেই।

terraform {
  backend "s3" {
    bucket = "example_tf_states"
    key    = "global/vpc/us_east_1/example_state.tfstate"
    encrypt = true
    region     = "us-east-1"
  }
}

আপনার দ্বিতীয় প্রশ্ন,

আমি কীভাবে টেরাফর্মকে কেবলমাত্র আমার টেরফর্ম কনফিগারেশনে সংজ্ঞায়িত ক্রেডিটগুলি ব্যবহার করতে পারি এবং আমার ওএস ব্যবহারকারী প্রোফাইলে কী আছে তা উপেক্ষা করতে পারি?

প্রথমত, ব্যাকেন্ডে অন্তরবিচ্ছিন্নতা থাকতে পারে না, https://www.terraform.io/docs/backends/config.html দেখুন । সুতরাং আপনি ব্যাকএন্ড কনফিগারেশনে কোনও ভেরিয়েবল ব্যবহার করতে পারবেন না। যেমন এই কনফিগারেশনটি অবৈধ

terraform {
  backend "s3" {
    bucket = "example_tf_states"
    key    = "global/vpc/us_east_1/example_state.tfstate"
    encrypt = true
    region     = "us-east-1"
    access_key = ${var.access_key}
    secret_key = ${var.secret_key}
  }
}

আপনি যখন চলমান সময় AWS শংসাপত্রগুলি নির্দিষ্ট করতে চান আপনি terraform initবিকল্প হিসাবে ব্যাকএন্ড কনফিগারেশন নির্দিষ্ট করে।

terraform init --backend-config="access_key=your_access_key" --backend-config="secret_key=your_secret_key"

এটি একটি S3 ব্যাকএন্ড কনফিগার তৈরি করে যা এইরকম দেখতে পাওয়া যায়, ./.terraform/terraform.tfstateফাইলটিতে সঞ্চিত :

{
    "version": 3,
    "serial": 1,
    "lineage": "bd737d2d-1181-ed64-db57-467d14d2155a",
    "backend": {
        "type": "s3",
        "config": {
            "access_key": "your_access_key",
            "secret_key": "your_secret_key"
        },
        "hash": 9345827190033900985
    },

আবার, এস 3 ব্যাকএন্ড শংসাপত্রগুলি আপনার এডাব্লুএস সরবরাহকারী শংসাপত্রগুলি থেকে আলাদাভাবে কনফিগার করা হয়েছে।

আপনার ত্রুটি সমাধানের বিকল্প terraform initহিসাবে কমান্ড লাইনে শংসাপত্রগুলি পুনরায় চালিত করুন এবং নির্দিষ্ট --backend-configকরুন।


ধন্যবাদ। খুব বিস্তারিত প্রতিক্রিয়া এবং আমি এখন সমস্যাটি বুঝতে পারি। আমার ব্যবহারের ক্ষেত্রে আমি সেই shared_credentials_fileবিকল্পটি ব্যবহার করে শেষ করেছি যা আমার সমস্ত ব্যাকেন্ড এবং সরবরাহকারীরা ফসল কাটবে এবং ব্যবহার করবে। মনে হচ্ছে সুন্দরভাবে কাজ করছে এবং ওএস ওয়ার্কস্টেশনটিতে শংসাপত্রগুলির মধ্যে কোনও কিছুই লক করা নেই।
এমএমডি

3

আপনি যে ত্রুটিটি পাচ্ছেন তা বিশেষভাবে এস 3 ব্যাকএন্ডটি কনফিগার করার বিষয়ে উল্লেখ করা হচ্ছে, যা এএফএআইকি অ্যাডাব্লুএস সরবরাহকারী কনফিগারেশন থেকে সেটিংসের উত্তরাধিকার সূত্রে প্রাপ্ত নয়; এটিরও access_key& secret_keyকনফিগারেশন বিকল্প রয়েছে যা আপনি যদি ব্যবহার না করেন তবে আপনাকে ~/.aws/credentialsস্পষ্টভাবে কনফিগার করতে হবে।


1

আপনার ~/.aws/credentialsফাইলগুলিতে প্রোফাইল সেট আপ করা ভাল

[profile1]
aws_access_key_id = xxxx
aws_secret_access_key = xxxxx
region = us-east-1

[profile2]
aws_access_key_id = xxxx
aws_secret_access_key = xxxx
region = us-west-2

তারপরে আপনার সরবরাহকারীর মধ্যে আপনি কোন প্রোফাইল ব্যবহার করবেন তা এটি বলতে পারবেন

provider "aws" {
  profile = "profile2"
  region = "${var.region}"
}

এটি যদি আপনার উত্স নিয়ন্ত্রণে রাখতে চান তবে এটি আপনার টেরেফর্ম ফাইলগুলির বাইরে কীগুলি রাখবে যা ভাল জিনিস।


ইনপুট জন্য ধন্যবাদ। আমি শংসাপত্রের প্রোফাইলগুলি সম্পর্কে অনেক সচেতন, তবে আমি কোনও বিকল্প পদ্ধতি বা কর্মক্ষেত্রের পরিবর্তে নির্দিষ্ট প্রশ্নের সমাধান চাইছি। এই প্রশ্নের সুযোগের জন্য ক্রেডিটগুলি ভেরিয়েবলের মধ্যে থাকা দরকার। নির্বিশেষে অনেক প্রশংসা।
Emmdee
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.