Terraformer - Infrastructure rau Code

Terraformer - Infrastructure rau Code
Kuv xav qhia koj txog cov cuab yeej CLI tshiab uas kuv tau sau los daws qhov teeb meem qub.

teeb meem

Terraform tau ntev dhau los ua tus qauv hauv Devops / Huab / IT zej zog. Qhov khoom yog yooj yim heev thiab muaj txiaj ntsig zoo rau kev cuam tshuam nrog kev tsim kho vaj tse raws li cov cai. Muaj ntau qhov zoo siab hauv Terraform nrog rau ntau rab rawg, riam ntse thiab rakes.
Nrog Terraform nws yooj yim heev los tsim cov khoom tshiab thiab tom qab ntawd tswj, hloov lossis tshem tawm lawv. Yuav ua li cas cov neeg uas muaj ib tug loj infrastructure nyob rau hauv huab thiab tsis tsim los ntawm Terraform yuav ua li cas? Rewriting thiab rov tsim tag nrho huab yog qee qhov kim thiab tsis zoo.
Kuv ntsib qhov teeb meem no ntawm 2 txoj haujlwm, qhov piv txwv yooj yim tshaj plaws yog thaum koj xav kom txhua yam nyob hauv Git hauv daim ntawv ntawm cov ntaub ntawv terraform, tab sis koj muaj 250+ thoob thiab nws yog ntau los sau lawv hauv terraform los ntawm tes.
muaj qhov teeb meem txij li xyoo 2014 hauv terrafom uas tau raug kaw hauv 2016 nrog kev cia siab tias yuav muaj kev ntshuam.

Feem ntau, txhua yam zoo li hauv daim duab nkaus xwb los ntawm sab xis mus rau sab laug

Lus ceeb toom: Tus sau tsis nyob hauv Russia rau ib nrab ntawm nws lub neej thiab sau me me hauv Lavxias. Ceev faj txog kev sau ntawv yuam kev.

Lub ntsiab

1. Muaj cov kev daws teeb meem uas npaj txhij thiab qub rau AWS terraforming. Thaum kuv sim kom tau kuv 250+ thoob los ntawm nws, kuv pom tau tias txhua yam tsis zoo nyob ntawd. AWS tau ntev tau qhia ntau yam kev xaiv tshiab, tab sis terraforming tsis paub txog lawv thiab feem ntau nws yog ruby tus qauv zoo li tsis tshua muaj. Tom qab 2 yav tsaus ntuj kuv xa Rub thov ntxiv cov nta ntxiv nyob rau ntawd thiab pom tau tias qhov kev daws teeb meem zoo li no tsis haum txhua.
Yuav ua li cas terraforming ua haujlwm: nws siv cov ntaub ntawv los ntawm AWS SDK thiab tsim tf thiab tfstate los ntawm tus qauv.
Muaj 3 qhov teeb meem ntawm no:
1. Tej zaum yuav muaj kev lag luam tshiab
2. tf cov ntaub ntawv qee zaum tuaj tawm tawg
3. tfstate yog sib cais los ntawm tf thiab tsis tas li converge
Feem ntau, nws nyuaj kom tau txais qhov tshwm sim uas 'terraform plan' hais tias tsis muaj kev hloov pauv

2. 'terraform ntshuam' yog ib tug built-in hais kom ua nyob rau hauv terraform. Nws ua haujlwm li cas?
Koj sau cov ntaub ntawv TF khoob nrog lub npe thiab hom kev pabcuam, tom qab ntawd khiav 'terraform ntshuam' thiab dhau qhov peev txheej ID. terraform hu rau tus kws kho mob, tau txais cov ntaub ntawv thiab ua cov ntaub ntawv tfstate.
Muaj 3 qhov teeb meem ntawm no:
1. Peb tsuas yog tau txais cov ntaub ntawv tfstate, thiab tf yog khoob, koj yuav tsum sau nws manually lossis hloov los ntawm tfstate
2. Tsuas tuaj yeem ua haujlwm nrog ib qho peev txheej ib zaug thiab tsis txhawb nqa tag nrho cov peev txheej. Thiab kuv yuav ua li cas ntxiv nrog 250+ thoob?
3. Koj yuav tsum paub tus ID ntawm cov peev txheej - uas yog, koj yuav tsum qhwv nws hauv cov lej uas tau txais cov npe ntawm cov peev txheej
Feem ntau, qhov tshwm sim yog ib nrab thiab tsis ntsuas qhov zoo

Kuv qhov kev txiav txim

