ื˜ืขืกื˜ื™ื ื’ ื™ื ืคืจืึทืกื˜ืจืึทืงื˜ืฉืขืจ ื•ื•ื™ ืงืึธื“ ืžื™ื˜ Pulumi. ื˜ื™ื™ืœ 2

ื ื’ื•ื˜ืŸ ื™ืขื“ืขืจ. ื”ื™ื™ึทื ื˜ ืžื™ืจ ื˜ื™ื™ืœืŸ ืžื™ื˜ ืื™ืจ ื“ื™ ืœืขืฆื˜ ื˜ื™ื™ืœ ืคื•ืŸ ื“ืขื ืึทืจื˜ื™ืงืœ. "ื˜ืขืกื˜ื™ื ื’ ื™ื ืคืจืึทืกื˜ืจืึทืงื˜ืฉืขืจ ื•ื•ื™ ืงืึธื“ ืžื™ื˜ Pulumi", ื“ื™ ืื™ื‘ืขืจื–ืขืฆื•ื ื’ ืคื•ืŸ ื•ื•ืึธืก ืื™ื– ื’ืขื•ื•ืขืŸ ืฆื•ื’ืขื’ืจื™ื™ื˜ ืกืคึผืึทืกื™ืคื™ืงืœื™ ืคึฟืึทืจ ืงื•ืจืก ืกื˜ื•ื“ืขื ื˜ืŸ "DevOps ืคึผืจืึทืงื˜ื™ืกื™ื– ืื•ืŸ ืžื›ืฉื™ืจื™ื".

ื˜ืขืกื˜ื™ื ื’ ื™ื ืคืจืึทืกื˜ืจืึทืงื˜ืฉืขืจ ื•ื•ื™ ืงืึธื“ ืžื™ื˜ Pulumi. ื˜ื™ื™ืœ 2

ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ื˜ืขืกื˜ื™ื ื’

ื“ืขื ื ื•ืกื— ืคื•ืŸ ื˜ืขืกื˜ื™ื ื’ ืื™ื– ืึท ืฉื˜ืึทืจืง ืฆื•ื’ืึทื ื’ ืื•ืŸ ืึทืœืึทื•ื– ืื•ื ื“ื– ืฆื• ื“ื•ืจื›ืคื™ืจืŸ ื•ื•ื™ื™ึทืก ืงืขืกื˜ืœ ื˜ืขืกื˜ื™ื ื’ ืฆื• ืคึผืจื•ื‘ื™ืจืŸ ื“ื™ ื™ื ืขืจืœืขืš ื•ื•ืขืจืงื™ื ื’ื– ืคื•ืŸ ืื•ื ื“ื–ืขืจ ื™ื ืคืจืึทืกื˜ืจืึทืงื˜ืฉืขืจ ืงืึธื“. ืึธื‘ืขืจ, ืขืก ืึท ื‘ื™ืกืœ ืœื™ืžืึทืฅ ื•ื•ืึธืก ืžื™ืจ ืงืขื ืขืŸ ืคึผืจื•ื‘ื™ืจืŸ. ื“ื™ ื˜ืขืกืฅ ื–ืขื ืขืŸ ื“ื•ืจื›ื’ืขืงืึธื›ื˜ ื‘ืื–ื™ืจื˜ ืื•ื™ืฃ ื“ื™ ืื™ืŸ-ื–ื™ืงืึธืจืŸ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืคึผืœืึทืŸ ื‘ืืฉืืคืŸ ื“ื•ืจืš Pulumi ืื™ื™ื“ืขืจ ื“ื™ ืคืึทืงื˜ื™ืฉ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืื•ืŸ ื“ืขืจื™ื‘ืขืจ ื“ื™ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ื–ื™ืš ืงืขื ืขืŸ ื ื™ื˜ ื–ื™ื™ืŸ ื˜ืขืกื˜ืขื“. ืคึฟืึทืจ ืึทื–ืึท ืงืึทืกืขืก, Pulumi ื”ืื˜ ืึทืŸ ื™ื ื˜ืึทื’ืจื™ื™ืฉืึทืŸ ืคึผืจื•ื‘ื™ืจืŸ ืคืจื™ื™ืžื•ื•ืขืจืง. ืื•ืŸ ื“ื™ ืฆื•ื•ื™ื™ ืึทืคึผืจืึธื•ื˜ืฉื™ื– ืึทืจื‘ืขื˜ ื’ืจื•ื™ืก ืฆื•ื–ืึทืžืขืŸ!

