「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にリクエストする処理を書く」:目次
- 使うクラスのuse宣言
- SESオブジェクトをnewする
- 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にTo
やCc
の他に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