ʻO ka hoʻāʻo ʻana i nā mea hana e like me ke Code me Pulumi. Mahele 2

Aloha kākou. I kēia lā mākou e haʻi aku iā ʻoe i ka hapa hope o ka ʻatikala. "E ho'āʻo ana i nā mea hana e like me ke Code me Pulumi", ua hoʻomākaukau pono ʻia ka unuhi ʻana no nā haumāna papa "Nā hana a me nā mea hana DevOps".

ʻO ka hoʻāʻo ʻana i nā mea hana e like me ke Code me Pulumi. Mahele 2

Ho'āʻo hoʻolālā

He ala ikaika kēia ʻano hoʻāʻo a hiki iā mākou ke hana i ka hoʻāʻo pahu keʻokeʻo e hoʻāʻo ai i ka hana kūloko o kā mākou code infrastructure. Eia naʻe, ua kaupalena ʻia ka mea hiki iā mākou ke hoʻāʻo. Hana ʻia nā hoʻāʻo ma muli o ka hoʻolālā hoʻonohonoho hoʻomanaʻo i hana ʻia e Pulumi ma mua o ka hoʻoili maoli ʻana a no laila ʻaʻole hiki ke hoʻāʻo ʻia ka hoʻonohonoho ponoʻī. No ia mau hihia, loaʻa iā Pulumi kahi papa hana hoʻāʻo hoʻohui. A hana maikaʻi kēia mau ala ʻelua!

Ua kākau ʻia ka ʻōnaehana hoʻāʻo hoʻohui Pulumi ma Go, ʻo ia ka mea e hoʻāʻo ai i ka hapa nui o kā mākou code kūloko. ʻOiai ʻoi aku ka like o ka hoʻāʻo ʻana o ka ʻāpana i kūkākūkā mua ʻia, ʻo ka hoʻāʻo hoʻohui ʻana he pahu ʻeleʻele. (Aia kekahi mau koho no ka hoʻāʻo ʻana i loko.) Ua hana ʻia kēia anga no ka lawe ʻana i kahi polokalamu Pulumi piha a hoʻokō i nā hana holoʻokoʻa like ʻole ma luna o ia mea, e like me ke kau ʻana i kahi waihona hou mai ka wā ʻōpala, ka hoʻomaikaʻi ʻana me nā ʻano like ʻole, a me ka holoi ʻana iā ia, hiki i nā manawa he nui. . Holo mākou iā lākou i kēlā me kēia manawa (no ka laʻana, i ka pō) a ma ke ʻano he hoʻāʻo koʻikoʻi.

(ʻO mākou ke hana nei makou, i loaʻa nā mana hoʻāʻo hoʻohui like ma ka SDK maoli o nā ʻōlelo. Hiki iā ʻoe ke hoʻohana i ka ʻōnaehana hoʻāʻo hoʻohui Go me ka nānā ʻole i ka ʻōlelo i kākau ʻia ai kāu polokalamu Pulumi).

Ma ka holo ʻana i ka polokalamu me ka hoʻohana ʻana i kēia framework hiki iā ʻoe ke nānā i kēia:

  • He syntactically pololei kāu code papahana a holo me ka hala ʻole.
  • Ke hana nei ka hoʻonohonoho hoʻonohonoho hoʻonohonoho hoʻonohonoho a me nā mea huna a unuhi pololei ʻia.
  • Hiki ke hoʻolālā maikaʻi ʻia kāu papahana i ka mea hāʻawi kapuaʻi āu e koho ai.
  • Hiki ke hoʻonui maikaʻi ʻia kāu papahana mai ka mokuʻāina mua a i N mau mokuʻāina ʻē aʻe.
  • Hiki ke hoʻopau maikaʻi ʻia a wehe ʻia kāu papahana mai kāu mea hāʻawi kapua.

E like me kā mākou e ʻike koke ai, hiki ke hoʻohana ʻia kēia ʻano hana e hana i ka hōʻoia runtime.