ื“ื™ Pulumi ื™ื ื˜ืึทื’ืจื™ื™ืฉืึทืŸ ื˜ืขืกื˜ื™ื ื’ ืคืจื™ื™ืžื•ื•ืขืจืง ืื™ื– ื’ืขืฉืจื™ื‘ืŸ ืื™ืŸ Go, ื•ื•ืึธืก ืื™ื– ื•ื•ื™ ืžื™ืจ ืคึผืจื•ื‘ื™ืจืŸ ืจื•ื‘ึฟ ืคื•ืŸ ืื•ื ื“ื–ืขืจ ื™ื ืขืจืœืขืš ืงืึธื“. ื‘ืฉืขืช ื“ื™ ืคืจื™ืขืจ ื“ื™ืกืงืึทืกื˜ ืึทืคึผืึทืจืึทื˜ ื˜ืขืกื˜ื™ื ื’ ืฆื•ื’ืึทื ื’ ืื™ื– ื’ืขื•ื•ืขืŸ ืžืขืจ ื•ื•ื™ ื•ื•ื™ื™ึทืก ืงืขืกื˜ืœ ื˜ืขืกื˜ื™ื ื’, ื™ื ื˜ืึทื’ืจื™ื™ืฉืึทืŸ ื˜ืขืกื˜ื™ื ื’ ืื™ื– ืึท ืฉื•ื•ืึทืจืฅ ืงืขืกื˜ืœ. (ืขืก ื–ืขื ืขืŸ ืื•ื™ืš ืึธืคึผืฆื™ืขืก ืคึฟืึทืจ ืฉื˜ืจืขื ื’ ื™ื ืขืจืœืขืš ื˜ืขืกื˜ื™ื ื’.) ื“ื™ ืคืจื™ื™ืžื•ื•ืขืจืง ืื™ื– ื’ืขื•ื•ืขืŸ ื‘ืืฉืืคืŸ ืฆื• ื ืขืžืขืŸ ืึท ื’ืึทื ืฅ ืคึผื•ืœื•ืžื™ ืคึผืจืึธื’ืจืึทื ืื•ืŸ ื“ื•ืจื›ืคื™ืจืŸ ืคืึทืจืฉื™ื“ืŸ ืœื™ื™ืคืกื™ืงืœืข ืึทืคึผืขืจื™ื™ืฉืึทื ื– ืื•ื™ืฃ ืขืก, ืึทื–ืึท ื•ื•ื™ ื“ื™ืคึผืœื•ื™ื™ื ื’ ืึท ื ื™ื™ึทืข ืึธื ืœื™ื™ื’ืŸ ืคึฟื•ืŸ ืงืจืึทืฆืŸ, ืึทืคึผื“ื™ื™ื˜ื™ื ื’ ืขืก ืžื™ื˜ ื•ื•ืขืจื™ื™ื™ืฉืึทื ื– ืื•ืŸ ื•ื™ืกืžืขืงืŸ ืขืก, ืขืคืฉืขืจ ืขื˜ืœืขื›ืข ืžืึธืœ . ืžื™ืจ ืœื•ื™ืคืŸ ื–ื™ื™ ืงืขืกื™ื™ื“ืขืจ (ืคึฟืึทืจ ื‘ื™ื™ึทืฉืคึผื™ืœ, ื‘ื™ื™ึท ื ืึทื›ื˜) ืื•ืŸ ื•ื•ื™ ื“ืจื•ืง ื˜ืขืกืฅ.

