Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Failed to retrieve credentials from EC2 Instance Metadata Service

I'm trying to send an email via the AWS SES API using the SDK.

I based my code off the official documentation here: https://docs.aws.amazon.com/ses/latest/DeveloperGuide/examples-send-using-sdk.html

I'm getting as far as await client.SendEmailAsync(sendRequest); and receive the error message:

Failed to retrieve credentials from EC2 Instance Metadata Service.

// initialization
var client = new AmazonSimpleEmailServiceClient(RegionEndpoint.USWest2);
var response = new SendEmailResponse();

// build email
var sendRequest = new SendEmailRequest
{
    Source = ToAddress,
    Destination = new Destination
    {
        ToAddresses =
        new List<string> { ReceiverAddress }
    },
    Message = new Message
    {
        Subject = new Content(model.Subject),
        Body = new Body
        {
            Html = new Content
            {
                Charset = "UTF-8",
                Data = model.HtmlBody
            },
        }
    },
};

// send async call to api
try
{
    var response = await client.SendEmailAsync(sendRequest);
}
catch (Exception ex)
{

}

I've confirmed that my domain is verified via the AWS console and it's also showing as "Enabled for Sending".

Where am I going wrong?

like image 455
TidyDev Avatar asked Jun 12 '18 21:06

TidyDev


1 Answers

I figured out an answer to my question.

The issue can be resolved by creating an IAM user group and user with access to the SES service.

Then I edited my code to pass the AccessKeyId and SecretAccessKey.

    var client = new AmazonSimpleEmailServiceClient(awsAccessKeyId, awsSecretAccessKey, RegionEndpoint.USWest2);
    var response = new SendEmailResponse();

This is working. However to be more secure it's recommended that a Shared Credentials File be used.

Hope this helps someone else.

EDIT: In V2 of the AWS SES SDK you need to change AmazonSimpleEmailServiceClient to AmazonSimpleEmailServiceV2Client.

    var client = new AmazonSimpleEmailServiceV2Client(awsAccessKeyId, awsSecretAccessKey, RegionEndpoint.USWest2);
    var response = new SendEmailResponse();
like image 110
TidyDev Avatar answered Sep 20 '22 12:09

TidyDev