Pulumi - Modern Infrastructure as Code. Any cloud, any language 🚀

Slack GitHub Discussions NPM version Python version NuGet version GoDoc License Gitpod ready-to-code

Pulumi's Infrastructure as Code SDK is the easiest way to create and deploy cloud software that use containers, serverless functions, hosted services, and infrastructure, on any cloud.

Simply write code in your favorite language and Pulumi automatically provisions and manages your AWS, Azure, Google Cloud Platform, and/or Kubernetes resources, using an infrastructure-as-code approach. Skip the YAML, and use standard language features like loops, functions, classes, and package management that you already know and love.

For example, create three web servers:

let aws = require("@pulumi/aws");
let sg = new aws.ec2.SecurityGroup("web-sg", {
    ingress: [{ protocol: "tcp", fromPort: 80, toPort: 80, cidrBlocks: ["0.0.0.0/0"]}],
});
for (let i = 0; i < 3; i++) {
    new aws.ec2.Instance(`web-${i}`, {
        ami: "ami-7172b611",
        instanceType: "t2.micro",
        securityGroups: [ sg.name ],
        userData: `#!/bin/bash
            echo "Hello, World!" > index.html
            nohup python -m SimpleHTTPServer 80 &`,
    });
}

Or a simple serverless timer that archives Hacker News every day at 8:30AM:

const aws = require("@pulumi/aws");

const snapshots = new aws.dynamodb.Table("snapshots", {
    attributes: [{ name: "id", type: "S", }],
    hashKey: "id", billingMode: "PAY_PER_REQUEST",
});

aws.cloudwatch.onSchedule("daily-yc-snapshot", "cron(30 8 * * ? *)", () => {
    require("https").get("https://news.ycombinator.com", res => {
        let content = "";
        res.setEncoding("utf8");
        res.on("data", chunk => content += chunk);
        res.on("end", () => new aws.sdk.DynamoDB.DocumentClient().put({
            TableName: snapshots.name.get(),
            Item: { date: Date.now(), content },
        }).promise());
    }).end();
});

Many examples are available spanning containers, serverless, and infrastructure in pulumi/examples.

Pulumi is open source under the Apache 2.0 license, supports many languages and clouds, and is easy to extend. This repo contains the pulumi CLI, language SDKs, and core Pulumi engine, and individual libraries are in their own repos.

Welcome

  • Getting Started: get up and running quickly.

  • Tutorials: walk through end-to-end workflows for creating containers, serverless functions, and other cloud services and infrastructure.

  • Examples: browse a number of useful examples across many languages, clouds, and scenarios including containers, serverless, and infrastructure.

  • Reference Docs: read conceptual documentation, in addition to details on how to configure Pulumi to deploy into your AWS, Azure, or Google Cloud accounts, and/or Kubernetes cluster.

  • Community Slack: join us over at our community Slack channel. Any and all discussion or questions are welcome.

  • GitHub Discussions: Ask your questions or share what you're building with Pulumi.

  • Roadmap: check out what's on the roadmap for the Pulumi project over the coming months.

Getting Started

Watch the video

See the Get Started guide to quickly get started with Pulumi on your platform and cloud of choice.

Otherwise, the following steps demonstrate how to deploy your first Pulumi program, using AWS Serverless Lambdas, in minutes:

  1. Install:

    To install the latest Pulumi release, run the following (see full installation instructions for additional installation options):

    $ curl -fsSL https://get.pulumi.com/ | sh
  2. Create a Project:

    After installing, you can get started with the pulumi new command:

    $ mkdir pulumi-demo && cd pulumi-demo
    $ pulumi new hello-aws-javascript

    The new command offers templates for all languages and clouds. Run it without an argument and it'll prompt you with available projects. This command created an AWS Serverless Lambda project written in JavaScript.

  3. Deploy to the Cloud:

    Run pulumi up to get your code to the cloud:

    $ pulumi up

    This makes all cloud resources needed to run your code. Simply make edits to your project, and subsequent pulumi ups will compute the minimal diff to deploy your changes.

  4. Use Your Program:

    Now that your code is deployed, you can interact with it. In the above example, we can curl the endpoint:

    $ curl $(pulumi stack output url)
  5. Access the Logs:

    If you're using containers or functions, Pulumi's unified logging command will show all of your logs:

    $ pulumi logs -f
  6. Destroy your Resources:

    After you're done, you can remove all resources created by your program:

    $ pulumi destroy -y