(ืžื™ืจ ืžื™ืจ ืืจื‘ืขื˜ืŸ ื“ืขืจื•ื™ืฃ, ืึทื–ื•ื™ ืึทื– ืขื ืœืขืš ื™ื ื˜ืึทื’ืจื™ื™ืฉืึทืŸ ื˜ืขืกื˜ื™ื ื’ ืงื™ื™ืคึผืึทื‘ื™ืœืึทื˜ื™ื– ื–ืขื ืขืŸ ื‘ื ื™ืžืฆื ืื™ืŸ ื“ื™ ื’ืขื‘ื•ื™ืจืŸ SDK ืคื•ืŸ ืฉืคึผืจืึทื›ืŸ. ืื™ืจ ืงืขื ื˜ ื ื•ืฆืŸ ื“ื™ Go ื™ื ืึทื’ืจื™ื™ืฉืึทืŸ ื˜ืขืกื˜ื™ื ื’ ืคืจื™ื™ืžื•ื•ืขืจืง ืจืึทื’ืึทืจื“ืœืึทืก ืคื•ืŸ ื“ื™ ืฉืคึผืจืึทืš ืื™ืŸ ื•ื•ืึธืก ื“ื™ื™ืŸ Pulumi ืคึผืจืึธื’ืจืึทื ืื™ื– ื’ืขืฉืจื™ื‘ืŸ).

ื“ื•ืจืš ืœื•ื™ืคืŸ ื“ืขื ืคึผืจืึธื’ืจืึทื ื ื™ืฆืŸ ื“ืขื ืคืจื™ื™ืžื•ื•ืขืจืง ืื™ืจ ืงืขื ืขืŸ ืงืึธื ื˜ืจืึธืœื™ืจืŸ ื“ื™ ืคืืœื’ืขื ื“ืข:

  • ื“ื™ื™ืŸ ืคึผืจื•ื™ืขืงื˜ ืงืึธื“ ืื™ื– ืกื™ื ื˜ืึทืงื˜ื™ืงืœื™ ืจื™ื›ื˜ื™ืง ืื•ืŸ ืœื•ื™ืคื˜ ืึธืŸ ืขืจืจืึธืจืก.
  • ื“ื™ ืึธื ืœื™ื™ื’ืŸ ืื•ืŸ ืกื™ืงืจื™ืฅ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ืกืขื˜ื˜ื™ื ื’ืก ืึทืจื‘ืขื˜ ืื•ืŸ ื–ืขื ืขืŸ ื™ื ื˜ืขืจืคึผืจืึทื˜ืึทื“ ืจื™ื›ื˜ื™ืง.
  • ื“ื™ื™ืŸ ืคึผืจื•ื™ืขืงื˜ ืงืขื ืขืŸ ื–ื™ื™ืŸ ื”ืฆืœื—ื” ื“ื™ืคึผืœื•ื™ื“ ืื™ืŸ ื“ื™ ื•ื•ืึธืœืงืŸ ืฉืคึผื™ื™ึทื–ืขืจ ืคื•ืŸ ื“ื™ื™ืŸ ื‘ืจื™ืจื”.
  • ื“ื™ื™ืŸ ืคึผืจื•ื™ืขืงื˜ ืงืขื ืขืŸ ื–ื™ื™ืŸ ื”ืฆืœื—ื” ืึทืคึผื’ืจื™ื™ื“ื™ื“ ืคื•ืŸ ื“ื™ ืขืจืฉื˜ ืฉื˜ืึทื˜ ืฆื• N ืื ื“ืขืจืข ืฉื˜ืึทื˜ืŸ.
  • ื“ื™ื™ืŸ ืคึผืจื•ื™ืขืงื˜ ืงืขื ืขืŸ ื–ื™ื™ืŸ ื”ืฆืœื—ื” ืฆืขืฉื˜ืขืจื˜ ืื•ืŸ ืึทื•ื•ืขืงื’ืขื ื•ืžืขืŸ ืคื•ืŸ ื“ื™ื™ืŸ ื•ื•ืึธืœืงืŸ ืฉืคึผื™ื™ึทื–ืขืจ.

