Атау келісімдері
Жалпы келісімдер
Барлық жерде (ресурс атауларында, дереккөз атауларында, айнымалылар атауларында, шығыстарда және т.б.)
-(дефис) орнына_(астын сызу белгісін) қолданыңыз.Кіші әріптер мен сандарды қолдануды жөн көріңіз (UTF-8 қолдау көрсетілсе де).
Ресурс және дереккөз аргументтері
Ресурс атауында ресурс түрін қайталамаңыз (жартылай да, толықтай да):
`resource "aws_route_table" "public" {}``resource "aws_route_table" "public_route_table" {}``resource "aws_route_table" "public_aws_route_table" {}`Егер анағұрлым сипаттамалық және жалпы атау болмаса немесе ресурс модулі осы түрдегі жалғыз ресурсты жасаса, ресурс атауы
thisдеп аталуы керек (мысалы, AWS VPC модуліндеaws_nat_gatewayтүріндегі бір ресурс жәнеaws_route_tableтүріндегі бірнеше ресурстар бар, сондықтанaws_nat_gatewaythisдеп аталуы керек, алaws_route_tableанағұрлым сипаттамалық атауларға ие болуы керек — мысалы,private,public,database).Атаулар үшін әрқашан зат есімнің жекеше түрін қолданыңыз.
Аргумент мәндерінде және мән адамға көрсетілетін жерлерде (мысалы, RDS данасының DNS атауында)
-қолданыңыз.count/for_eachаргументін ресурс немесе дереккөз блогының ішіне ең бірінші аргумент ретінде жоғарғы жағына қосыңыз және одан кейін жаңа жолмен бөліңіз.Егер ресурс қолдаса,
tagsаргументін соңғы нақты аргумент ретінде, қажет болсаdepends_onжәнеlifecycleаргументтерінің алдына қосыңыз. Бұлардың барлығы бір бос жолмен бөлінуі керек.count/for_eachаргументінде шарттарды қолданған кездеlengthнемесе басқа өрнектердің орнына логикалық (boolean) мәндерді жөн көріңіз.
resourceкодының мысалдары
resourceкодының мысалдары count / for_each қолданылуы
count / for_each қолданылуыОрналасуы tags
tags count ішіндегі шарттар
count ішіндегі шарттарАйнымалылар
Ресурс модульдерінде велосипед ойлап таппаңыз: сіз жұмыс істеп жатқан ресурс үшін «Аргумент анықтамалығы» (Argument Reference) бөлімінде анықталғандай айнымалылар үшін
name,description, жәнеdefaultмәндерін қолданыңыз.Айнымалыларда валидацияны қолдау айтарлықтай шектеулі (мысалы, басқа айнымалыларға қол жеткізе алмайды немесе Terraform
1.9-ға дейінгі нұсқаны қолдансаңыз, іздеулер жасай алмайды). Жоспарды сәйкесінше құрыңыз, өйткені көп жағдайда бұл мүмкіндік пайдасыз болып қалады.Түрі
list(...)немесеmap(...)болған кезде айнымалы атауында көпше түрді қолданыңыз.Айнымалы блогындағы кілттерді мына ретпен орналастырыңыз:
description,type,default,validation.Айнымалылардың барлығына, тіпті айтпаса да түсінікті деп ойласаңыз да, әрқашан
descriptionқосыңыз (бұл сізге болашақта қажет болады). Мүмкін болса, ресми құжаттамадағыдай тұжырымдаманы қолданыңыз.Әр кілтте қатаң шектеулер болуы қажет болмаса,
object()сияқты нақты түрден гөрі қарапайым түрлерді (number,string,list(...),map(...),any), қолданған дұрыс.Егер картаның
mapбарлық элементтері бірдей түрде болса (мысалы,string) немесе оған түрлендіруге болатын болса (мысалы,numberтүрінstringтүріне түрлендіруге болады),map(map(string))сияқты нақты түрлерді қолданыңыз.Белгілі бір тереңдіктен бастап түрді тексеруді өшіру үшін немесе бірнеше түрлерге қолдау көрсету керек болғанда
anyтүрін қолданыңыз.{}мәні кейде карта, кейде объект болып табылады. Карта жасау үшінtomap(...)қолданыңыз, себебі объект жасаудың жолы жоқ.Қос терістеуден аулақ болыңыз: шатасуды болдырмау үшін оң айнымалы атауларын қолданыңыз. Мысалы,
encryption_enabledорнынаencryption_disabled.For variables that should never be
null, setnullable = false. This ensures that passingnulluses the default value instead ofnull. Ifnullis an acceptable value, you can omit nullable or set it totrue.Ешқашан
nullболмауы керек айнымалылар үшінnullable = falseдеп орнатыңыз. Бұлnullмәні берілгенде null-дың орнына әдепкі мәннің қолданылуын қамтамасыз етеді. Егерnullқабылданатын мән болса, nullable параметрін қалдырып кетуге немесеtrueдеп орнатуға болады.
Шығыстар
Шығыстарды бірізді және оның ауқымынан тыс түсінікті етіңіз (пайдаланушы модульді қолданғанда, оның қандай түрді және қандай атрибутты қайтаратыны анық болуы керек).
Шығыс атауы ондағы қасиетті сипаттауы керек және әдетте қалағаныңыздан гөрі еркін пішінде болмауы керек.
Шығыс атауының жақсы құрылымы
{name}_{type}_{attribute}сияқты болады, мұнда:{name}ресурс немесе дереккөз атауы.{name}үшінdata "aws_subnet" "private"бұлprivate{name}үшінresource "aws_vpc_endpoint_policy" "test"бұлtest
{type}провайдер префиксінсіз ресурс немесе дереккөз түрі.{type}үшінdata "aws_subnet" "private"бұлsubnet{type}үшінresource "aws_vpc_endpoint_policy" "test"бұлvpc_endpoint_policy
{attribute}шығыс қайтаратын атрибут.
Егер шығыс интерполяция функцияларымен және бірнеше ресурстармен мән қайтарса, ондағы
{name}және{type}мүмкіндігінше жалпылама болуы керек (префикс ретіндегіthisaалынып тасталуы керек).Мысалды қараңызЕгер қайтарылатын мән тізім болса, оның атауы көпше түрде болуы керек. Мысалды қараңыз .
Барлық шығыстарға, тіпті айтпаса да түсінікті деп ойласаңыз да, әрқашан
descriptionқосыңыз.Бұл шығыстың барлық модульдердегі барлық жерде қолданылуын толық бақыламасаңыз,
sensitiveаргументін орнатудан аулақ болыңыз.try()(Terraform 0.13 нұсқасынан бастап қолжетімді) функциясынelement(concat(...))(0.13 нұсқасына дейінгі ескірген әдіс) орнына қолданған дұрыс.
output кодының мысалдары
output кодының мысалдары Қауіпсіздік тобының ең көбі бір идентификаторын қайтару:
Бір түрдегі бірнеше ресурс болған кезде, шығыс атауында this алынып тасталуы керек:
Егер қайтарылатын мән тізім болса, көпше атауды қолданыңыз
Last updated