To learn more, head over to pulumi.com for much more information, including tutorials, examples, and details of the core Pulumi CLI and programming model concepts.

Platform

CLI

Architecture Build Status
Linux/macOS x64 Linux x64 Build Status
Windows x64 Windows x64 Build Status

Languages

Language Status Runtime
JavaScript Stable Node.js 12+
TypeScript Stable Node.js 12+
Python Stable Python 3.6+
Go Stable Go 1.14+
.NET (C#/F#/VB.NET) Stable .NET Core 3.1+

Clouds

See Supported Clouds for the full list of supported cloud and infrastructure providers.

Contributing

Please See CONTRIBUTING.md for information on building Pulumi from source or contributing improvements.

Comments
  • Toward replacing MSBuild with make+bash on Windows

    Toward replacing MSBuild with make+bash on Windows

    Description

    The main goal of this PR is to have CI run Windows verifications using the same set of Bash+Makefiles that we use on Mac and Linux workers, instead of using a separately coded MSBuild logic as previously.

    It turns out that a lot of tests were never run on Windows (intentionally or not) and therefore require explicit skips or fixes for non-cross-platform builds.

    As a positive side-effect of this refactor, test subset splitting to speed up CI runs now works for Windows in the same way as Linux and Mac.

    Another change I included here that was making it easier to debug issues is making GHA aware of individual test suite steps instead of running one large make test_all target. At the cost of introducing some duplication in the GHA YAML vs Makefile itself, test failures are now isolated to an explicit step that shows which test suite they belong to, which to me makes it a lot faster to read and make sense of failing test output. It also is easy to see how much time each test suite takes.

    The PR does not actually remove the MSBuild project yet as the change only touches PR verification workflow for starters, and will need to be promoted to the master+nightlies+release workflows to fully deprecate MSBuild.

    • [x] Needs https://github.com/pulumi/pulumi/pull/8634 to fix some failures
    • [ ] Fix to use binary installer for gotestsum (source installer is slow)
      • this can be deferred for later, we're just paying extra 30sec on builds, an annoyance
    • [x] Need to check if any of newly introduced windows skips can be relaxed to actually run the tests
      • turned out a bit non-trivial, logged follow up #8646 #8647 #8648 #8649
    • [ ] Verify if we want to keep sxs tests skip
      • it appears that the test is about TypeScript compatibility between HEAD and last-shipped Pulumi; it incurs unusually high cost as it is compiling a node dependency with c/cpp node_gyp; moreover it fails on Windows. I'd recommend keeping it skipped on Windows and even perhaps moving it out of PR verification flow into nightlies/master only, unless we can figure out caching that speeds it up a lot
    • [ ] Verify if OK to skip code coverage on Windows (the trick with coverage-enabled Pulumi build is not working)
      • at this point it seems diminishing returns to push for coverage collection on Windows

    Fixes # (issue)

    Checklist

    • [ ] I have added tests that prove my fix is effective or that my feature works
    • [ ] Yes, there are changes in this PR that warrants bumping the Pulumi Service API version
  • WIP: try to retire msbuild

    WIP: try to retire msbuild

    Description

    Fixes pulumi/home#1692

    Checklist

    • [ ] I have added tests that prove my fix is effective or that my feature works
    • [ ] Yes, there are changes in this PR that warrants bumping the Pulumi Service API version
  • Reify `Input` and `Optional` types in the schema type system.

    Reify `Input` and `Optional` types in the schema type system.

    These changes support arbitrary combinations of input + plain types within a schema. Handling plain types at the property level was not sufficient to support such combinations. Reifying these types required updating quite a bit of code. This is likely to have caused some temporary complications, but should eventually lead to substantial simplification in the SDK and program code generators.

    With the new design, input and optional types are explicit in the schema type system. Optionals will only appear at the outermost level of a type (i.e. Input<Optional<>>, Array<Optional<>>, etc. will not occur). In addition to explicit input types, each object type now has a "plain" shape and an "input" shape. The former uses only plain types; the latter uses input shapes wherever a plain type is not specified. Plain types are indicated in the schema by setting the "plain" property of a type spec to true.

  • [codegen/typescript] Call site defaults for plain Pulumi Object types

    [codegen/typescript] Call site defaults for plain Pulumi Object types

    Description

    Apply a default function when a object type is passed as an argument to Resource.

    Partial fix for: #8132

    Note: the massive number of files changes is because I needed to change the name of our registration inputs to resourceInputs. The old name (just inputs) conflicted with the inputs package. Changes were made to nodejs/gen.go and the test added is called env-helper (in codegen/internal/test/testdata).

    Checklist

    • [x] I have added tests that prove my fix is effective or that my feature works
    • [ ] Yes, there are changes in this PR that warrants bumping the Pulumi Service API version
  • 5758 for Node JS

    5758 for Node JS

    Description

    Fixes #7944 Part of #5758 for Node JS.

    This brings Node JS to parity with Go and Python. .NET is pending.

    @mikhailshilkov adding you to see if there are blockers to merging this we need to address first. This is a change in codegen and it increases the size of the generated packages. Currently PR checks on azure-native show up as failing which is slightly concerning to me. In the beginning of developing this feature I manually rebuilt azure-native and found a TypeScript compilation issue. I've cut out a part of the azure-native schema and added it to the test suite, so I do not believe the particular issues is happening again, but this is good to discuss. Should I go ahead and try to manually built azure-native with this change prior to merging?

    Thank you.

    Checklist

    • [ ] I have added tests that prove my fix is effective or that my feature works
    • [ ] Yes, there are changes in this PR that warrants bumping the Pulumi Service API version
  • [schema] Add IsOverlay option to disable codegen for particular types

    [schema] Add IsOverlay option to disable codegen for particular types

    Description

    Related to https://github.com/pulumi/docs/issues/6740

    Add a new IsOverlay option to schema types and functions that allows providers to document overlays in the schema. This makes it easier to generate API docs consistently, even for code that is generated outside of the typical codegen process.

    Fixes # (issue)

    Checklist

    • [ ] I have added tests that prove my fix is effective or that my feature works
    • [ ] Yes, there are changes in this PR that warrants bumping the Pulumi Service API version
  • Do not generate Go inputty types for output-only schema types

    Do not generate Go inputty types for output-only schema types

    These changes prevent the Go SDK generator from generating input types that are never referenced by rest of the generated SDK. For example, if an object type never appears in a resource input property, these changes will prevent an input type from being generated for that object type. In further pursuit of this goal, these changes prevent the generation of input/output types for function inputs and arguments if function output versions are disabled or if the function does not need an output form.

    In order to preserve backwards compatibility, the extra input types can be retained by setting the generateExtraInputTypes property in the Go language options for a Pulumi package.

    The goal of these changes is to reduce the size of Go SDK, particularly for Azure-Native.

    Fixes: https://github.com/pulumi/pulumi/issues/8194

  • Programgen updates to utilize fn.Output forms in examples and API docs (7949)

    Programgen updates to utilize fn.Output forms in examples and API docs (7949)

    Description

    The goal is to teach programgen to emit fn.Output forms of invokes to simplify example generation.

    Fixes #7949

    Checklist

    • [ ] I have added tests that prove my fix is effective or that my feature works
    • [ ] Yes, there are changes in this PR that warrants bumping the Pulumi Service API version
  • 5758 for C#/.NET

    5758 for C#/.NET

    Description

    Fixes #7945 Part of #5758 for .NET/C#

    Checklist

    • [ ] I have added tests that prove my fix is effective or that my feature works
    • [ ] Yes, there are changes in this PR that warrants bumping the Pulumi Service API version
  • Add an EnumType to the PCL model

    Add an EnumType to the PCL model

    Introduce a new type in enum type in PCL.

    Languages implementation:

    • [X] C#
    • [x] Python
    • [x] TypeScript
    • [x] Go

    Description

    Fixes #6263

    Checklist

    • [x] I have added tests that prove my fix is effective or that my feature works
    • [ ] Yes, there are changes in this PR that warrants bumping the Pulumi Service API version
  • CI: revamp, use an explicit matrix of test commands

    CI: revamp, use an explicit matrix of test commands

    This vastly increases the number of test jobs, but should have the benefit of ensuring each performs a smaller amount of work and completes more quickly, improving test time when there is low contention for runners.

    Work done in this PR, by commit and impact:

    Re-enables linting on PRs: the GitHub Action lint job by setting the matrix parameters that steps within the job required; it's now working and the linting for Python is fixed.

    Improves readability of the test.yml, test-fast.yml GitHub Action workflows the test matrix an explicit set of shell commands that can be run locally, making it easier to determine which commands to run to reproduce integration test failures.

    Improves verification of what test will run for a given makefile by adding a dryrun mode to all go tests. If the environment variable is set PULUMI_TEST_DRYRUN=true, go tests will print the command line it would run and exit without running tests.

    Improves reliability of running the the monolithic tests/integration package by partitioning it into 5 tests, one for each SDK and one for the rest. This is done by generating a -Run ... command with regular expressions matching tests for each SDK. You can observe in this in the CLI by running:

    PULUMI_TEST_DRYRUN=true make test_integration
    

    Removes special cases to skip certain tests on Windows.

    Halves the time to run the pkg tests by separating out the pkg/codegen/nodejs test into its own job. This package's tests take approximately 15 minutes on their own.

    Fixes the sdk/nodejs sxs test by updating the test to work correctly on Linux & Windows, it was testing an obsolete version of Pulumi (=1.6.0) and it was updated and simplified to enable testing multiple versions of TypeScript, presently it tests ~3.7.3, ^3, and ^4.

    Fixes Python linting to 100% success.

    Improves GitHub Actions caching in all of our jobs by updating setup steps for Python, Go, and Node to enable caching when available.

    Adds a heartbeat that logs to the GitHub Actions every 10 seconds - on Windows "heartbeat" and on *nix a nice 💓 emoji.

    Lastly, parallelizes almost all of our tests and adds a lint rule to ensure future tests are parallelized. This helps keep Windows jobs in particular within a reasonable time to complete.

  • Don't retry plugin write errors

    Don't retry plugin write errors

    Description

    No point retrying errors due to writing the plugin to a temporary file. This splits the error tracking up so we only retry read errors.

    Fixes https://github.com/pulumi/pulumi/issues/10310

    Checklist

    • [ ] I have added tests that prove my fix is effective or that my feature works
    • [ ] Yes, there are changes in this PR that warrants bumping the Pulumi Service API version
  • Expose external package cache

    Expose external package cache

    Description

    As of #9933 we maintain a cache of globally analyzed external packages necessary for name resolution. To avoid unacceptable performance degradations, we cache that set of packages.

    This worked fine for SDK generation, but the cache didn't persist between ProgramGen calls (used to generate examples), which make up the vast majority of time spent.

    This PR exposes that cache as a option to allow keeping the cache between invocations of ProgramGen.

    I'm including the new performance graph below for comparison. It doesn't render well here but can be downloaded to view. profile001

    Fixes #10308

    The performance improvement does require this patch to TF-bridge:

     pkg/tf2pulumi/convert/convert.go | 6 +++++-
     pkg/tfgen/docs.go                | 1 +
     pkg/tfgen/generate.go            | 2 ++
     3 files changed, 8 insertions(+), 1 deletion(-)
    
    diff --git a/pkg/tf2pulumi/convert/convert.go b/pkg/tf2pulumi/convert/convert.go
    index b5ba4db..a29888c 100644
    --- a/pkg/tf2pulumi/convert/convert.go
    +++ b/pkg/tf2pulumi/convert/convert.go
    @@ -136,7 +136,9 @@ func Convert(opts Options) (map[string][]byte, Diagnostics, error) {
     		generatedFiles, genDiags, err = hcl2dotnet.GenerateProgram(program)
     		diagnostics = append(diagnostics, genDiags...)
     	case LanguageGo:
    -		generatedFiles, genDiags, err = hcl2go.GenerateProgram(program)
    +		generatedFiles, genDiags, err = hcl2go.GenerateProgramWithOptions(program, hcl2go.GenerateProgramOptions{
    +			ExternalPackageCache: opts.GoPkgCache,
    +		})
     		diagnostics = append(diagnostics, genDiags...)
     	case LanguageYaml:
     		generatedFiles, genDiags, err = hcl2yaml.GenerateProgram(program)
    @@ -198,6 +200,8 @@ type Options struct {
     
     	// TargetOptions captures any target-specific options.
     	TargetOptions interface{}
    +
    +	GoPkgCache hcl2go.ExternalPackages
     }
     
     // logf writes a formatted message to the configured logger, if any.
    diff --git a/pkg/tfgen/docs.go b/pkg/tfgen/docs.go
    index 8fd40e7..cf56631 100644
    --- a/pkg/tfgen/docs.go
    +++ b/pkg/tfgen/docs.go
    @@ -1162,6 +1162,7 @@ func (g *Generator) convert(input afero.Fs, languageName string) (files map[stri
     		ProviderInfoSource:       g.infoSource,
     		SkipResourceTypechecking: true,
     		TerraformVersion:         g.terraformVersion,
    +		GoPkgCache:               g.goPkgCache,
     	})
     
     	return
    diff --git a/pkg/tfgen/generate.go b/pkg/tfgen/generate.go
    index 5b93f83..7e7c66f 100644
    --- a/pkg/tfgen/generate.go
    +++ b/pkg/tfgen/generate.go
    @@ -68,6 +68,7 @@ type Generator struct {
     	skipDocs         bool
     	skipExamples     bool
     	coverageTracker  *CoverageTracker
    +	goPkgCache       gogen.ExternalPackages
     
     	convertedCode map[string][]byte
     }
    @@ -716,6 +717,7 @@ func NewGenerator(opts GeneratorOptions) (*Generator, error) {
     		skipDocs:         opts.SkipDocs,
     		skipExamples:     opts.SkipExamples,
     		coverageTracker:  opts.CoverageTracker,
    +		goPkgCache:       gogen.ExternalPackages{},
     	}, nil
     }
     
    

    Checklist

    • [ ] I have added tests that prove my fix is effective or that my feature works
    • [ ] Yes, there are changes in this PR that warrants bumping the Pulumi Service API version
  • [cli] Add a CLI command to migrate stacks between backends (`pulumi stack migrate`?)

    [cli] Add a CLI command to migrate stacks between backends (`pulumi stack migrate`?)

    It's common to need to migrate stacks between backends. A few examples:

    1. From a filestate backend (e.g. S3) to the Pulumi Service
    2. From the Pulumi Service to the Self-Hosted Pulumi Service
    3. From the Self-Hosted Pulumi Service to the Pulumi Service

    It's possible to do this today via pulumi login A + pulumi stack export + pulumi login B + pulumi stack init + pulumi stack import. However - that doesn't include a few things: a. It only includes the most recent state file, not all the historical updates b. It doesn't record the correct update times for any of the updates c. It doesn't include update logs for Service to Service migrations d. It requires manually switching between backends, and is thus hard to automate for bulk migration of stacks

    We should add a feature to the Pulumi CLI to address at least (a) and (d), and ideally also (b) and (c). To be able to support high-fidelity Service-to-Service migrations (for to/from self-hosted in particular), this may require some new APIs in the Pulumi Service.

  • feat(automation): Add options to configure logging, tracing

    feat(automation): Add options to configure logging, tracing

    Internal and user requests to drive automation API with finer control over logging is implemented by adding five additional options to the preview, up, refresh, and destroy operations in the Automation API.

    Enables automation API to run with the equivalent of CLI arguments:

    • --logflow
    • --verbose
    • --logtostderr
    • --tracing
    • --debug

    Fixes #5855, #10322

  • initial approach

    initial approach

    Description

    This PR removes internal pulumi stack traces from the traceback output when a user's python pulumi program raises an Exception.

    New: asciicast

    Old: asciicast

    Program:

    """An AWS Python Pulumi program"""
    
    import pulumi
    from pulumi_aws import s3
    
    # Create an AWS resource (S3 Bucket)
    bucket = s3.Bucket('my-bucket')
    raise Exception("foobar")
    
    # Export the name of the bucket
    pulumi.export('bucket_name', bucket.id)
    

    Fixes #10230

    Checklist

    • [ ] I have added tests that prove my fix is effective or that my feature works
    • [ ] Yes, there are changes in this PR that warrants bumping the Pulumi Service API version
  • [codegen] Automatically include an example in the API docs for `Provider`s

    [codegen] Automatically include an example in the API docs for `Provider`s

    It's very natural to go to https://www.pulumi.com/registry/packages/kubernetes/api-docs/provider/ and to expect to be able to figure out how to use the Provider defined there via an example. This problem exists for Kubernetes particularly, but also for all other packages.

    It would be wonderful if there were a way to automatically provide documentation for this as part of codegen (or to allow packages to specify this via schema somehow).

    Today, this Provider is implicit and not defined in schema, so there is nowhere to include any docs. I can imagine either:

    1. A way to allow explicitly specifying some content to include int he docs for this "resource" - and in particular description/example content.
    2. Automatically generating richer description and examples for this from the schema - for example including an example which (a) creates a Provider (b) creates a random resource from the schema using the Provider passing provider: provider.
Handle any SQS use case, monitor any queue. Reusable for any project! Invoke in a goroutine to process SQS messages.

GOSQS This package is intended to be a Go SQS listener that can be imported and invoked as a goroutine handled by the life cycle of your service. It's

Dec 22, 2021
API client/backend for Moody's infrastructure

MoodyAPI API client/back-end for Moody's infrastructure The API back-end currently provides: DDNS Records Maintenance. Surveillance Camera Notificatio

Jul 27, 2022
An implementation of a simple RESTful API in Golang on AWS infrastructure.

go-api An implementation of a simple RESTful API in Golang on AWS infrastructure. Tech Stack Serverless framework Go language AWS API Gateway AWS Lamb

Dec 25, 2021
Simple CRUD API written in Go, built using AWS SAM tool and using the AWS' infrastructure.
Simple CRUD API written in Go, built using AWS SAM tool and using the AWS' infrastructure.

tutor-pet API Simple CRUD API written in Go, built using AWS SAM tool and using the AWS' infrastructure. Macro architecture: Code architecture: Pre-Re

Jun 19, 2022
Go api infra - Infrastructure for making api on golang so easy

Go Infra Api Infrastructre methods and types for make api simple Response abstra

Jun 18, 2022
A collection of cloud security icons :cloud::lock:
A collection of cloud security icons :cloud::lock:

Cloud Security Icons These icons are published under the extremely permissive Creative Commons Zero v1.0 Universal license. Downloads We provide all i

Aug 3, 2022
Firebase Cloud Messaging for application servers implemented using the Go programming language.

Firebase Cloud Notifications Client Firebase Cloud Messaging for application servers implemented using the Go programming language. It's designed for

Jun 16, 2022
Google Cloud Messaging for application servers implemented using the Go programming language.

gcm The Android SDK provides a nice convenience library (com.google.android.gcm.server) that greatly simplifies the interaction between Java-based app

Nov 16, 2021
Mailctl - A non-TUI, easy-to-use, fun, modern console-based email app

mailctl (in alpha) modern console-based email app (not TUI!) Thanks for checking

Apr 16, 2022
A modern WebSub client, made to complement the WebSub Server

Go WebSub Client A Go implementation of a WebSub client. It has been tested to pass every WebSub Rocks! Subscriber test. See examples/basic.go for a b

Mar 21, 2022
Google Cloud Client Libraries for Go.

Google Cloud Client Libraries for Go Go packages for Google Cloud Platform services. import "cloud.google.com/go" To install the packages on your syst

Aug 8, 2022
Cloud governance reports from native services in a clear and readable digest
Cloud governance reports from native services in a clear and readable digest

cloudig, or Cloudigest, is a simple CLI tool for creating reports from various cloud sources with user-provided comments. It is written in Go and curr

Jul 28, 2022
Abusing Discord for unlimited cloud storage

Discord Cloud Storage Abusing Discord's servers for unlimited cloud storage! So, what is this? Infamous 8MB limit for non-nitro users can get pretty a

Jul 14, 2022
Go server SDK for IBM Cloud Event Notifications service

IBM Cloud Event Notifications Go Admin SDK Go client library to interact with the various IBM Cloud Event Notifications APIs. Disclaimer: this SDK is

Dec 10, 2021
Alibaba Cloud foasconsole SDK for Go

English | įŽ€äŊ“中文 Alibaba Cloud foasconsole SDK for Go Requirements It's necessary for you to make sure your system have installed Go environment which v

Nov 1, 2021
Alibaba Cloud RMC SDK for Go

English | įŽ€äŊ“中文 Alibaba Cloud RMC SDK for Go Requirements It's necessary for you to make sure your system have installed Go environment which version g

Nov 5, 2021
Alibaba Cloud BatchCompute SDK for Go

English | įŽ€äŊ“中文 Alibaba Cloud BatchCompute SDK for Go Requirements It's necessary for you to make sure your system have installed Go environment which

Nov 15, 2021
Alibaba Cloud GEMP SDK for Go

English | įŽ€äŊ“中文 Alibaba Cloud GEMP SDK for Go Requirements It's necessary for you to make sure your system have installed Go environment which version

Nov 16, 2021
Alibaba Cloud PTS SDK for Go
Alibaba Cloud PTS SDK for Go

Alibaba Cloud PTS SDK for Go

Dec 27, 2021