Yuav tsum muaj:
1. Muaj peev xwm tsim cov ntaub ntawv tf thiab tfstate rau cov peev txheej. Piv txwv li, rub tawm tag nrho cov thoob / kev ruaj ntseg pab pawg / load balancer thiab 'terraform plan' xa rov qab tias tsis muaj kev hloov pauv.
2. Koj xav tau 2 GCP + AWS huab
3. Kev daws teeb meem thoob ntiaj teb uas yooj yim hloov kho txhua lub sijhawm thiab tsis nkim sijhawm ntawm txhua qhov peev txheej rau 3 hnub ua haujlwm
4. Ua kom qhib qhov chaw - txhua tus neeg muaj teeb meem tib yam

Cov lus Go yog vim li cas kuv nyiam nws, thiab nws muaj lub tsev qiv ntawv tsim HCL cov ntaub ntawv uas siv hauv terraform + ntau code hauv terraform uas tuaj yeem pab tau.

txoj kev

Thawj zaug sim
Kuv pib nrog ib tug yooj yim version. Hu rau huab ntawm SDK rau cov peev txheej xav tau thiab hloov mus rau hauv thaj chaw rau terraform. Qhov kev sim tuag tam sim ntawm pab pawg kev ruaj ntseg vim kuv tsis nyiam 1.5 hnub los hloov cov pab pawg kev ruaj ntseg nkaus xwb (thiab muaj ntau yam kev pab). Tau ntev thiab ces teb tuaj yeem hloov / ntxiv

Thib ob sim
Raws li lub tswv yim tau piav qhia S, SΡ“S,. Tsuas yog coj thiab hloov tfstate rau tf. Tag nrho cov ntaub ntawv nyob ntawd thiab cov teb yog tib yam. Yuav ua li cas kom tau tag nrho tfstate rau ntau qhov kev pab ?? Qhov no yog qhov uas 'terraform refresh' hais kom ua los cawm. terraform siv tag nrho cov peev txheej hauv tfstate thiab, los ntawm ID, rub tawm cov ntaub ntawv ntawm lawv thiab sau txhua yam rau tfstate. Ntawd yog, tsim qhov khoob tfstate nrog cov npe thiab ID, khiav 'terraform refresh' thiab tom qab ntawd peb tau txais tag nrho tfstates. Hooray!
Tam sim no cia peb ua cov duab liab qab recursive ntawm kev sau ib lub converter rau tfstate rau tf. Rau cov neeg uas tsis tau nyeem tfstate, nws yog JSON, tab sis tshwj xeeb.
Ntawm no yog nws cov yam ntxwv tseem ceeb

 "attributes": {
                            "id": "default/backend-logging-load-deployment",
                            "metadata.#": "1",
                            "metadata.0.annotations.%": "0",
                            "metadata.0.generate_name": "",
                            "metadata.0.generation": "24",
                            "metadata.0.labels.%": "1",
                            "metadata.0.labels.app": "backend-logging",
                            "metadata.0.name": "backend-logging-load-deployment",
                            "metadata.0.namespace": "default",
                            "metadata.0.resource_version": "109317427",
                            "metadata.0.self_link": "/apis/apps/v1/namespaces/default/deployments/backend-logging-load-deployment",
                            "metadata.0.uid": "300ecda1-4138-11e9-9d5d-42010a8400b5",
                            "spec.#": "1",
                            "spec.0.min_ready_seconds": "0",
                            "spec.0.paused": "false",
                            "spec.0.progress_deadline_seconds": "600",
                            "spec.0.replicas": "1",
                            "spec.0.revision_history_limit": "10",
                            "spec.0.selector.#": "1",

Muaj:
1. id - kab
2. metadata - ib qho array ntawm loj 1 thiab nyob rau hauv nws ib yam khoom nrog teb uas tau piav qhia hauv qab no
3. spec - hash ntawm qhov loj 1 thiab qhov tseem ceeb, tus nqi hauv nws
Hauv luv luv, hom kev lom zem, txhua yam tuaj yeem ua tau ob peb qib sib sib zog nqus

                   "spec.#": "1",
                            "spec.0.min_ready_seconds": "0",
                            "spec.0.paused": "false",
                            "spec.0.progress_deadline_seconds": "600",
                            "spec.0.replicas": "1",
                            "spec.0.revision_history_limit": "10",
                            "spec.0.selector.#": "1",
                            "spec.0.selector.0.match_expressions.#": "0",
                            "spec.0.selector.0.match_labels.%": "1",
                            "spec.0.selector.0.match_labels.app": "backend-logging-load",
                            "spec.0.strategy.#": "0",
                            "spec.0.template.#": "1",
                            "spec.0.template.0.metadata.#": "1",
                            "spec.0.template.0.metadata.0.annotations.%": "0",
                            "spec.0.template.0.metadata.0.generate_name": "",
                            "spec.0.template.0.metadata.0.generation": "0",
                            "spec.0.template.0.metadata.0.labels.%": "1",
                            "spec.0.template.0.metadata.0.labels.app": "backend-logging-load",
                            "spec.0.template.0.metadata.0.name": "",
                            "spec.0.template.0.metadata.0.namespace": "",
                            "spec.0.template.0.metadata.0.resource_version": "",
                            "spec.0.template.0.metadata.0.self_link": "",
                            "spec.0.template.0.metadata.0.uid": "",
                            "spec.0.template.0.spec.#": "1",
                            "spec.0.template.0.spec.0.active_deadline_seconds": "0",
                            "spec.0.template.0.spec.0.container.#": "1",
                            "spec.0.template.0.spec.0.container.0.args.#": "3",

Feem ntau, yog tias leej twg xav tau qhov teeb meem programming rau kev xam phaj, tsuas yog hais kom lawv sau tus parser rau txoj haujlwm no :)
Tom qab ntau qhov kev sim sau cov parser yam tsis muaj kab, kuv pom ib feem ntawm nws nyob rau hauv tus lej terraform, thiab qhov tseem ceeb tshaj plaws. Thiab txhua yam zoo li ua haujlwm zoo

