Я только что скомпилировал ваш код и его выполнение ОК ... один из многих способов предоставить учетные данные для вашего двоичного файла - это заполнить эти переменные env
export AWS_ACCESS_KEY_ID=AKfoobarT2IJEAU4
export AWS_SECRET_ACCESS_KEY=oa6oT0Xxt4foobarbambazdWFCb
export AWS_REGION=us-west-2
, это все, что вам нужно при использовании env var (ваши значения доступны с использованием aws консольного браузера)
большая картина заключается в создании сценария оболочки оболочки (bash), который содержит три строки выше для заполнения переменных env для предоставления учетных данных, а затем в том же сценарии оболочки выполните двоичный файл golang (обычно вы компилируете golang в некотором предварительном процессе) ... в моем случае я сохраняю значения трех моих переменных env в зашифрованных файлах, которые сценарий оболочки расшифровывает непосредственно перед вызовом вышеупомянутые команды экспорта
иногда полезно отбросить удар и просто использовать команды, эквивалентные aws командной строке, чтобы попасть в примерную ... из терминала запустить
aws s3 ls s3://cairo-mombasa-zaire --region us-west-2
который также можно использовать те же переменные env, показанные выше
для полноты, вот ваш код с шаблоном добавлено ... это работает нормально и перечисляет корзины
package main
import (
"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"
"fmt"
"os"
)
func exitErrorf(msg string, args ...interface{}) {
fmt.Fprintf(os.Stderr, msg+"\n", args...)
os.Exit(1)
}
func main() {
region_env_var := "AWS_REGION"
curr_region := os.Getenv(region_env_var)
if curr_region == "" {
exitErrorf("ERROR - failed to get region from env var %v", region_env_var)
}
fmt.Println("here is region ", curr_region)
// Load session from shared config
sess := session.Must(session.NewSessionWithOptions(session.Options{
SharedConfigState: session.SharedConfigEnable,
}))
svc := s3.New(sess)
result, err := svc.ListBuckets(nil)
if err != nil { exitErrorf("Unable to list buckets, %v", err) }
for _, b := range result.Buckets {
fmt.Printf("* %s created on %s\n", aws.StringValue(b.Name), aws.TimeValue(b.CreationDate))
}
}