Ошибка учетных данных при отправке писем из AWS SES - PullRequest
0 голосов
/ 13 июня 2018

Я пытаюсь отправить электронную почту через Amazon SES на Голанге.Ранее он работал на сервере разработки (без SSL) со следующим кодом:

sess, err := session.NewSession(&aws.Config{
            Region:aws.String(AwsRegion)},
        )

    /* Create an SES client in the session */
    svc := ses.New(sess)

    /* Assemble the email */
    input := &ses.SendEmailInput{
        Destination: &ses.Destination{
            CcAddresses: []*string{
            },
            ToAddresses: []*string{
                aws.String(request.EmailTo),
            },
        },
        Message: &ses.Message{
            Body: &ses.Body{
                Html: &ses.Content{
                    Charset: aws.String(CharSet),
                    Data:    aws.String(body),
                },
            },
            Subject: &ses.Content{
                Charset: aws.String(CharSet),
                Data:    aws.String(subject),
            },
        },
        Source: aws.String("test<test@example.com>"),
    }

    /* Attempt to send the email */
    result, err := svc.SendEmail(input)

Недавно я начал работать на производственном сервере (с SSL), и тот же код начал выдавать мне следующую ошибку:

NoCredentialProviders: no valid providers in chain. Deprecated.
        For verbose messaging see aws.Config.CredentialsChainVerboseErrors

Я попытался добавить учетные данные в код, например:

creds := credentials.NewCredentials(&ec2rolecreds.EC2RoleProvider{})

/* updated session block with credentials in aws config */
sess, err := session.NewSession(&aws.Config{
    Region: aws.String(AwsRegion),
    Credentials: creds})

Но этот код не работает (даже не компилируется) и выдает мне следующую ошибку:

/main.go:63:42: undefined: ec2rolecreds

Однако в код я уже включил пакет учетных данных.

Я не понимаю, как добавить учетные данные в этот код, чтобы он работал и на рабочем сервере.Мы будем благодарны за любую помощь.

1 Ответ

0 голосов
/ 24 июня 2018

Первая ошибка (NoCredentialProviders) не связана с кодом, но она не может найти учетные данные.Согласно этой странице она автоматически проверяет в следующем порядке:

  1. Переменные среды.
  2. Общий файл учетных данных.
  3. Если ваше приложениеработает на экземпляре Amazon EC2, роль IAM для Amazon EC2.

Если это работало в одной среде, а не в другой, я предполагаю, что у вас была роль IAM с необходимыми разрешениями, связанными с экземпляром EC2 черезпрофиля экземпляра.

Чтобы явно указать учетные данные, попробуйте следующее:

staticCreds = credentials.NewStaticCredentials("<key-id>", "<secret>", "<session token>")
session, err = session.NewSession(&aws.Config{Credentials: staticCreds})
...