「AWS Lambda」->「関数の作成」->「一から作成」で関数を作成する。
import boto3 def send_email(source, to, subject, body): client = boto3.client('ses') response = client.send_email( Destination={ 'ToAddresses': [ to ], }, Message={ 'Body': { 'Text': { 'Charset': 'UTF-8', 'Data': body, }, }, 'Subject': { 'Charset': 'UTF-8', 'Data': subject, }, }, Source=source ) return response def lambda_handler(event, context): source = '[メールアドレス]' to = '[メールアドレス]' subject = 'TEST' body = 'TEST\nTEST' r = send_email(source, to, subject, body) return r
IAMロールの設定を正しく行っていないと、以下のようなエラーが出力される。
{ "errorMessage": "An error occurred (AccessDenied) when calling the SendEmail operation: User `XXXXXXXX’ is not authorized to perform `ses:SendEmail' on resource `XXXXXXXX’”, "errorType": "ClientError", "stackTrace": [ [ "/var/task/lambda_function.py", 32, "lambda_handler", "r = send_email(source, to, subject, body)" ], [ "/var/task/lambda_function.py", 23, "send_email", "Source=source" ], [ "/var/runtime/botocore/client.py", 314, "_api_call", "return self._make_api_call(operation_name, kwargs)" ], [ "/var/runtime/botocore/client.py", 612, "_make_api_call", "raise error_class(parsed_response, operation_name)" ] ] }
IAMロールにAmazonSESFullAccessポリシーをアタッチすることで解決。