diff --git a/conf/defaults.ini b/conf/defaults.ini index 45010a778df..dfa6bf99017 100644 --- a/conf/defaults.ini +++ b/conf/defaults.ini @@ -477,6 +477,8 @@ provider = [external_image_storage.s3] bucket_url = +bucket = +region = access_key = secret_key = diff --git a/conf/sample.ini b/conf/sample.ini index 752f40253c7..89170000df6 100644 --- a/conf/sample.ini +++ b/conf/sample.ini @@ -422,7 +422,8 @@ ;provider = [external_image_storage.s3] -;bucket_url = +;bucket = +;region = ;access_key = ;secret_key = diff --git a/docs/sources/installation/configuration.md b/docs/sources/installation/configuration.md index bd36a56a75e..85ff1026c10 100644 --- a/docs/sources/installation/configuration.md +++ b/docs/sources/installation/configuration.md @@ -651,12 +651,16 @@ These options control how images should be made public so they can be shared on You can choose between (s3, webdav, gcs). If left empty Grafana will ignore the upload action. ## [external_image_storage.s3] +### bucket +Bucket name for S3. e.g. grafana.snapshot +### region +Region name for S3. e.g. 'us-east-1', 'cn-north-1', etc ### bucket_url +(for backward compatibility, only works when no bucket or region are configured) Bucket URL for S3. AWS region can be specified within URL or defaults to 'us-east-1', e.g. - http://grafana.s3.amazonaws.com/ - https://grafana.s3-ap-southeast-2.amazonaws.com/ -- https://grafana.s3-cn-north-1.amazonaws.com.cn ### access_key Access key. e.g. AAAAAAAAAAAAAAAAAAAA diff --git a/pkg/components/imguploader/imguploader.go b/pkg/components/imguploader/imguploader.go index 32058e6cc2d..1feeb6f07c3 100644 --- a/pkg/components/imguploader/imguploader.go +++ b/pkg/components/imguploader/imguploader.go @@ -28,15 +28,21 @@ func NewImageUploader() (ImageUploader, error) { return nil, err } + bucket := s3sec.Key("bucket").MustString("") + region := s3sec.Key("region").MustString("") bucketUrl := s3sec.Key("bucket_url").MustString("") accessKey := s3sec.Key("access_key").MustString("") secretKey := s3sec.Key("secret_key").MustString("") - info, err := getRegionAndBucketFromUrl(bucketUrl) - if err != nil { - return nil, err + if bucket == "" || region == "" { + info, err := getRegionAndBucketFromUrl(bucketUrl) + if err != nil { + return nil, err + } + bucket = info.bucket + region = info.region } - return NewS3Uploader(info.region, info.bucket, "public-read", accessKey, secretKey), nil + return NewS3Uploader(region, bucket, "public-read", accessKey, secretKey), nil case "webdav": webdavSec, err := setting.Cfg.GetSection("external_image_storage.webdav") if err != nil { diff --git a/pkg/components/imguploader/s3uploader.go b/pkg/components/imguploader/s3uploader.go index a8694c0389c..860bb1a1abd 100644 --- a/pkg/components/imguploader/s3uploader.go +++ b/pkg/components/imguploader/s3uploader.go @@ -9,6 +9,7 @@ import ( "github.com/aws/aws-sdk-go/aws/credentials" "github.com/aws/aws-sdk-go/aws/credentials/ec2rolecreds" "github.com/aws/aws-sdk-go/aws/ec2metadata" + "github.com/aws/aws-sdk-go/aws/endpoints" "github.com/aws/aws-sdk-go/aws/session" "github.com/aws/aws-sdk-go/service/s3" "github.com/grafana/grafana/pkg/log" @@ -54,8 +55,10 @@ func (u *S3Uploader) Upload(ctx context.Context, imageDiskPath string) (string, Credentials: creds, } + s3_endpoint, _ := endpoints.DefaultResolver().EndpointFor("s3", u.region) key := util.GetRandomString(20) + ".png" - log.Debug("Uploading image to s3", "bucket = ", u.bucket, ", key = ", key) + image_url := s3_endpoint.URL + "/" + u.bucket + "/" + key + log.Debug("Uploading image to s3", "url = ", image_url) file, err := os.Open(imageDiskPath) if err != nil { @@ -78,10 +81,5 @@ func (u *S3Uploader) Upload(ctx context.Context, imageDiskPath string) (string, if err != nil { return "", err } - - if u.region == "us-east-1" { - return "https://" + u.bucket + ".s3.amazonaws.com/" + key, nil - } else { - return "https://" + u.bucket + ".s3-" + u.region + ".amazonaws.com/" + key, nil - } + return image_url, nil } diff --git a/public/app/features/alerting/partials/alert_list.html b/public/app/features/alerting/partials/alert_list.html index cb76e381bec..aed99432a9f 100644 --- a/public/app/features/alerting/partials/alert_list.html +++ b/public/app/features/alerting/partials/alert_list.html @@ -1,18 +1,18 @@
-
@@ -34,9 +34,10 @@
diff --git a/public/app/features/dashboard/export/export_modal.html b/public/app/features/dashboard/export/export_modal.html index 01e47849439..0598c612fd6 100644 --- a/public/app/features/dashboard/export/export_modal.html +++ b/public/app/features/dashboard/export/export_modal.html @@ -11,7 +11,7 @@