Sim peb
terraform cov chaw muab kev pabcuam yog binaries uas muaj cov lej nrog txhua qhov kev pabcuam thiab cov laj thawj rau kev ua haujlwm nrog huab API. Txhua huab muaj nws tus kheej muab kev pabcuam thiab terraform nws tus kheej tsuas yog hu lawv los ntawm nws cov txheej txheem RPC ntawm ob txheej txheem.
Tam sim no kuv txiav txim siab hu rau cov chaw muab kev pabcuam terraform ncaj qha ntawm RPC hu. Nws tig tawm zoo nkauj thiab ua rau nws muaj peev xwm hloov cov chaw muab kev pabcuam terraform rau cov tshiab dua thiab tau txais cov yam ntxwv tshiab yam tsis tau hloov pauv. Nws kuj hloov tawm tias tsis yog txhua qhov chaw hauv tfstate yuav tsum nyob hauv tf, tab sis koj tuaj yeem nrhiav tau li cas? Tsuas nug koj tus kws kho mob txog qhov no. Tom qab ntawd lwm cov duab liab qab rov ua dua ntawm kev sib sau ua ke cov kab lus tsis tu ncua pib, tshawb nrhiav cov teb hauv tfstate ntawm txhua qib hauv qhov tob.

Thaum kawg, peb tau txais CLI cov cuab yeej muaj txiaj ntsig uas muaj cov txheej txheem sib xws rau txhua tus neeg muab kev pabcuam terraform thiab koj tuaj yeem yooj yim ntxiv ib qho tshiab. Tsis tas li ntawd, ntxiv cov peev txheej yuav siv sij hawm me ntsis code. Ntxiv rau txhua yam khoom zoo xws li kev sib txuas ntawm cov peev txheej. Tau kawg, muaj ntau yam teeb meem sib txawv uas piav tsis tau tag nrho.
Kuv hu ua tsiaj Terrafomer.

Finale

Siv Terrafomer, peb tsim 500-700 txhiab kab ntawm tf + tfstate code los ntawm ob huab. Peb muaj peev xwm coj cov khoom qub txeeg qub teg thiab pib kov lawv tsuas yog los ntawm terraform, xws li hauv cov txheej txheem zoo tshaj plaws raws li cov tswv yim code. Nws tsuas yog khawv koob thaum koj nqa huab cua loj thiab tau txais los ntawm pab pawg hauv cov ntaub ntawv terraform neeg ua haujlwm. Thiab ces grep / hloov / git thiab lwm yam.

Kuv combed nws tawm thiab muab tso rau hauv kev txiav txim, tau txais kev tso cai. Tshaj tawm ntawm GitHub rau txhua tus hnub Thursday (02.05.19/XNUMX/XNUMX). github.com/GoogleCloudPlatform/terraformer
Twb tau txais 600 hnub qub, 2 rub thov ntxiv kev txhawb nqa rau openstack thiab kubernetes. Cov lus pom zoo. Feem ntau, qhov project no muaj txiaj ntsig zoo rau tib neeg
Kuv qhia txhua tus uas xav pib ua haujlwm nrog Terraform thiab tsis rov sau txhua yam rau qhov no.
Kuv yuav zoo siab rub cov lus thov, teeb meem, hnub qub.

Demo
Terraformer - Infrastructure rau Code

Tau qhov twg los: www.hab.com

Ntxiv ib saib