-- 下書き


## DB仕様書がエクセル形式で困ったのでチャットGPTにたのんでみた

もちろん、AWS CloudFormationを使用してLambdaからSESを呼び出してメール送信するためのYAML形式のテンプレートを提供します。

以下がCloudFormationテンプレートの内容です：

``` sql
SELECT ID,
       "1月の在庫数",
       "2月の在庫数",
       "3月の在庫数",
       "4月の在庫数",
       "5月の在庫数",
       "6月の在庫数",
       "7月の在庫数",
       "8月の在庫数",
       "9月の在庫数",
       "10月の在庫数",
       "11月の在庫数",
       "12月の在庫数"
FROM (
  SELECT ID, 年月, 在庫数
  FROM table1
) AS src
PIVOT (
  MAX(在庫数)
  FOR 年月 IN (
    1 AS "1月の在庫数",
    2 AS "2月の在庫数",
    3 AS "3月の在庫数",
    4 AS "4月の在庫数",
    5 AS "5月の在庫数",
    6 AS "6月の在庫数",
    7 AS "7月の在庫数",
    8 AS "8月の在庫数",
    9 AS "9月の在庫数",
    10 AS "10月の在庫数",
    11 AS "11月の在庫数",
    12 AS "12月の在庫数"
  )
) AS pivoted;

```

``` yaml
Copy code
AWSTemplateFormatVersion: '2010-09-09'
Description: CloudFormation template to create a Lambda function and IAM role to send emails using SES.

Parameters:
  EmailSenderAddress:
    Description: The sender email address (must be verified in SES)
    Type: String
  EmailRecipientAddress:
    Description: The recipient email address
    Type: String
  SesDomainName:
    Description: The SES domain name (e.g., example.com)
    Type: String

Resources:
  LambdaExecutionRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Statement:
          - Effect: Allow
            Principal:
              Service: lambda.amazonaws.com
            Action: sts:AssumeRole
      Path: "/"
      Policies:
        - PolicyName: LambdaSESAccessPolicy
          PolicyDocument:
            Statement:
              - Effect: Allow
                Action:
                  - ses:SendEmail
                  - ses:SendRawEmail
                Resource: "*"

  LambdaFunction:
    Type: AWS::Lambda::Function
    Properties:
      Code:
        ZipFile: |
          const AWS = require('aws-sdk');
          const ses = new AWS.SES({ region: 'us-east-1' });  // Change the region if necessary
          exports.handler = async (event) => {
            const params = {
              Source: event.sender,
              Destination: {
                ToAddresses: [event.recipient],
              },
              Message: {
                Subject: {
                  Data: event.subject,
                },
                Body: {
                  Text: {
                    Data: event.body,
                  },
                },
              },
            };
            try {
              await ses.sendEmail(params).promise();
              return {
                statusCode: 200,
                body: 'Email sent successfully!',
              };
            } catch (error) {
              console.error(error);
              return {
                statusCode: 500,
                body: 'Error sending email!',
              };
            }
          };
      Handler: index.handler
      Role: !GetAtt LambdaExecutionRole.Arn
      Runtime: nodejs14.x

Outputs:
  LambdaFunctionArn:
    Description: The ARN of the Lambda function
    Value: !GetAtt LambdaFunction.Arn
```

このテンプレートでは、以下のパラメータを指定する必要があります：

EmailSenderAddress: メールを送信する際の差出人のメールアドレスです。SESで事前に確認済みのアドレスである必要があります。
EmailRecipientAddress: メールの宛先となるメールアドレスです。
SesDomainName: SESで設定した独自ドメイン名を指定します（例: example.com）。
テンプレートはIAMロールとLambda関数を作成し、Lambda関数で指定した差出人と宛先のメールアドレスを使用してSESを呼び出してメールを送信します。SESのリージョンは「us-east-1」として設定していますが、必要に応じて適切なリージョンに変更してください。

このCloudFormationテンプレートをAWS Management ConsoleのCloudFormationセクションにコピー＆ペーストし、スタックを作成してください。必要なパラメータを入力し、実行してください。これにより、Lambda関数と必要なIAMロールが作成され、指定した差出人と宛先のメールアドレスを使用してSESからメールが送信されます。