🥝

「AWS導入までの簡単な流れ」と「AWS SESを使用する例」

に公開

現場でAWS(Amazon Web Services)を使用した実装を行なったので、
AWSはそもそもどうやって取り入れて使えるようになるのか調べた & SESの実装メモ📝


  • 言語:PHP
  • 使用サービス:SES

AWS導入までの簡単な流れ

1. AWSで使いたいサービスを決める
 例:S3→ファイル保存、SES→メール送信、DynamoDBなど

2. AWSでそのサービスを設定する
 AWSの管理画面からサービスを使用するために必要な設定をし、サービスを使用できる状態にする。
 例:S3のバケット作成(ファイルの置き場所)、IAMユーザー単位でアクセス権限の設定するなど

3. PHPアプリ側でcomposerでSDKを入れる

composer require aws/〇〇〇〇
  • composer
    PHP用パッケージ管理ツールからサービスを使えるようにするパッケージを用意するもの
  • SDK(Software Development Kit)
    あるサービスや機能をアプリから使いやすくするために用意されたAWSパッケージをPHPアプリで使えるようにする。

4. PHPからAWSにリクエストする処理を書く
使用するAWSのオブジェクトをnewして、欲しいメソッドを使用していく。
オブジェクトをnewで生成するには、AWS管理画面で設定したPWなどが必要。

⭐️次の項目でSESを例に説明

1. 使うクラスのuse宣言
2. SESオブジェクトをnewする
3. newしたクラスのメソッド利用して実装

PHPでAWS SESを使用する例

  • AWS SES(Simple Email Service)とは
    ◎AWSが提供するクラウドベースのメール送信サービスのことで、大量のメール送信に特化している

  • なぜAWS SESを導入することになったか
    これまではsmtpを使用してメール送信していたが、大量メールを一斉送信しようとするとバウンスされて送信できなかった。そのためAWS SESを導入することになった。

「PHPからAWSにリクエストする処理を書く」:目次

  1. 使うクラスのuse宣言
  2. SESオブジェクトをnewする
  3. SESオブジェクトで使用できるメソッドを利用してメール送信
    3-1. テキストメール送信
    3-2. 画像添付メール送信

1.使用するクラスのuse宣言

use Aws\Credentials\CredentialProvider; //認証情報(アクセスキーなど)の定義
use Aws\Ses\SesClient; // SESオブジェクト・・・newで生成してSesClient→メソッド名()で機能を利用する
use Aws\Exception\AwsException; // 例外出すやつ

この宣言で使いたいクラスをnewして使えるようになる。
useを書かないと毎回フルパスを書いてnewする必要が出てきてしまう。

2.SESオブジェクトをnewする

// このiniファイルに"aws_access_key_id"と"aws_secret_access_key"が記載してある
$path = '/△△△△△/○○○○○/credentials.ini';

// 認証するための処理
$setProvider = CredentialProvider::ini($profile, $path);
$provider = CredentialProvider::memoize($setProvider);

// SESのオブジェクト生成
$ses = new SesClient([
    'region' => 'ap-northeast-1',
    // ↑regionはどこの国(地域)のサーバーを使うかの設定。日本でサービスを使用するときはこれ◎
    'version' => 'latest',
    'credentials' => $provider // サービスを使用する承認得る
]);

3. SESオブジェクトの使用できるメソッドを利用してメール送信

3-1. テキストメール送信

✉️ sendEmailメソッドを利用する
📮 $ses->sendEmail([ コード記述 ]); これでメール送信ができる。
  └ newしたオブジェクト→メソッド名

現場はPHPを使用しているけど、AWSに載っているコード例と大体同じ感じで記述してある。

try {
    // $sesは上記で生成したSESオブジェクト
    $result = $ses->sendEmail([
        // AWSのコード例記載のコード書く(記載必須事項とオプション事項有り)
    ]);
 return $result['MessageId']; // 送信データが特定できるので送信ログに使える

} catch (AwsException $e) {
    // 例外が発生した場合に行う処理
}

3-2. 画像添付メール送信

◎ 初めに
メール送信する際はheaderにToCcの他にContent-Typeなどの記載が必要。
 ・ テキストメール送信の場合・・・Content-type: text/html;
 ・ 画像添付メール送信の場合・・・Content-Type: multipart/mixed;

例えば、HTMLのテキスト送信の場合のsendEmail()では、自分でコードを記載しなくてもAWSが自動で'Content-type: text/html';を決める処理をしてくれるのでContent-typeを記載しなくていい。
でも、画像送信の場合はContent-Type: multipart/mixedの記載と他色々な設定を自分で記載をする必要がある。
新バージョンではもっとシンプルに書けるようになっている。

try {
    $result = $ses->sendRawEmail([
        'Destination' => [
            'ToAddresses' => [$to],
        ],
        'ReplyToAddresses' => [$from],
        'Source' => get_source($from, $servicename),
        'RawMessage' => [
            'Data' => $data // ここに来るものはたくさんあって、自分で記述する必要がある
                 // Content-type、Content-Transfer-Encoding、base64_encode()した画像ファイルなどなど
        ],
        'ReturnPath' => $returnpath,
    ]);
    return $result['MessageId'];
    
} catch (AwsException $e) {
 // 例外が発生した場合に行う処理
}

他読んでおきたいメモ

Discussion