Ho'āʻo hoʻohui maʻalahi

No ka ʻike ʻana i kēia i ka hana, e nānā mākou i ka waihona pulumi/examples, no ka hoʻohana ʻana o kā mākou hui a me ke kaiāulu Pulumi e hoʻāʻo i kā mākou mau noi huki ponoʻī, hana, a me ke kūkulu ʻana i ka pō.

Aia ma lalo iho kahi ho'āʻo maʻalahi o kā mākou laʻana e hāʻawi ana i ka bakeke S3 a me kekahi mau mea ʻē aʻe:

example_test.go:

package test
 
import (
    "os"
    "path"
    "testing"
 
    "github.com/pulumi/pulumi/pkg/testing/integration"
)
 
func TestExamples(t *testing.T) {
    awsRegion := os.Getenv("AWS_REGION")
    if awsRegion == "" {
        awsRegion = "us-west-1"
    }
    cwd, _ := os.Getwd()
    integration.ProgramTest(t, &integration.ProgramTestOptions{
        Quick:       true,
        SkipRefresh: true,
        Dir:         path.Join(cwd, "..", "..", "aws-js-s3-folder"),
        Config: map[string]string{
            "aws:region": awsRegion,
        },
    })
}

Ke hele nei kēia ho'āʻo ma ke ʻano o ke ola o ka hana ʻana, hoʻololi, a me ka luku ʻana i kahi waihona no kahi waihona aws-js-s3-folder. Ma kahi o hoʻokahi minuke e hōʻike i kahi hōʻike i hala:

$ go test .
PASS
ok      ... 43.993s

Nui nā koho e hoʻopilikino i ke ʻano o kēia mau hoʻokolohua. E ʻike i ka papa inoa piha o nā koho. i loko o ka hale ProgramTestOptions. No ka laʻana, hiki iā ʻoe ke hoʻonohonoho iā Jaeger endpoint e huli (Tracing), e hōʻike i kou manaʻo e hāʻule ka hoʻāʻo inā maikaʻi ʻole ka hoʻāʻo (ExpectFailure), e hoʻopili i kekahi ʻano o nā "hoʻoponopono" i ka papahana no ka hoʻololi ʻana o nā mokuʻāina (EditDirs) a he nui hou aku. E ʻike kākou pehea e hoʻohana ai ia mau mea e hoʻāʻo ai i kāu hoʻolaha noi.

Ke nānā nei i nā waiwai waiwai

ʻO ka hoʻohui i kūkākūkā ʻia ma luna e hōʻoia i kā mākou papahana "hana" - ʻaʻole ia e hāʻule. Akā, pehea inā makemake mākou e nānā i nā waiwai o ka hopena hopena? No ka laʻana, ua hoʻolako ʻia kekahi ʻano kumu waiwai (a ʻaʻole paha) a loaʻa iā lākou kekahi mau ʻano.

ʻO ka pākuhi ExtraRuntimeValidation no ka mea, ProgramTestOptions hiki iā mākou ke nānā i ke kūlana post-deployment i hoʻopaʻa ʻia e Pulumi i hiki iā mākou ke hana i nā loiloi hou aku. Loaʻa kēia i kahi kiʻi piha o ka mokuʻāina o ka waihona hopena, me ka hoʻonohonoho ʻana, nā waiwai hoʻopuka i lawe ʻia i waho, nā kumuwaiwai āpau a me nā waiwai waiwai, a me nā hilinaʻi āpau ma waena o nā kumuwaiwai.

No ka ʻike ʻana i kahi hiʻohiʻona maʻamau o kēia, e nānā mākou i hana kā mākou papahana i hoʻokahi S3 Bākeke:

  integration.ProgramTest(t, &integration.ProgramTestOptions{
        // as before...
        ExtraRuntimeValidation: func(t *testing.T, stack integration.RuntimeValidationStackInfo) {
            var foundBuckets int
            for _, res := range stack.Deployment.Resources {
                if res.Type == "aws:s3/bucket:Bucket" {
                    foundBuckets++
                }
            }
            assert.Equal(t, 1, foundBuckets, "Expected to find a single AWS S3 Bucket")
        },
    })