ื•ื•ื™ ืžื™ืจ ื•ื•ืขืœืŸ ื–ืขืŸ ื‘ืึทืœื“, ื“ืขื ืคืจื™ื™ืžื•ื•ืขืจืง ืงืขื ืขืŸ ืื•ื™ืš ื–ื™ื™ืŸ ื’ืขื•ื•ื™ื™ื ื˜ ืฆื• ื“ื•ืจื›ืคื™ืจืŸ ืจื•ื ื˜ื™ืžืข ื•ื•ืึทืœืึทื“ื™ื™ืฉืึทืŸ.

ืคึผืฉื•ื˜ ื™ื ื˜ืึทื’ืจื™ื™ืฉืึทืŸ ืคึผืจื•ื‘ื™ืจืŸ

ืฆื• ื–ืขืŸ ื“ืขื ืื™ืŸ ืงืึทืžืฃ, ืžื™ืจ ื•ื•ืขืœืŸ ืงื•ืงืŸ ืื™ืŸ ื“ื™ ืจื™ืคึผืึทื–ืึทื˜ืึธืจื™ pulumi/examples, ื•ื•ื™ ืื•ื ื“ื–ืขืจ ืžืึทื ืฉืึทืคึฟื˜ ืื•ืŸ ื“ื™ Pulumi ืงื”ืœ ื ื™ืฆื˜ ืขืก ืฆื• ืคึผืจื•ื‘ื™ืจืŸ ืื•ื ื“ื–ืขืจ ืื™ื™ื’ืขื ืข ืฆื™ืขืŸ ืจื™ืงื•ื•ืขืก, ืงืึทืžื™ืฅ ืื•ืŸ ื ื™ื™ื˜ืœื™ ื‘ื•ื™ืขืŸ.

ื•ื ื˜ืขืจ ืื™ื– ืึท ืกื™ืžืคึผืœืึทืคื™ื™ื“ ืคึผืจืึธื‘ืข ืคื•ืŸ โ€‹โ€‹ืื•ื ื“ื–ืขืจ ื‘ื™ื™ืฉืคึผื™ืœ ื•ื•ืึธืก ื’ื™ื˜ S3 ืขืžืขืจ ืื•ืŸ ืขื˜ืœืขื›ืข ืื ื“ืขืจืข ืึทื‘ื“ื–ืฉืขืงืฅ:

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 ื”ืื˜ ืฉื˜ื™ืฆืŸ ืคึฟืึทืจ ืคึผืจืึธืกื˜ ืกื™ ืกื™ืกื˜ืขืžืขืŸ. ื“ืึธ ื–ืขื ืขืŸ ืขื˜ืœืขื›ืข ืคื•ืŸ โ€‹โ€‹ื–ื™ื™:

ืคึฟืึทืจ ืžืขืจ ื“ื™ื˜ื™ื™ืœื“ ืื™ื ืคึฟืึธืจืžืึทืฆื™ืข, ื‘ื™ื˜ืข ืึธืคึผืฉื™ืงืŸ ืฆื• ื“ื™ ื“ืึทืงื™ื•ืžืขื ื˜ื™ื™ืฉืึทืŸ ืคึฟืึทืจ ืงืขืกื™ื™ื“ืขืจื“ื™ืง ืขืงืกืคึผืจืขืก.

ืขืคืขืžืขืจืึทืœ ื™ื ื•ื•ื™ื™ืจืึทื ืžืึทื ืฅ

