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
}