I kēia manawa, i ka wā e holo ai mākou i ka hoʻāʻo ʻana, ʻaʻole ia e hele wale i loko o kahi pākaukau o nā hoʻokolohua lifecycle, akā pū kekahi, ma hope o ka hoʻokō pono ʻana i ka hoʻopaʻa ʻana, e hana ʻo ia i kahi hōʻoia hou i ke kūlana hopena.

Nā ho'āʻo manawa holo

I kēia manawa, pili wale nā ​​hoʻāʻo a pau e pili ana i ka hana hoʻolaha a me ke kumu kumu kumu Pulumi. He aha inā makemake ʻoe e hōʻoia i ka hana maoli ʻana o kāu ʻōnaehana i hoʻolako ʻia? No ka laʻana, ke holo nei ka mīkini virtual, aia ka bakeke S3 i ka mea a mākou e manaʻo ai, a pēlā aku.

Ua kuhi mua paha ʻoe pehea e hana ai i kēia: koho ExtraRuntimeValidation no ka mea, ProgramTestOptions - he manawa kūpono kēia no kēia. I kēia manawa, holo ʻoe i kahi hoʻāʻo maʻamau ʻo Go me ke komo ʻana i ke kūlana piha o nā kumuwaiwai o kāu polokalamu. Aia kēia moku'āina i ka ʻike e like me nā IP address machine virtual, URL, a me nā mea āpau e pono ai e launa pū me nā noi ao a me nā ʻōnaehana.

No ka laʻana, hoʻopuka kā mākou papahana hoʻāʻo i ka waiwai webEndpoint bakeke i kāhea ʻia websiteUrl, ʻo ia ka URL piha kahi e hiki ai iā mākou ke hoʻonohonoho index document. ʻOiai hiki iā mākou ke ʻeli i ka faila mokuʻāina e ʻimi bucket a heluhelu pololei i kēlā waiwai, akā i nā manawa he nui e hoʻokuʻu aku kā mākou stacks i nā waiwai pono e like me kēia a mākou e ʻike pono ai e hoʻohana no ka nānā ʻana:

integration.ProgramTest(t, &integration.ProgramTestOptions{
            // as before ...
        ExtraRuntimeValidation: func(t *testing.T, stack integration.RuntimeValidationStackInfo) {
            url := "http://" + stack.Outputs["websiteUrl"].(string)
            resp, err := http.Get(url)
            if !assert.NoError(t, err) {
                return
            }
            if !assert.Equal(t, 200, resp.StatusCode) {
                return
            }
            defer resp.Body.Close()
            body, err := ioutil.ReadAll(resp.Body)
            if !assert.NoError(t, err) {
                return
            }
            assert.Contains(t, string(body), "Hello, Pulumi!")
        },
    })

E like me kā mākou mau loiloi runtime mua, e hoʻokō koke ʻia kēia loiloi ma hope o ka hoʻāla ʻana i ka waihona, nā mea āpau i pane i kahi kelepona maʻalahi go test. A ʻo ia wale nō ka piko o ka hau hau—ʻo kēlā me kēia hiʻohiʻona hoʻāʻo Go hiki iā ʻoe ke kākau i ke code aia.

Hoʻohui mau ʻoihana

