დასახელების კონვენცია
ზოგადი კონვენცია
არ არსებობს მიზეზი იმისა თუ რატომ არ უნდა გაყვეთ ამ დასახელების კონვენციას :)
გაითვალისწინეთ რომ ღრუბლოვან რესურსებს (cloud resources) ხშირად აქვთ აკრძალვები დაშვებულ სახელებში. ზოგიერთი რესურსს მაგალითად არ შეუძლია შეიცავდეს - ს. ამ წიგნში მოყვანილი კონვენციები თავისთავად ეხება Terraform სახელებს.
გამოიყენეთ
_
(underscore)-
(dash) მაგიერ ყველგან (რესურსების დასახელებაში, მონაცემთა წყაროს სახელებში, ცვლადების სახელეში და ა.შ.).უკეთესია გამოიყენოთ lowercase ასოები და ციფრები (მიუხედავად UTF-8 მხარდაჭერისა).
რესურსისა და მონახემთა წყაროების არგუმენტები
ნუ გამოიყენებთ რესურსის ტიპს რესურსის სახელში (ნაწილობრივ თუ სრულად):
რესურსის სახელს უნდა ერქვას
this
იმ შემთხვევაში თუ არ არის მეტი აღწერითი და ზოგადი სახელი ხელმისაწვდომი, ან თუ რესურსის მოდული ქმნის მხოლოდ ერთ ასეთი ტიპის რესურსს (მაგალითად, AWS VPC module -ში არის მხოლოდ ერთიaws_nat_gateway
ტიპის რესურსი და რამოდენიმე typeaws_route_table
ტიპის რესურსი, ამიტომaws_nat_gateway
-ს უნდა დაერქვასthis
დაaws_route_table
-ს უნდა ჰქონდეს მეტი აღწერითი სახელები - როგორიცააprivate
,public
,database
).დასახელებებში ყოველთვის გამოიყენეთ მხოლობითი არსებითი სახელები.
გამოიყენეთ
-
არგუმენტების მნიშვნელობებსა და იმ ადგილებში სადაც ეს მნიშვნელობები იქნება გამოტანილი საჯაროდ (მაგალითად, RDS instance-ის DNS სახელში).გამოიყენე არგუმენტი nclude argument
count
/for_each
რესურსში ან მონაცემთა წყაროს ბლოკში პირველ არგუმენტად დასაწყისში და გამოყავით ახალი ხაზით.გამოიყენეთ არგუმენტი
tags,
თუ რესურსს აქვს ამის მხარდაჭერა,depends_on
დაlifecycle
ბლოკებამდე, თუ არსებობს ამის საჭიროება. ყველა ბლოკი უნდა გამოიყოს ცარიელი ხაზით.count
/for_each
არგუმენტებში კონდიციების გამოყენებისას, უპირატესობა მიანიჭეთ boolean მნიშვნელობს ვიდრეlength
ან სხვა ტიპის expression-ებს.
რესურსის(resource
) კოდის მაგალითები
resource
) კოდის მაგალითებიcount
/ for_each
U-ის გამოყენება
count
/ for_each
U-ის გამოყენებატეგების (tags
) განთავსება
tags
) განთავსებაკონდიციები count
-ში
count
-შიცვლადები
ნუ გამოიგონებთ ველოსიპედს რესურსის მოდულებში, გამოიყენეთ:
name
,description
, დაdefault
მნიშვნელობები ცვლადებისთვის ისე როგორც "Argument Reference" სექციაში არის განსაზღვრული.ცვლადებში ვალიდაციის მხარდაჭერა არის საკმაოდ შეზღუდული (მაგალითად არ აქვს წვდომა სხვა ცვლადებზე). ძირითად შემთხვევბში მიზანშეწონილია გამოიყენოთ Plan-ი, რადგაც ვალიდაციის ოფცია ხშირ შემთხვევაში არის უშედეგო.
ცვლადის სახელებში გამოიყენეთ მრავლობითი ფორმა როდესაც მისი ტიპი არის
list(...)
ანmap(...)
.ცვლადის ბლოკში დაიცავით ელემენტების შემდეგი მიმდევრობა:
description
,type
,default
,validation
.ყოველთვის გამოიყენეთ
description
ყველა ცვლადზე (სამომავლოდ აუცილებლად გამოგადგებათ)უმჯობესია გამოიყენოთ მარტივი ცვლადის ტიპები (
number
,string
,list(...)
,map(...)
,any
) ვიდრე სპეციფიური ტიპები როგორიცააobject()
იმ შემთხვევაში თუ არ გჭირდებათ მკაცრი შეზღუდვები key-ებზე.გამოიყენეთ სპეციფიური ცვლადის ტიპები როგორიცაა
map(map(string))
იმ შემთხვევაში თუ ყველა ელემენტს map-ზე ერთი და იგივე ცვლადის ტიპი (მაგალითადstring
) ან შესაძლოა დაკონვერტირდეს მასში (მაგალითადnumber
შესაძლოა დაკონვერტირდესstring
-ში).გამოიყენეთ ცვლადის ტიპი
any
რათა გამოტოვოთ ვალიდაცია როდესაც კონკრეტულ შრეზე ან როდესაც რამოდენიმე ცვლადის ტიპი უნდა იქნას მხარდაჭერილი.მნიშვნელობა(Value)
{}
ზოგჯერ არის map ტიპისა მაგრამ ხანდახან არის object ტიპის. გამოიყენეთtomap(...)
რათა შექმნა map იმ შემთხვევაში თუ შეზღუდულია object-ის შექმნა.
Outputs
Make outputs consistent and understandable outside of its scope (when a user is using a module it should be obvious what type and attribute of the value it returns).
The name of output should describe the property it contains and be less free-form than you would normally want.
Good structure for the name of output looks like
{name}_{type}_{attribute}
, where:{name}
is a resource or data source name without a provider prefix.{name}
foraws_subnet
issubnet
, foraws_vpc
it isvpc
.{type}
is a type of a resource sources{attribute}
is an attribute returned by the output
If the output is returning a value with interpolation functions and multiple resources,
{name}
and{type}
there should be as generic as possible (this
as prefix should be omitted). See example.If the returned value is a list it should have a plural name. See example.
Always include
description
for all outputs even if you think it is obvious.Avoid setting
sensitive
argument unless you fully control usage of this output in all places in all modules.Prefer
try()
(available since Terraform 0.13) overelement(concat(...))
(legacy approach for the version before 0.13)
output
კოდის მაგალითი
output
კოდის მაგალითიდააბრუნეთ security group მხოლოდ ერთი ID:
ერთი და იმავე ტიპის მრავალი რესურსის არსებობისას, this
უნდა იყოს გამოტოვებული Output სახელით:
გამოიყენეთ მრავლობითი სახელი, თუ დაბრუნებული მნიშვნელობა არის სია
Last updated