110 lines
2.6 KiB
Go
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
|
|
}
|