Maikaʻi ka hiki ke holo i nā hoʻāʻo ma ka pona i ka wā e hana ʻia ai ka nui o nā hoʻololi ʻenehana e hoʻāʻo iā lākou ma mua o ka waiho ʻana iā lākou no ka loiloi code. Akā ʻo mākou a me nā mea he nui o kā mākou mea kūʻai aku e hoʻāʻo i nā ʻōnaehana ma nā ʻano like ʻole o ke kaʻina ola hoʻomohala:

  • I kēlā me kēia hāmama huki noi no ka hoʻāʻo ma mua o ka hui ʻana.
  • Ma ka pane ʻana i kēlā me kēia hana, e nānā pālua i ka hana pololei ʻana o ka hui.
  • I kēlā me kēia manawa, e like me ka pō a i kēlā me kēia pule no ka hoʻāʻo hou.
  • Ma ke ʻano o ka hana a i ʻole ka hoʻāʻo koʻikoʻi, e holo maʻamau i kahi manawa lōʻihi a holo i nā hoʻāʻo i ka like a/a i ʻole e hoʻohana i ka papahana like i nā manawa he nui.

No kēlā me kēia, kākoʻo ʻo Pulumi i ka hoʻohui ʻana me kāu ʻōnaehana hoʻohui mau punahele. Me ka hoʻohui mau ʻana, hāʻawi kēia iā ʻoe i ka uhi hoʻāʻo like no kāu ʻōnaehana e like me kāu polokalamu noi.

Loaʻa iā Pulumi ke kākoʻo no nā ʻōnaehana CI maʻamau. Eia kekahi o lākou:

No ka ʻike kikoʻī hou aku, e ʻoluʻolu e nānā i ka palapala no Lawe mau.

Kaiapuni Ephemeral

ʻO kahi manawa ikaika loa e wehe ai ʻo ia ka hiki ke hoʻonohonoho i nā kaiapuni ephemeral wale nō no nā kumu hoʻāʻo ʻae. Manaʻo nā papahana a me nā pūʻulu Hoʻolālā ʻia ʻo Pulumi e hoʻonohonoho maʻalahi a wāwahi i nā kaiapuni kaʻawale a kūʻokoʻa, nā mea āpau i nā kauoha CLI maʻalahi a i ʻole ka hoʻohana ʻana i kahi papa hana hoʻāʻo hoʻohui.

Inā ʻoe e hoʻohana iā GitHub, a laila hāʻawi ʻo Pulumi GitHub App, e kōkua iā ʻoe e hoʻopili i ka hoʻāʻo ʻana e huki i nā noi i loko o kāu pipeline CI. E hoʻokomo wale i ka noi ma ka waihona GitHub, a e hoʻohui ʻo Pulumi i ka ʻike e pili ana i nā hiʻohiʻona o ka ʻōnaehana, nā mea hou a me nā hopena hoʻāʻo i kāu mau noi CI a me ka wai.

ʻO ka hoʻāʻo ʻana i nā mea hana e like me ke Code me Pulumi. Mahele 2

Ke hoʻohana ʻoe iā Pulumi no kāu mau hoʻāʻo ʻae ʻana, e loaʻa iā ʻoe nā mana automation hou e hoʻomaikaʻi ai i ka huahana hui a hāʻawi iā ʻoe i ka hilinaʻi i ka maikaʻi o kāu mau loli.

ʻO ka hopena

Ma kēia ʻatikala, ua ʻike mākou ma ka hoʻohana ʻana i nā ʻōlelo hoʻolālā kumu nui, loaʻa iā mākou nā ʻenehana hoʻomohala polokalamu he nui i pono i ka hoʻomohala ʻana i kā mākou mau noi. Loaʻa iā lākou ka hoʻāʻo ʻana, ka hoʻāʻo hoʻohui ʻana, a me ke ʻano o kā lākou hana pū ʻana e hana i ka hoʻāʻo holo lōʻihi. Maʻalahi nā hoʻokolohua e holo ma ke koi a i kāu ʻōnaehana CI.

Pulumi - lako polokalamu open source, manuahi e hoʻohana a hana pū me kāu mau ʻōlelo papahana punahele a me nā ao - e hoao i keia la!

Mahele mua

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka