ื ืืืื ืืขืืขืจ. ืืืึทื ื ืืืจ ืืืืื ืืื ืืืจ ืื ืืขืฆื ืืืื ืคืื ืืขื ืึทืจืืืงื.
ืืืคึผืืืืืึทื ื ืืขืกืืื ื
ืืขื ื ืืกื ืคืื ืืขืกืืื ื ืืื ืึท ืฉืืึทืจืง ืฆืืืึทื ื ืืื ืึทืืึทืื ืืื ืื ืฆื ืืืจืืคืืจื ืืืืึทืก ืงืขืกืื ืืขืกืืื ื ืฆื ืคึผืจืืืืจื ืื ืื ืขืจืืขื ืืืขืจืงืื ืื ืคืื ืืื ืืืขืจ ืื ืคืจืึทืกืืจืึทืงืืฉืขืจ ืงืึธื. ืึธืืขืจ, ืขืก ืึท ืืืกื ืืืืึทืฅ ืืืึธืก ืืืจ ืงืขื ืขื ืคึผืจืืืืจื. ืื ืืขืกืฅ ืืขื ืขื ืืืจืืืขืงืึธืื ืืืืืจื ืืืืฃ ืื ืืื-ืืืงืึธืจื ืืืคึผืืืืืึทื ื ืคึผืืึทื ืืืฉืืคื ืืืจื Pulumi ืืืืืขืจ ืื ืคืึทืงืืืฉ ืืืคึผืืืืืึทื ื ืืื ืืขืจืืืขืจ ืื ืืืคึผืืืืืึทื ื ืืื ืงืขื ืขื ื ืื ืืืื ืืขืกืืขื. ืคึฟืึทืจ ืึทืืึท ืงืึทืกืขืก, Pulumi ืืื ืึทื ืื ืืึทืืจืืืฉืึทื ืคึผืจืืืืจื ืคืจืืืืืืขืจืง. ืืื ืื ืฆืืืื ืึทืคึผืจืึธืืืฉืื ืึทืจืืขื ืืจืืืก ืฆืืืึทืืขื!
ืื Pulumi ืื ืืึทืืจืืืฉืึทื ืืขืกืืื ื ืคืจืืืืืืขืจืง ืืื ืืขืฉืจืืื ืืื Go, ืืืึธืก ืืื ืืื ืืืจ ืคึผืจืืืืจื ืจืืึฟ ืคืื ืืื ืืืขืจ ืื ืขืจืืขื ืงืึธื. ืืฉืขืช ืื ืคืจืืขืจ ืืืกืงืึทืกื ืึทืคึผืึทืจืึทื ืืขืกืืื ื ืฆืืืึทื ื ืืื ืืขืืืขื ืืขืจ ืืื ืืืืึทืก ืงืขืกืื ืืขืกืืื ื, ืื ืืึทืืจืืืฉืึทื ืืขืกืืื ื ืืื ืึท ืฉืืืึทืจืฅ ืงืขืกืื. (ืขืก ืืขื ืขื ืืืื ืึธืคึผืฆืืขืก ืคึฟืึทืจ ืฉืืจืขื ื ืื ืขืจืืขื ืืขืกืืื ื.) ืื ืคืจืืืืืืขืจืง ืืื ืืขืืืขื ืืืฉืืคื ืฆื ื ืขืืขื ืึท ืืึทื ืฅ ืคึผืืืืื ืคึผืจืึธืืจืึทื ืืื ืืืจืืคืืจื ืคืึทืจืฉืืื ืืืืคืกืืงืืข ืึทืคึผืขืจืืืฉืึทื ื ืืืืฃ ืขืก, ืึทืืึท ืืื ืืืคึผืืืืื ื ืึท ื ืืึทืข ืึธื ืืืืื ืคึฟืื ืงืจืึทืฆื, ืึทืคึผืืืืืื ื ืขืก ืืื ืืืขืจืืืืฉืึทื ื ืืื ืืืกืืขืงื ืขืก, ืขืคืฉืขืจ ืขืืืขืืข ืืึธื . ืืืจ ืืืืคื ืืื ืงืขืกืืืืขืจ (ืคึฟืึทืจ ืืืึทืฉืคึผืื, ืืืึท ื ืึทืื) ืืื ืืื ืืจืืง ืืขืกืฅ.
(ืืืจ
ืืืจื ืืืืคื ืืขื ืคึผืจืึธืืจืึทื ื ืืฆื ืืขื ืคืจืืืืืืขืจืง ืืืจ ืงืขื ืขื ืงืึธื ืืจืึธืืืจื ืื ืคืืืืขื ืืข:
- ืืืื ืคึผืจืืืขืงื ืงืึธื ืืื ืกืื ืืึทืงืืืงืื ืจืืืืืง ืืื ืืืืคื ืึธื ืขืจืจืึธืจืก.
- ืื ืึธื ืืืืื ืืื ืกืืงืจืืฅ ืงืึทื ืคืืืืขืจืืืฉืึทื ืกืขืืืื ืืก ืึทืจืืขื ืืื ืืขื ืขื ืื ืืขืจืคึผืจืึทืืึทื ืจืืืืืง.
- ืืืื ืคึผืจืืืขืงื ืงืขื ืขื ืืืื ืืฆืืื ืืืคึผืืืื ืืื ืื ืืืึธืืงื ืฉืคึผืืึทืืขืจ ืคืื ืืืื ืืจืืจื.
- ืืืื ืคึผืจืืืขืงื ืงืขื ืขื ืืืื ืืฆืืื ืึทืคึผืืจืืืืื ืคืื ืื ืขืจืฉื ืฉืืึทื ืฆื 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
. ืขืก ืืืขื ื ืขืืขื ืืืขืื ืึท ืืื ืื ืฆื ืืึทืจืืื ืึท ืืืจืืืขืืื ืืขื ืคึผืจืึธืืข:
$ 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")
},
})
ืืืฆื, ืืืขื ืืืจ ืืืืคื ืืืื ืคึผืจืืืืจื, ืขืก ืืืขื ื ืืฉื ืืืืื ืืืจืืืืื ืึท ืืึทืืึทืจืืืข ืคืื โโโโืืืคืขืกืืงืืข ืืขืกืฅ, ืึธืืขืจ ืืืื, ื ืึธื ืืฆืืื ืืืคึผืืืืื ื ืืขื ืึธื ืืืืื, ืขืก ืืืขื ืืืจืืคืืจื ืึทื ื ืึธื ืืฉืขืง ืืืืฃ ืื ืจืืืึทืืืื ื ืฉืืึทื.
ืจืื ืืืืข ืืขืกืฅ
ืืื ืืืฆื, ืึทืืข ืืขืกืฅ ืืึธืื ืืขืืืขื ืืืืื ืืืขืื ืืืคึผืืืืืึทื ื ื ืึทืืืจ ืืื ืื Pulumi ืืืื ืืึธืืขื. ืืืึธืก ืืืื ืืืจ ืืืืื ืฆื ืืึทืฉืืขืืืงื ืึทื ืืืื ืคึผืจืึทืืืืืฉืึทื ื ืื ืคืจืึทืกืืจืึทืงืืฉืขืจ ืึทืงืฉืื ืึทืจืืขื? ืคึฟืึทืจ ืืืึทืฉืคึผืื, ืึทื ืื ืืืืจืืืึทื ืืึทืฉืื ืืื ืคืืืกื ืืืง, ืื S3 ืขืืขืจ ืึผืืื ืืืึธืก ืืืจ ืืขืจืืืึทืจืื, ืืื ืึทืืื ืืืืฃ.
ืืืจ ืงืขื ืืึธืื ืฉืืื ืืขืกื ืืื ืฆื ืืึธื ืืึธืก: ืึธืคึผืฆืืข ExtraRuntimeValidation
ืคืึทืจ ProgramTestOptions
- ืืึธืก ืืื ืึท ืืจืืืก ืืขืืขืื ืืืื ืคึฟืึทืจ ืืขื. ืืื ืืขื ืคืื ื, ืืืจ ืืืืคื ืึท ืื ืื ืืืื ืคึผืจืึธืืข ืืื ืึทืงืกืขืก ืฆื ืื ืคืื ืฉืืึทื ืคืื ืืืื ืคึผืจืึธืืจืึทื ืก ืจืขืกืืจืกื. ืืขืจ ืฉืืึทื ืืืื ืืื ืคึฟืึธืจืืึทืฆืืข ืึทืืึท ืืื ืืืืจืืืึทื ืืึทืฉืื 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
. ืืื ืืึธืก ืืื ื ืึธืจ ืืขืจ ืฉืคึผืืฅ ืคืื ืื ืืืกืืขืจื - ืืขืืขืจ ืืืื ืคึผืจืืืืจื ืฉืืจืื ืืืจ ืงืขื ืขื ืฉืจืืึทืื ืืื ืงืึธื ืืื ืื ืืืฆื.
ืงืขืกืืืืขืจืืืง ืื ืคืจืึทืกืืจืึทืงืืฉืขืจ ืื ืืขืืจืึทืืืึธื
ืขืก ืืื ืืื ืฆื ืงืขื ืขื ืืืืคื ืืขืกืฅ ืืืืฃ ืึท ืืึทืคึผืืึทืคึผ ืืืขื ืคืืืข ืื ืคืจืึทืกืืจืึทืงืืฉืขืจ ืขื ืืขืจืื ืืขื ืืขื ืขื ืืขืืืื ืฆื ืคึผืจืืืืจื ืืื ืืืืืขืจ ืืื ืคืึธืจืืืืื ืคึฟืึทืจ ืงืึธื ืึธืคึผืฉืึทืฆืื ื. ืึธืืขืจ ืืืจ ืืื ืคืืืข ืคืื โโโโืืื ืืืขืจ ืงืืืืึทื ืฅ ืคึผืจืืืืจื ืื ืคืจืึทืกืืจืึทืงืืฉืขืจ ืืื ืคืึทืจืฉืืื ืกืืึทืืขืก ืคืื ืื ืึทื ืืืืืงืืื ื ืืืืคืกืืืง:
- ืืื ืืขืืขืจ ืขืคืขื ืขื ืฆืืขื ืืขืื ืคึฟืึทืจ ืืขืกืืื ื ืืืืืขืจ ืืขืจืืืฉืื ื.
- ืืื ืขื ืืคืขืจ ืฆื ืืขืืขืจ ืืืขืจืืขืื, ืฆื ืืึธืคึผื ืืฉืขืง ืึทื ืื ืฆืื ืืืคืืืกื ืืื ืืืจืืืขืงืึธืื ืจืืืืืง.
- ืคึผืืจืืึทืืืงืื, ืึทืืึท ืืื ืืืึท ื ืึทืื ืึธืืขืจ ืืืืื ืฉืจืืคื ืคึฟืึทืจ ื ืึธื ืืขืกืืื ื.
- ืืื ืึท ืืืื ืคืื ืคืึธืจืฉืืขืืื ื ืึธืืขืจ ืืจืืง ืืขืกืืื ื, ืืืึธืก ืืืคึผืืงืื ืืืืคื ืืืืขืจ ืึท ืืึทื ื ืฆืืื ืืื ืืืืคื ืืขืกืฅ ืืื ืคึผืึทืจืึทืืขื ืืื / ืึธืืขืจ ืืืคึผืืืื ืื ืืขืืืข ืคึผืจืึธืืจืึทื ืขืืืขืืข ืืึธื.
ืคึฟืึทืจ ืืขืืขืจ ืคืื ืื, Pulumi ืฉืืืฆื ืื ืืึทืืจืืืฉืึทื ืืื ืืืื ืืึทืืืืกืืข ืงืขืกืืืืขืจืืืง ืื ืืึทืืจืืืฉืึทื ืกืืกืืขื. ืืื ืงืขืกืืืืขืจืืืง ืื ืึทืืจืืืฉืึทื, ืืึธืก ืืื ืืืจ ืื ืืขืืืข ืคึผืจืึธืืข ืงืึทืืืขืจืืืืฉ ืคึฟืึทืจ ืืืื ืื ืคืจืึทืกืืจืึทืงืืฉืขืจ ืืื ืคึฟืึทืจ ืืืื ืึทืคึผืืึทืงืืืฉืึทื ืืืืืืืืืจื.
Pulumi ืืื ืฉืืืฆื ืคึฟืึทืจ ืคึผืจืึธืกื ืกื ืกืืกืืขืืขื. ืืึธ ืืขื ืขื ืขืืืขืืข ืคืื โโืืื:
AWS ืงืึธื ืกืขืจืืืืกืขืก ืึทืืืจืข ืืขืืืึธืคึผืก CircleCI GitHub ืึทืงืืืึธื ืก ืืืืืึทื ืกื Google ืงืืึธืื ืืืืขื ืืจืึทืืืืก
ืคึฟืึทืจ ืืขืจ ืืืืืืื ืืื ืคึฟืึธืจืืึทืฆืืข, ืืืืข ืึธืคึผืฉืืงื ืฆื ืื ืืึทืงืืืืขื ืืืืฉืึทื ืคึฟืึทืจ
ืขืคืขืืขืจืึทื ืื ืืืืืจืึทื ืืึทื ืฅ
ื ืืืืขืจ ืฉืืึทืจืง ืืขืืขืื ืืืื ืืืึธืก ืึธืคึผืขื ืก ืืื ืืื ืื ืคืืืืงืืื ืฆื ืฆืขืืืืงืืขื ืืคืขืืขืจืึทื ืื ืืืืืจืึทื ืืึทื ืฅ ืืืืื ืคึฟืึทืจ ืึทืงืกืขืคึผืืึทื ืก ืืขืกืืื ื ืฆืืืขืงื. ืืึทืืจืืฃ
ืืืื ืืืจ ื ืืฆื GitHub, Pulumi ืึธืคืคืขืจืก
ืืืขื ืืืจ ื ืืฆื Pulumi ืคึฟืึทืจ ืืืื ืืึทืจืฅ ืึทืงืกืขืคึผืืึทื ืก ืืขืกืฅ, ืืืจ ืืืขื ืืึทืงืืืขื ื ืืึทืข ืึธืืึทืืืืฉืึทื ืงืืืคึผืึทืืืืึทืืื ืืืึธืก ืืืขื ืคึฟืึทืจืืขืกืขืจื ืืึทื ืฉืึทืคึฟื ืคึผืจืึธืืืึทืงืืืืืืื ืืื ืืขืื ืืืจ ืืืืื ืืื ืื ืงืืืึทืืืืขื ืคืื ืืืื ืขื ืืขืจืื ืืขื.
ืืึทื ืฅ
ืืื ืืขื ืึทืจืืืงื, ืืืจ ืืึธืื ืืขืืขื ืึทื ืืืจื ื ืืฆื ืึทืืืขืืืื ืข ืคึผืจืึธืืจืึทืืืื ื ืฉืคืจืึทืื, ืคืืืข ืืืืืืืืืจื ืึทื ืืืืืงืืื ื ืืขืงื ืืงืก ืืืขืจื ืื ืืืฆื ืคึฟืึทืจ ืืื ืื ืืืึธืก ืืึธืื ืืขืืืขื ื ืืฆืืง ืืื ืืขืืืขืืึธืคึผืื ื ืืื ืืืขืจ ืึทืคึผืืึทืงืืืฉืึทื ื. ืืื ืึทืจืืึทื ื ืขืืขื ืึทืคึผืึทืจืึทื ืืขืกืืื ื, ืื ืืึทืืจืืืฉืึทื ืืขืกืืื ื ืืื ืืื ืืื ืึทืจืืขืื ืฆืืืึทืืขื ืฆื ืืืจืืคืืจื ืืจืืื ืจืื ืืืืข ืืขืกืืื ื. ืืขืกืฅ ืืขื ืขื ืืจืื ื ืฆื ืืืืคื ืืืืฃ ืืึธื ืขื ืึธืืขืจ ืืื ืืืื ืกื ืกืืกืืขื.
Pulumi - ืึธืคึฟื ืืงืืจ ืืืืืืืืืจื, ืคืจืื ืฆื ื ืืฆื ืืื ืึทืจืืขื ืืื ืืืื ืืึทืืืืกืืข ืคึผืจืึธืืจืึทืืืื ื ืฉืคึผืจืึทืื ืืื ืืืืืงื ืก -
โ
ืืงืืจ: www.habr.com