ื ื–ื™ื™ืขืจ ืฉื˜ืึทืจืง ื’ืขืœืขื’ื ื”ื™ื™ื˜ ื•ื•ืึธืก ืึธืคึผืขื ืก ื–ื™ืš ืื™ื– ื“ื™ ืคื™ื™ื™ืงื™ื™ื˜ ืฆื• ืฆืขื•ื•ื™ืงืœืขืŸ ื™ืคืขืžืขืจืึทืœ ื™ื ื•ื•ื™ื™ืจืึทื ืžืึทื ืฅ ื‘ืœื•ื™ื– ืคึฟืึทืจ ืึทืงืกืขืคึผื˜ืึทื ืก ื˜ืขืกื˜ื™ื ื’ ืฆื•ื•ืขืงืŸ. ื‘ืึทื’ืจื™ืฃ ืคึผืจืึทื“ื–ืฉืขืงืก ืื•ืŸ ืกื˜ืึทืงืก Pulumi ืื™ื– ื“ื™ื–ื™ื™ื ื“ ืฆื• ืœื™ื™ื›ื˜ ืฆืขื•ื•ื™ืงืœืขืŸ ืื•ืŸ ื˜ืจืขืจ ืึทืจืึธืคึผ ื’ืึธืจ ืืคื’ืขื–ื•ื ื“ืขืจื˜ ืื•ืŸ ืคืจื™ื™ึท ื™ื ื•ื•ื™ื™ืจืึทื ืžืึทื ืฅ, ืึทืœืข ืื™ืŸ ืึท ื‘ื™ืกืœ ืคึผืฉื•ื˜ CLI ืงืึทืžืึทื ื“ื– ืึธื“ืขืจ ื ื™ืฆืŸ ืึทืŸ ื™ื ื˜ืึทื’ืจื™ื™ืฉืึทืŸ ื˜ืขืกื˜ื™ื ื’ ืคืจื™ื™ืžื•ื•ืขืจืง.

ืื•ื™ื‘ ืื™ืจ ื ื•ืฆืŸ GitHub, Pulumi ืึธืคืคืขืจืก GitHub ืึทืคึผ, ื•ื•ืึธืก ื•ื•ืขื˜ ื”ืขืœืคึฟืŸ ืื™ืจ ืคืึทืจื‘ื™ื ื“ืŸ ืึทืงืกืขืคึผื˜ืึทื ืก ื˜ืขืกื˜ื™ื ื’ ืฆื• ืฆื™ืขืŸ ืจื™ืงื•ื•ืขืก ืื™ืŸ ื“ื™ื™ืŸ ืกื™ ืจืขืจื  - ืœื™ื ื™ืข. ื ืึธืจ ื™ื ืกื˜ืึทืœื™ืจืŸ ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืื™ืŸ ื“ื™ GitHub ืจื™ืคึผืึทื–ืึทื˜ืึธืจื™, ืื•ืŸ Pulumi ื•ื•ืขื˜ ืœื™ื™ื’ืŸ ืื™ื ืคึฟืึธืจืžืึทืฆื™ืข ื•ื•ืขื’ืŸ ื™ื ืคืจืึทืกื˜ืจืึทืงื˜ืฉืขืจ ืคึผืจื™ื•ื•ื™ื•ื–, ื“ืขืจื”ื™ื™ึทื ื˜ื™ืงื•ื ื’ืขืŸ ืื•ืŸ ื˜ืขืกื˜ื™ื ื’ ืจืขื–ื•ืœื˜ืึทื˜ืŸ ืฆื• ื“ื™ื™ืŸ ืกื™ ืื•ืŸ ื‘ืขืงืŸ ืจื™ืงื•ื•ืขืก:

ื˜ืขืกื˜ื™ื ื’ ื™ื ืคืจืึทืกื˜ืจืึทืงื˜ืฉืขืจ ื•ื•ื™ ืงืึธื“ ืžื™ื˜ Pulumi. ื˜ื™ื™ืœ 2

