Files
old-svijetlastrana/infra/aws/aws.go
2018-04-25 13:16:36 +02:00

110 lines
2.6 KiB
Go

package aws
import (
"bytes"
"net/http"
"path"
"bitbucket.org/nemt/nemt-portal-api/infra/config"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/service/s3"
"github.com/aws/aws-sdk-go/service/s3/s3manager"
"github.com/aws/aws-sdk-go/service/ssm"
)
//AWSUtil return the methods to interact with AWS Services
type AWSUtil struct {
configApp *config.Config
awsConfig *aws.Config
s3Service *s3.S3
ssmService *ssm.SSM
awsSession *session.Session
}
//New return an instance of AWSUtil
func New(configApp *config.Config) *AWSUtil {
cfg := aws.NewConfig().WithRegion("sa-east-1")
cfg.DisableRestProtocolURICleaning = aws.Bool(true)
return &AWSUtil{
configApp: configApp,
awsConfig: cfg,
s3Service: s3.New(session.New(), cfg),
ssmService: ssm.New(session.New(), cfg),
awsSession: session.New(cfg),
}
}
//DownloadFromS3Bucket will return the file on the S3 Bucket
func (a AWSUtil) DownloadFromS3Bucket(filePath string) ([]byte, error) {
downloader := s3manager.NewDownloader(a.awsSession)
b := &aws.WriteAtBuffer{}
_, err := downloader.Download(b, &s3.GetObjectInput{
Bucket: aws.String(a.configApp.Aws.S3Bucket),
Key: aws.String(filePath),
})
if err != nil {
return []byte{}, err
} else {
return b.Bytes(), nil
}
}
//UploadToS3Bucket will upload a file to the S3 Bucket
func (a AWSUtil) UploadToS3Bucket(filePath string, fileName string, buff []byte) error {
fileBytes := bytes.NewReader(buff)
fileType := http.DetectContentType(buff)
fullPath := path.Join(filePath, fileName)
params := &s3.PutObjectInput{
Bucket: aws.String(a.configApp.Aws.S3Bucket),
Key: aws.String(fullPath),
Body: fileBytes,
ContentLength: aws.Int64(int64(len(buff))),
ContentType: aws.String(fileType),
}
_, err := a.s3Service.PutObject(params)
if err != nil {
return err
}
return nil
}
//SsmPutParameter put parameter to SSM
func (a AWSUtil) SsmPutParameter(parameterName string, parameterValue string) error {
params := &ssm.PutParameterInput{
Name: aws.String(parameterName),
Type: aws.String("SecureString"),
Value: aws.String(parameterValue),
}
_, err := a.ssmService.PutParameter(params)
if err != nil {
return err
}
return nil
}
//SsmGetParameter get parameter from SSM
func (a AWSUtil) SsmGetParameter(parameterName string, withDecryption bool) (string, error) {
params := &ssm.GetParameterInput{
Name: aws.String(parameterName),
WithDecryption: aws.Bool(withDecryption),
}
output, err := a.ssmService.GetParameter(params)
if err != nil {
return "", err
}
return (*output.Parameter.Value), nil
}