readysite / pkg / platform / providers / aws / platform.go
1.2 KB
platform.go
package aws

import (
	"cmp"
	"context"
	"fmt"

	"github.com/aws/aws-sdk-go-v2/config"
	"github.com/aws/aws-sdk-go-v2/credentials"
	"github.com/aws/aws-sdk-go-v2/service/ec2"
	"github.com/aws/aws-sdk-go-v2/service/route53"
	"github.com/readysite/readysite/pkg/platform"
)

type backend struct {
	ec2     *ec2.Client
	route53 *route53.Client
	ctx     context.Context
}

// New creates an AWS platform.
// The defaultRegion is used for API calls; individual operations use server/volume regions.
func New(accessKey, secretKey, defaultRegion string) (*platform.Platform, error) {
	if accessKey == "" || secretKey == "" {
		return nil, fmt.Errorf("accessKey and secretKey required")
	}

	ctx := context.Background()
	defaultRegion = cmp.Or(defaultRegion, "us-east-1")

	cfg, err := config.LoadDefaultConfig(ctx,
		config.WithRegion(defaultRegion),
		config.WithCredentialsProvider(credentials.NewStaticCredentialsProvider(accessKey, secretKey, "")),
	)
	if err != nil {
		return nil, fmt.Errorf("load aws config: %w", err)
	}

	return &platform.Platform{
		Backend: &backend{
			ec2:     ec2.NewFromConfig(cfg),
			route53: route53.NewFromConfig(cfg),
			ctx:     ctx,
		},
	}, nil
}
← Back