ื•ื•ืขืŸ ืื™ืจ ื ื•ืฆืŸ Pulumi ืคึฟืึทืจ ื“ื™ื™ืŸ ื”ืึทืจืฅ ืึทืงืกืขืคึผื˜ืึทื ืก ื˜ืขืกืฅ, ืื™ืจ ื•ื•ืขื˜ ื‘ืึทืงื•ืžืขืŸ ื ื™ื™ึทืข ืึธื˜ืึทืžื™ื™ืฉืึทืŸ ืงื™ื™ืคึผืึทื‘ื™ืœืึทื˜ื™ื– ื•ื•ืึธืก ื•ื•ืขื˜ ืคึฟืึทืจื‘ืขืกืขืจืŸ ืžืึทื ืฉืึทืคึฟื˜ ืคึผืจืึธื•ื“ืึทืงื˜ื™ื•ื•ื™ื˜ื™ ืื•ืŸ ื’ืขื‘ืŸ ืื™ืจ ื‘ื˜ื—ื•ืŸ ืื™ืŸ ื“ื™ ืงื•ื•ืึทืœื™ื˜ืขื˜ ืคื•ืŸ ื“ื™ื™ืŸ ืขื ื“ืขืจื•ื ื’ืขืŸ.

ื’ืึทื ืฅ

ืื™ืŸ ื“ืขื ืึทืจื˜ื™ืงืœ, ืžื™ืจ ื”ืึธื‘ืŸ ื’ืขื–ืขืŸ ืึทื– ื“ื•ืจืš ื ื™ืฆืŸ ืึทืœื’ืขืžื™ื™ื ืข ืคึผืจืึธื’ืจืึทืžืžื™ื ื’ ืฉืคืจืึทื›ืŸ, ืคื™ืœืข ื•ื•ื™ื™ื›ื•ื•ืืจื’ ืึทื ื˜ื•ื•ื™ืงืœื•ื ื’ ื˜ืขืงื ื™ืงืก ื•ื•ืขืจืŸ ื‘ื ื™ืžืฆื ืคึฟืึทืจ ืื•ื ื“ื– ื•ื•ืึธืก ื”ืึธื‘ืŸ ื’ืขื•ื•ืขืŸ ื ื•ืฆื™ืง ืื™ืŸ ื“ืขื•ื•ืขืœืึธืคึผื™ื ื’ ืื•ื ื“ื–ืขืจ ืึทืคึผืœืึทืงื™ื™ืฉืึทื ื–. ื–ื™ื™ ืึทืจื™ื™ึทื ื ืขืžืขืŸ ืึทืคึผืึทืจืึทื˜ ื˜ืขืกื˜ื™ื ื’, ื™ื ื˜ืึทื’ืจื™ื™ืฉืึทืŸ ื˜ืขืกื˜ื™ื ื’ ืื•ืŸ ื•ื•ื™ ื–ื™ื™ ืึทืจื‘ืขื˜ืŸ ืฆื•ื–ืึทืžืขืŸ ืฆื• ื“ื•ืจื›ืคื™ืจืŸ ื‘ืจื™ื™ื˜ ืจื•ื ื˜ื™ืžืข ื˜ืขืกื˜ื™ื ื’. ื˜ืขืกืฅ ื–ืขื ืขืŸ ื’ืจื™ื ื’ ืฆื• ืœื•ื™ืคืŸ ืื•ื™ืฃ ืžืึธื ืขืŸ ืึธื“ืขืจ ืื™ืŸ ื“ื™ื™ืŸ ืกื™ ืกื™ืกื˜ืขื.

Pulumi - ืึธืคึฟืŸ ืžืงื•ืจ ื•ื•ื™ื™ื›ื•ื•ืืจื’, ืคืจื™ื™ ืฆื• ื ื•ืฆืŸ ืื•ืŸ ืึทืจื‘ืขื˜ ืžื™ื˜ ื“ื™ื™ืŸ ื‘ืึทืœื™ื‘ืกื˜ืข ืคึผืจืึธื’ืจืึทืžืžื™ื ื’ ืฉืคึผืจืึทื›ืŸ ืื•ืŸ ื•ื•ืืœืงื ืก - ืคึผืจื•ื‘ื™ืจืŸ ืขืก ื”ื™ื™ึทื ื˜!

โ†’ ื“ืขืจ ืขืจืฉื˜ืขืจ ื˜ื™ื™ืœ

ืžืงื•ืจ: www.habr.com

ืœื™ื™ื’ืŸ ืึท ื‘ืึทืžืขืจืงื•ื ื’