ããã«ã¡ã¯ãã¿ããªã ä»æ¥ã¯èšäºã®æåŸã®éšåã玹ä»ããŸãã
å°å ¥ãã¹ã
ãã®ã¹ã¿ã€ã«ã®ãã¹ãã¯åŒ·åãªã¢ãããŒãã§ããããã¯ã€ã ããã¯ã¹ ãã¹ããå®è¡ããŠã€ã³ãã©ã¹ãã©ã¯ã㣠ã³ãŒãã®å
éšåäœããã¹ãã§ããŸãã ãã ãããã¹ãã§ããå
容ãããçšåºŠå¶éãããŸãã ãã¹ãã¯ãå®éã®å±éåã« Pulumi ã«ãã£ãŠäœæãããã¡ã¢ãªå
å±éèšç»ã«åºã¥ããŠå®è¡ããããããå±éèªäœããã¹ãããããšã¯ã§ããŸããã ãã®ãããªå Žåã«åããŠãPulumi ã«ã¯çµ±åãã¹ã ãã¬ãŒã ã¯ãŒã¯ããããŸãã ããã XNUMX ã€ã®ã¢ãããŒãã¯ããŸãé£æºããŸãã
Pulumi çµ±åãã¹ã ãã¬ãŒã ã¯ãŒã¯ã¯ Go ã§æžãããŠããããããã»ãšãã©ã®å
éšã³ãŒãã®ãã¹ãæ¹æ³ã§ãã åè¿°ã®åäœãã¹ãã®ã¢ãããŒãã¯ãã¯ã€ã ããã¯ã¹ ãã¹ãã«äŒŒãŠããŸããããçµ±åãã¹ãã¯ãã©ã㯠ããã¯ã¹ã§ãã (å³å¯ãªå
éšãã¹ãçšã®ãªãã·ã§ã³ããããŸãã) ãã®ãã¬ãŒã ã¯ãŒã¯ã¯ãå®å
šãª Pulumi ããã°ã©ã ãååŸããããã«å¯ŸããŠããŸããŸãªã©ã€ããµã€ã¯ã«æäœ (æ°ããã¹ã¿ãã¯ãæåãããããã€ãããããªãšãŒã·ã§ã³ãå ããŠæŽæ°ãããåé€ãããªã©) ãããããè€æ°åå®è¡ããããã«äœæãããŸããã ã å®æç (å€éãªã©) ããã³ã¹ãã¬ã¹ ãã¹ããšããŠãã¹ããå®è¡ããŸãã
ïŒç§ãã¡ã¯
ãã®ãã¬ãŒã ã¯ãŒã¯ã䜿çšããŠããã°ã©ã ãå®è¡ãããšã次ã®ããšã確èªã§ããŸãã
- ãããžã§ã¯ã ã³ãŒãã¯æ§æçã«æ£ããããšã©ãŒãªãã§å®è¡ãããŸãã
- ã¹ã¿ãã¯ãšã·ãŒã¯ã¬ããã®æ§æèšå®ã¯æ©èœããæ£ãã解éãããŸãã
- ãããžã§ã¯ãã¯ãéžæããã¯ã©ãŠã ãããã€ããŒã«æ£åžžã«ãããã€ã§ããŸãã
- ãããžã§ã¯ãã¯åæç¶æ ããä»ã® N ç¶æ ã«æ£åžžã«ã¢ããã°ã¬ãŒãã§ããŸãã
- ãããžã§ã¯ãã¯æ£åžžã«ç Žæ£ãããã¯ã©ãŠã ãããã€ããŒããåé€ãããŸãã
ããã«èª¬æããããã«ããã®ãã¬ãŒã ã¯ãŒã¯ã¯å®è¡ææ€èšŒã®å®è¡ã«ã䜿çšã§ããŸãã
ç°¡åãªçµåãã¹ã
ãããå®éã«åäœããŠããããšã確èªããã«ã¯ããªããžããªãèŠãŠã¿ãŸããã pulumi/examples
ãç§ãã¡ã®ããŒã ãš Pulumi ã³ãã¥ããã£ã¯ãç¬èªã®ãã« ãªã¯ãšã¹ããã³ããããå€éãã«ãããã¹ãããããã«ããã䜿çšããŠããããã§ãã
以äžã¯ç§ãã¡ã®ç°¡åãªãã¹ãã§ã
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,
},
})
}
ãã®ãã¹ãã§ã¯ããã©ã«ããŒã®ã¹ã¿ãã¯ã®äœæãå€æŽãç Žæ£ãšããåºæ¬çãªã©ã€ããµã€ã¯ã«ãå®è¡ããŸãã aws-js-s3-folder
ã ãã¹ãã®åæ Œãå ±åããã«ã¯ãçŽ XNUMX åããããŸãã
$ go test .
PASS
ok ... 43.993s
ãããã®ãã¹ãã®åäœãã«ã¹ã¿ãã€ãºããããã®ãªãã·ã§ã³ãå€æ°ãããŸãã ãªãã·ã§ã³ã®å®å
šãªãªã¹ããåç
§ããŠãã ããã ProgramTestOptions
ã ããšãã°ãJaeger ãšã³ããã€ã³ãããã¬ãŒã¹ããããã«æ§æã§ããŸã (Tracing
)ããã¹ããé°æ§ã®å Žåã«ãã¹ãã倱æãããšäºæ³ãããããšã瀺ããŸã (ExpectFailure
)ãäžé£ã®ãç·šéããããã°ã©ã ã«é©çšããŠãç¶æ
ãé 次é·ç§»ãããŸã(EditDirs
ïŒãªã©ãªã©ã ãããã䜿çšããŠã¢ããªã±ãŒã·ã§ã³ã®ãããã€ã¡ã³ãããã¹ãããæ¹æ³ãèŠãŠã¿ãŸãããã
ãªãœãŒã¹ã®ããããã£ã®ç¢ºèª
äžã§èª¬æããçµ±åã«ãããããã°ã©ã ã¯ã¯ã©ãã·ã¥ããã«ãåäœãããããšãä¿èšŒãããŸãã ããããçµæãšããŠåŸãããã¹ã¿ãã¯ã®ããããã£ã確èªãããå Žåã¯ã©ãããã°ããã§ãããã? ããšãã°ãç¹å®ã®çš®é¡ã®ãªãœãŒã¹ãããããžã§ãã³ã°ãããŠãã (ãŸãã¯ãããŠããªã) ããšãããã³ããããç¹å®ã®å±æ§ãæã£ãŠããããšãªã©ã§ãã
ãã©ã¡ãŒã¿ãŒ ExtraRuntimeValidation
ã®ããã« ProgramTestOptions
ããã«ãããPulumi ã«ãã£ãŠèšé²ãããå±éåŸã®ç¶æ
ã確èªã§ãããããè¿œå ã®ãã§ãã¯ãè¡ãããšãã§ããŸãã ããã«ã¯ãæ§æããšã¯ã¹ããŒããããåºåå€ããã¹ãŠã®ãªãœãŒã¹ãšãã®ããããã£å€ããªãœãŒã¹éã®ãã¹ãŠã®äŸåé¢ä¿ãå«ããçµæãšããŠåŸãããã¹ã¿ãã¯ã®ç¶æ
ã®å®å
šãªã¹ãããã·ã§ãããå«ãŸããŸãã
ãã®åºæ¬çãªäŸã確èªããããã«ãããã°ã©ã ãäœæããããšã確èªããŠã¿ãŸãããã S3ãã±ãã:
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")
},
})
ããã§ãgo test ãå®è¡ãããšãäžé£ã®ã©ã€ããµã€ã¯ã« ãã¹ããå®è¡ãããã ãã§ãªããã¹ã¿ãã¯ãæ£åžžã«ãããã€ãããåŸãçµæã®ç¶æ ã«ã€ããŠè¿œå ã®ãã§ãã¯ãå®è¡ãããŸãã
ã©ã³ã¿ã€ã ãã¹ã
ãããŸã§ã®ãšããããã¹ãŠã®ãã¹ãã¯çŽç²ã«ãããã€åäœãš Pulumi ãªãœãŒã¹ ã¢ãã«ã«é¢ãããã®ã§ããã ããããžã§ãã³ã°ãããã€ã³ãã©ã¹ãã©ã¯ãã£ãå®éã«æ©èœããããšã確èªãããå Žåã¯ã©ãããã°ããã§ãããã? ããšãã°ãä»®æ³ãã·ã³ãå®è¡äžã§ããããšãS3 ãã±ããã«äºæãããã®ãå«ãŸããŠããããšãªã©ã§ãã
ãããè¡ãæ¹æ³ã¯ãã§ã«æšæž¬ããŠãããããããŸãã: ãªãã·ã§ã³ ExtraRuntimeValidation
ã®ããã« ProgramTestOptions
-ããã¯çŽ æŽãããæ©äŒã§ãã ãã®æç¹ã§ãããã°ã©ã ã®ãªãœãŒã¹ã®å®å
šãªç¶æ
ã«ã¢ã¯ã»ã¹ããŠã«ã¹ã¿ã Go ãã¹ããå®è¡ããŸãã ãã®ç¶æ
ã«ã¯ãä»®æ³ãã·ã³ã® IP ã¢ãã¬ã¹ãURLãããã³çµæãšããŠåŸãããã¯ã©ãŠã ã¢ããªã±ãŒã·ã§ã³ãã€ã³ãã©ã¹ãã©ã¯ãã£ãšå®éã«å¯Ÿè©±ããããã«å¿
èŠãªãã¹ãŠã®æ
å ±ãå«ãŸããŸãã
ããšãã°ããã¹ã ããã°ã©ã ã¯ããããã£ããšã¯ã¹ããŒãããŸãã webEndpoint
åŒã°ãããã±ãã websiteUrl
ãããã¯æ§æããããã®ãååŸã§ããå®å
šãª URL ã§ãã index document
ã ç¶æ
ãã¡ã€ã«ã調ã¹ãŠèŠã€ããããšã¯ã§ããŸããã bucket
ãã®ããããã£ãçŽæ¥èªã¿åããŸãããå€ãã®å Žåãã¹ã¿ãã¯ã¯ãã§ãã¯ã«äœ¿çšãããšäŸ¿å©ãªæ¬¡ã®ãããªäŸ¿å©ãªããããã£ããšã¯ã¹ããŒãããŸãã
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!")
},
})
以åã®å®è¡æãã§ãã¯ãšåæ§ã«ããã®ãã§ãã¯ã¯ã¹ã¿ãã¯ãåŒãäžããçŽåŸã«å®è¡ããããã¹ãŠåçŽãªåŒã³åºãã«å¿çããŠå®è¡ãããŸãã go test
ã ãããŠãããã¯æ°·å±±ã®äžè§ã«ãããŸãããã³ãŒãã§èšè¿°ã§ãããã¹ãŠã® Go ãã¹ãæ©èœãå©çšå¯èœã§ãã
ç¶ç¶çãªã€ã³ãã©ã¹ãã©ã¯ãã£çµ±å
ã³ãŒãã¬ãã¥ãŒã«æåºããåã«ãã¹ãã®ããã«ã€ã³ãã©ã¹ãã©ã¯ãã£ã«å€ãã®å€æŽãå ããããå Žåã«ãã©ãããããã§ãã¹ããå®è¡ã§ããã®ã¯äŸ¿å©ã§ãã ããããç§ãã¡ãšå€ãã®ã¯ã©ã€ã¢ã³ãã¯ãéçºã©ã€ããµã€ã¯ã«ã®ããŸããŸãªæ®µéã§ã€ã³ãã©ã¹ãã©ã¯ãã£ããã¹ãããŸãã
- ããŒãžåã®ãã¹ãã®ãããéããŠãããã¹ãŠã®ãã« ãªã¯ãšã¹ãã§ã
- åã³ãããã«å¿ããŠãããŒãžãæ£ããè¡ãããããšãå確èªããŸãã
- è¿œå ã®æ€æ»ã®ããã«å€éãŸãã¯æ¯é±ãªã©å®æçã«ã
- ããã©ãŒãã³ã¹ ãã¹ããŸãã¯ã¹ãã¬ã¹ ãã¹ãã®äžç°ãšããŠãéåžžã¯é·æéã«ããã£ãŠãã¹ãã䞊è¡ããŠå®è¡ããããåãããã°ã©ã ãè€æ°åå±éãããããŸãã
ãããã®ããããã«ã€ããŠãPulumi ã¯ãæ°ã«å ¥ãã®ç¶ç¶ççµ±åã·ã¹ãã ãšã®çµ±åããµããŒãããŠããŸãã ç¶ç¶ççµ±åã«ãããã€ã³ãã©ã¹ãã©ã¯ãã£ã«å¯ŸããŠãã¢ããªã±ãŒã·ã§ã³ ãœãããŠã§ã¢ã«å¯ŸããŠãšåããã¹ãç¯å²ãæäŸãããŸãã
Pulumi ã¯äžè¬ç㪠CI ã·ã¹ãã ããµããŒãããŠããŸãã ãã®äžéšã次ã«ç€ºããŸãã
AWS ã³ãŒããµãŒãã¹ Azure DevOps ãµãŒã¯ã«CI GitHubã¢ã¯ã·ã§ã³ GitLab CI Google ã¯ã©ãŠã ãã«ã ãã©ãã¹
詳现ã«ã€ããŠã¯ã次ã®ããã¥ã¡ã³ããåç
§ããŠãã ããã
äžæçãªç°å¢
éåžžã«åŒ·åãªæ©äŒãéãããã®ã¯ãåãå
¥ããã¹ãã®ç®çã®ã¿ã«äžæçãªç°å¢ãå±éã§ããããšã§ãã ã³ã³ã»ãã
GitHub ã䜿çšããŠããå ŽåãPulumi ã¯ä»¥äžãæäŸããŸã
ã³ã¢åãå
¥ããã¹ãã« Pulumi ã䜿çšãããšãããŒã ã®çç£æ§ãåäžããå€æŽã®å質ã«èªä¿¡ãæãŠãæ°ããèªååæ©èœãåŸãããŸãã
åèš
ãã®èšäºã§ã¯ãæ±çšããã°ã©ãã³ã°èšèªã䜿çšããããšã§ãã¢ããªã±ãŒã·ã§ã³ã®éçºã«åœ¹ç«ã€å€ãã®ãœãããŠã§ã¢éçºãã¯ããã¯ãå©çšå¯èœã«ãªãããšãèŠãŠããŸããã ããã«ã¯ãåäœãã¹ããçµ±åãã¹ããããã³ããããé£æºããŠåºç¯ãªå®è¡æãã¹ããå®è¡ããæ¹æ³ãå«ãŸããŸãã ãã¹ãã¯ãªã³ããã³ããŸã㯠CI ã·ã¹ãã ã§ç°¡åã«å®è¡ã§ããŸãã
ãã«ã - ãªãŒãã³ãœãŒã¹ ãœãããŠã§ã¢ãç¡æã§äœ¿çšã§ãããæ°ã«å
¥ãã®ããã°ã©ãã³ã°èšèªãã¯ã©ãŠãã§åäœããŸã -
â
åºæïŒ habr.com