質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.53%

  • PHP

    20282questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • AWS(Amazon Web Services)

    1998questions

    Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

  • Apache

    1811questions

    Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

  • Amazon EC2

    123questions

    Amazon EC2は“Amazon Elastic Compute Cloud”の略称です。Amazon Web Services(AWS)の一部であり、仮想化されたWebサーバーのコンピュータリソースをレンタルできるサービスです。

Amazon SESでメール送信

解決済

回答 4

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 461

pappikko

score 2

5/21投稿ーーーーーー
y_waiwaiさんからいただいたアドバイス通り実行してみたところ
以下のエラーが表示されました。

[Sun May 20 23:29:28.344157 2018] [:error] [pid 25122] [client 106.181.135.135:51420] PHP Fatal error: Uncaught exception 'Aws\\Exception\\CredentialsException' with message 'Error retrieving credentials from the instance profile metadata server. (Client error: `GET http://169.254.169.254/latest/meta-data/iam/security-credentials/` resulted in a `404 Not Found` response:\n<?xml version="1.0" encoding="iso-8859-1"?>\n<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\n "htt (truncated...)\n)' in /var/www/html/vendor/aws/aws-sdk-php/src/Credentials/InstanceProfileProvider.php:88\nStack trace:\n#0 /var/www/html/vendor/guzzlehttp/promises/src/Promise.php(203): Aws\\Credentials\\InstanceProfileProvider->Aws\\Credentials\\{closure}(Array)\n#1 /var/www/html/vendor/guzzlehttp/promises/src/Promise.php(156): GuzzleHttp\\Promise\\Promise::callHandler(2, Array, Array)\n#2 /var/www/html/vendor/guzzlehttp/promises/src/TaskQueue.php(47): GuzzleHttp\\Promise\\Promise::GuzzleHttp\\Promise\\{closure}()\n#3 /var/www/html/vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php(98): GuzzleHttp\\Promise\\TaskQueue->run()\n#4 /var/www in /var/www/html/vendor/aws/aws-sdk-php/src/Credentials/InstanceProfileProvider.php on line 88


credentialsのファイル(認証情報を記載したファイル)を取得中にエラーになっているようなことが書いてあります。
credentialsファイルはhome/ec2-user/.awsの配下にあります。

エラーメッセージで検索したところ以下のリンクを見つけて、コメントの通り
AWS CLIをインストール > $ aws configure > シークレットキーなどの入力もしましたが、
結果は同じでした。

認証情報は作成したIAMユーザーの認証情報だが、実行ユーザーはec2-userである点が、
怪しいかもと思っているのですが、IAMユーザーを実行ユーザーにする方法がわかりません。。。

ちなみに、testmail.phpをコマンドで実行するとメール送信は成功します。

[ec2-user@ip-172-31-39-44 html]$ php testmail.php
Email sent! Message ID: 010101638168d54e-2db33562-1e58-46cd-8be8-e24da6349e25-000000

5/20投稿ーーーーーー
プログラミング勉強中の者です。
Amazon SESでメール送信を実装しようとしています。

AWSのチュートリアルに沿って、もろもろ設定を終え、
ターミナルでphpファイル(testmail.php)を実行し送信成功するところまでは出来たのですが、
ブラウザで実行するとエラーが出てしまいます。

エラーログをみると権限の問題のようなのですが、権限をどのように設定すれば良いのかわかりません。。。
home ディレクトリ以下の権限は以下の通りです。

drwxrwxrwx   3 root root  4096  43 23:05 home
drwx------ 7 ec2-user ec2-user 4096  59 15:56 ec2-user
drwxrwxr-x 10 ec2-user ec2-user    4096  520 15:57 vendor
-rwxrwxr-x 1 ec2-user ec2-user  178  59 15:57 autoload.php
drwxrwxr-x 3 ec2-user ec2-user 4096  59 15:57 aws
drwxrwxr-x 2 ec2-user ec2-user 4096  59 15:57 bin
drwxrwxr-x 2 ec2-user ec2-user 4096  59 15:57 composer
drwxrwxr-x 3 ec2-user ec2-user 4096  51 15:39 guzzle
drwxrwxr-x 5 ec2-user ec2-user 4096  59 15:57 guzzlehttp
drwxrwxr-x 3 ec2-user ec2-user 4096  59 15:57 mtdowling
drwxrwxr-x 3 ec2-user ec2-user 4096  59 15:57 psr
drwxrwxr-x 3 ec2-user ec2-user 4096  51 15:39 symfony


testmail.phpの権限(var/www/html/testmail.php)

-rw-r--r-- 1 ec2-user apache  2468  59 17:04 testmail.php

エラーログ

[Sun May 20 16:29:28.411700 2018] [:error] [pid 22602] [client 106.181.133.216:62905] PHP Warning:  require(../../../home/ec2-user/vendor/autoload.php): failed to open stream: Permission denied in /var/www/html/testmail.php on line 33
[Sun May 20 16:29:28.411745 2018] [:error] [pid 22602] [client 106.181.133.216:62905] PHP Fatal error:  require(): Failed opening required '../../../home/ec2-user/vendor/autoload.php' (include_path='.:/usr/share/pear:/usr/share/php') in /var/www/html/testmail.php on line 33

testmail.php

<?php

// Replace path_to_sdk_inclusion with the path to the SDK as described in 
// http://docs.aws.amazon.com/aws-sdk-php/v3/guide/getting-started/basic-usage.html
define('REQUIRED_FILE','../../../home/ec2-user/vendor/autoload.php'); 

// Replace sender@example.com with your "From" address. 
// This address must be verified with Amazon SES.
define('SENDER', 'sample@sample.com');           

// Replace recipient@example.com with a "To" address. If your account 
// is still in the sandbox, this address must be verified.
define('RECIPIENT', 'sample@sample.com');    

// Specify a configuration set. If you do not want to use a configuration
// set, comment the following variable, and the 
// 'ConfigurationSetName' => CONFIGSET argument below.
define('CONFIGSET','ConfigSet');

// Replace us-west-2 with the AWS Region you're using for Amazon SES.
define('REGION','us-west-2'); 

define('SUBJECT','Amazon SES test (AWS SDK for PHP)');

define('HTMLBODY','<h1>AWS Amazon Simple Email Service Test Email</h1>'.
                  '<p>This email was sent with <a href="https://aws.amazon.com/ses/">'.
                  'Amazon SES</a> using the <a href="https://aws.amazon.com/sdk-for-php/">'.
                  'AWS SDK for PHP</a>.</p>');
define('TEXTBODY','This email was send with Amazon SES using the AWS SDK for PHP.'.'http://owalive.fun?p=1');

define('CHARSET','UTF-8');

require REQUIRED_FILE;

use Aws\Ses\SesClient;
use Aws\Ses\Exception\SesException;

$client = SesClient::factory(array(
    'version'=> 'latest',     
    'region' => REGION
));


try {
     $result = $client->sendEmail([
    'Destination' => [
        'ToAddresses' => [
            RECIPIENT,
        ],
    ],
    'Message' => [
        'Body' => [
            /*'Html' => [
                'Charset' => CHARSET,
                'Data' => HTMLBODY,
            ],*/
            'Text' => [
                'Charset' => CHARSET,
                'Data' => TEXTBODY,
            ],
        ],
        'Subject' => [
            'Charset' => CHARSET,
            'Data' => SUBJECT,
        ],
    ],
    'Source' => SENDER,
    // If you are not using a configuration set, comment or delete the
    // following line
    // 'ConfigurationSetName' => CONFIGSET,
]);
     $messageId = $result->get('MessageId');
     echo("Email sent! Message ID: $messageId"."\n");

} catch (SesException $error) {
     echo("The email was not sent. Error message: ".$error->getAwsErrorMessage()."\n");
}

?>


2日調べ、home/ec2-user/vendor以下をvar/www/html/配下に移すなどもしたのですが、
解決出来ず、アドバイスをいただけないでしょうか。
上記以外に必要な情報がございましたらご指示ください。
よろしくお願いいたします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 4

+1

エラーにある autoload.php というファイルは、どこのディレクトリにあるんでしょうか?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/20 21:19

    ありがとうございます。
    home/ec2-user/vendor/autoload.php
    というふうになっています。

    キャンセル

  • 2018/05/20 21:25

    /home/ec2-user/vendor 以下を、
    /var/www/html/vender のフォルダにコピーして、

    define('REQUIRED_FILE','vendor/autoload.php');

    としてみる

    キャンセル

  • 2018/05/20 23:43

    ありがとうございます!やってみました。
    次は以下のようなエラーがでました。。。

    [Sun May 20 23:29:28.344157 2018] [:error] [pid 25122] [client 106.181.135.135:51420] PHP Fatal error: Uncaught exception 'Aws\\Exception\\CredentialsException' with message 'Error retrieving credentials from the instance profile metadata server. (Client error: `GET http://169.254.169.254/latest/meta-data/iam/security-credentials/` resulted in a `404 Not Found` response:\n<?xml version="1.0" encoding="iso-8859-1"?>\n<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\n "htt (truncated...)\n)' in /var/www/html/vendor/aws/aws-sdk-php/src/Credentials/InstanceProfileProvider.php:88\nStack trace:\n#0 /var/www/html/vendor/guzzlehttp/promises/src/Promise.php(203): Aws\\Credentials\\InstanceProfileProvider->Aws\\Credentials\\{closure}(Array)\n#1 /var/www/html/vendor/guzzlehttp/promises/src/Promise.php(156): GuzzleHttp\\Promise\\Promise::callHandler(2, Array, Array)\n#2 /var/www/html/vendor/guzzlehttp/promises/src/TaskQueue.php(47): GuzzleHttp\\Promise\\Promise::GuzzleHttp\\Promise\\{closure}()\n#3 /var/www/html/vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php(98): GuzzleHttp\\Promise\\TaskQueue->run()\n#4 /var/www in /var/www/html/vendor/aws/aws-sdk-php/src/Credentials/InstanceProfileProvider.php on line 88

    このリンクを解読すればいいのでしょうか?
    https://stackoverflow.com/questions/27400563/aws-sdk-for-php-error-retrieving-credentials-from-the-instance-profile-metadata?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa

    キャンセル

+1

phpで書いたことはないので、予想になりますが。
コマンドで実行した際に成功するのは、home/ec2-user/.aws/credentialsの情報を自動的に見に行ってくれてるからだと思います。

「aws configure」コマンドで設定したアクセスキーと、シークレットキーをコードの中に埋め込んでみて試してみてください。
コードの中に埋め込んでしまえば、どこから実行しても認証が通ってくれるはずです。

// Amazon APIのアクセスキーとシークレットキーを入力
define("Access_Key_ID", "XXXXXXXXXXXXXXXXXXXXXXXXXX");
define("Secret_Access_Key", "XXXXXXXXXXXXXXXXXXXXXXXXXX");

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/23 20:26

    testmail.phpに以下の通り直書きすることで送信できるようになりました。
    ありがとうございました。

    $client = SesClient::factory(array(
    'version'=> 'latest',
    'region' => REGION,
    'credentials' => [
    'key' => 'xxxxxxxxxxxxxxxxxxxxxxxxxxx',
    'secret' => 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'],
    ));

    キャンセル

  • 2018/05/24 10:56

    あー、良かったです。
    反応ないので、質問に対する回答になってないのかと思ってました(汗)

    キャンセル

  • 2018/05/24 12:10

    ごめんなさい!!!どう書けばいいのだろうと思っていたのと、でいれば直書きしない方法をと思っていたのでコメントを先延ばしにしてしまいました。。。

    キャンセル

+1

phpを動かしているユーザにスイッチユーザしてaws configureしてください。
sudo su -でルートになれますので、その後、該当のユーザになって実行すれば良いです。

わかるのであれば、/home/ec2-user/.awsごと該当ユーザにコピーして権限変更しても良いです。

その後、EC2メタデータサーバに対してcurl http://169.254.169.254/latest/meta-data/を実行してください。
接続できなければ、セキュリティグループ。
値が返ってこなければ、STSが悪いです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/21 20:28

    lazhuwardさんありがとうございます。

    phpを動かしているユーザ...
    →phpinfo()で確認すればいいですかね?
     apache(48)とあったのでapacheにスイッチ > aws configure > var/www以下に.awsディレクトリが作られました。
     credentials、configファイルもあります。

    その後、EC2メタデータサーバに対してcurl http://169.254.169.254/latest/meta-data/を実行してください。
    →ユーザー=apacheのまま、実行しました。結果は以下です。
     これは値が帰ってきていないということになりますか?
    -bash-4.2$ curl http://169.254.169.254/latest/meta-data/
    ami-id
    ami-launch-index
    ami-manifest-path
    block-device-mapping/
    hostname
    instance-action
    instance-id
    instance-type
    local-hostname
    local-ipv4
    mac
    metrics/
    network/
    placement/
    profile
    public-hostname
    public-ipv4
    public-keys/
    reservation-id
    security-groups

    キャンセル

  • 2018/05/22 10:06 編集

    接続できなければ、エラーになるかタイムアウトするのでおそらく大丈夫です。

    その状態でブラウザから実行した時にどうなりますか?
    もし同じエラーが出るのであれば、使用されいるIAM(アクセスキーとシークレットアクセスキーをいれたユーザ)のプログラムアクセスのところのチェックが入っているか確認してください。

    キャンセル

  • 2018/05/23 12:35

    lazhuwardさん

    > その状態でブラウザから実行した時にどうなりますか?
    →同じエラーが表示されます。

    > プログラムアクセスのところのチェックが入っているか確認してください。
    →既存ユーザーのプログラムアクセスの確認方法が見つけられなかったので、新規ユーザーを作成してシークレットキーなどの設定をし直しましたが結果は同じでした。

    前のコメントでいただいた curl http://169.254.169.254/latest/meta-data/ の実行結果に iam が含まれていないことに気づきました。
    また、curl http://169.254.169.254/latest/meta-data/iam/security-credentials/ を実行してみた結果が以下でした。なにかヒントはありますでしょうか。。。

    -bash-4.2$ curl http://169.254.169.254/latest/meta-data/iam/security-credentials/
    <?xml version="1.0" encoding="iso-8859-1"?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    <head>
    <title>404 - Not Found</title>
    </head>
    <body>
    <h1>404 - Not Found</h1>
    </body>
    </html>

    キャンセル

  • 2018/05/23 14:16

    多分、apacheさんがモジュール見れてないだけのような気がします。
    モジュールにapacheが見れるように権限つけてあげてください。
    本当は、/home と同列にインストールしてしまっているため、違うところ(/usr/phpとか/var/phpとか)に、再インストールしたほうが良いです。

    キャンセル

  • 2018/05/23 15:33

    ここで言われているモジュールとは何に当たりますでしょうか?

    キャンセル

  • 2018/05/23 15:36 編集

    ---
    drwxrwxr-x 10 ec2-user ec2-user 4096 5月 20 15:57 vendor
    -rwxrwxr-x 1 ec2-user ec2-user 178 5月 9 15:57 autoload.php
    drwxrwxr-x 3 ec2-user ec2-user 4096 5月 9 15:57 aws
    drwxrwxr-x 2 ec2-user ec2-user 4096 5月 9 15:57 bin
    drwxrwxr-x 2 ec2-user ec2-user 4096 5月 9 15:57 composer
    drwxrwxr-x 3 ec2-user ec2-user 4096 5月 1 15:39 guzzle
    drwxrwxr-x 5 ec2-user ec2-user 4096 5月 9 15:57 guzzlehttp
    drwxrwxr-x 3 ec2-user ec2-user 4096 5月 9 15:57 mtdowling
    drwxrwxr-x 3 ec2-user ec2-user 4096 5月 9 15:57 psr
    drwxrwxr-x 3 ec2-user ec2-user 4096 5月 1 15:39 symfony
    ---
    php install したモジュールです。このあたりかと思います。
    チェンジオーナーするかチェンジモードすればよいですよ。

    キャンセル

  • 2018/05/23 20:24

    指摘していただいたディレクトリとファイルおよび.awsディレクトリは/home/ec2-user 配下と /var/www/html 配下にありまして、
    全てオーナーもグループもアパッチにしました。
    curl http://169.254.169.254/latest/meta-data/を実行したときに iam/ が出てくるようにはなりましたが、ダメでした。。。

    本日、AWSに詳しい方に質問する機会があり、エラーを見てもらったところ
    ec2インスタンスに(SESFullAccessがアタッチされた)IAMロールを割り当てる、または testmail.php に以下の通り直にシークレットIDを書くという方法でとりあえずブラウザで実行できるようになりました。

    $client = SesClient::factory(array(
    'version'=> 'latest',
    'region' => REGION,
    'credentials' => [
    'key' => 'xxxxxxxxxxxxxxxxxxxxxxxxxxx',
    'secret' => 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'],
    ));

    credencials が見れないというのは解決できておらず、
    また、たくさんアドバイスをいただいたlazhuwardさんには誠に申し訳ないのですが、
    一旦実装を進めるため、本件は解決(仮)とさせていただきます。

    ありがとうございました!

    キャンセル

  • 2018/05/23 20:34 編集

    ちゃんと理解できていないのですが、教えてくれた人が言っていたのは、
    以下のエラーは credentials が取得できない → インスタンスに割り当てられたロールを見に行く → ロールが割り当てられてない。という感じの内容のようです。
    インスタンスにSESFullAccessがアタッチされたIAMロールを割り当てると credentials が見れなくても、ロールの権限で送信ができる?ようです。

    [Sun May 20 23:29:28.344157 2018] [:error] [pid 25122] [client 106.181.135.135:51420] PHP Fatal error: Uncaught exception 'Aws\\Exception\\CredentialsException' with message 'Error retrieving credentials from the instance profile metadata server. (Client error: `GET http://169.254.169.254/latest/meta-data/iam/security-credentials/` resulted in a `404 Not Found` response:\n<?xml version="1.0" encoding="iso-8859-1"?>\n<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\n "htt (truncated...)\n)' in /var/www/html/vendor/aws/aws-sdk-php/src/Credentials/InstanceProfileProvider.php:88\nStack trace:\n#0 /var/www/html/vendor/guzzlehttp/promises/src/Promise.php(203): Aws\\Credentials\\InstanceProfileProvider->Aws\\Credentials\\{closure}(Array)\n#1 /var/www/html/vendor/guzzlehttp/promises/src/Promise.php(156): GuzzleHttp\\Promise\\Promise::callHandler(2, Array, Array)\n#2 /var/www/html/vendor/guzzlehttp/promises/src/TaskQueue.php(47): GuzzleHttp\\Promise\\Promise::GuzzleHttp\\Promise\\{closure}()\n#3 /var/www/html/vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php(98): GuzzleHttp\\Promise\\TaskQueue->run()\n#4 /var/www in /var/www/html/vendor/aws/aws-sdk-php/src/Credentials/InstanceProfileProvider.php on line 88

    キャンセル

  • 2018/05/24 11:08

    自己解決ということで、了解しました。

    curl http://169.254.169.254/latest/meta-data/ の返答で、
    IAMが出てこないので、EC2にIAMロールがあたってないのはわかってたのですが
    Credentialで解決する方法を試されていたので、IAMロール使わない方針と思ってしまっておりました。
    先に聞けばよかったです。すみません。

    >インスタンスにSESFullAccessがアパッチされたIAMロールを割り当てると credentials が見れなくても、ロールの権限で送信ができる
    これはその理解で大丈夫です。アパッチではなくアタッチですが。。。
    EC2インスタンスにIAMロールを追加するとIAMロールに入っているポリシー権限でアクセスが可能になり、ポリシーに入っているAWSサービスが実行できるようになります。

    キャンセル

  • 2018/05/24 12:20

    いろいろとアドバイスをいただきありがとうございました。
    現在プログラミンの勉強を初めて3ヶ月程度なので、コマンドやらApacheやらlinaxのユーザーやらわからないことが多く、、、
    本当に感謝しています。

    > curl http://169.254.169.254/latest/meta-data/ の返答で、
    IAMが出てこないので、EC2にIAMロールがあたってないのはわかってたのですが
    Credentialで解決する方法を試されていたので、IAMロール使わない方針と思ってしまっておりました。
    先に聞けばよかったです。すみません。
    →そうだったのですね。credentialsを見る方法しか知らなかったので固執していました。。。
     なぜ見れないのだろうと今でも少しモヤっとしているのですが、とりあえず先に進もうと思います。

    > これはその理解で大丈夫です。アパッチではなくアタッチですが。。。
    EC2インスタンスにIAMロールを追加するとIAMロールに入っているポリシー権限でアクセスが可能になり、ポリシーに入っているAWSサービスが実行できるようになります。
    →なるほど。勉強になります!
     あ、”アタッチ”に直しておきました。ありがとうございます。

    キャンセル

check解決した方法

0

5/20投稿分
ec2-userでsshログインしたまま、AWS SDK for PHPをインストールしたためhomeディレクトリ配下にvendorディレクトリがあった。
homeディレクトリは、デフォルトでは実行ユーザーに権限がない。
→権限を変更するか、ディレクトリを移す。

自分は、/home/ec2-user配下のvendorディレクトリを/var/www/html配下に移しました。

5/21投稿分
lazhuwardさんにアドバイスいただきいろいろ試しましたが、credentialsが見れないというのは解決できませんでした。
詳しい方に質問したところ、EC2インスタンスにロールを割り当てることでブラウザからメール送信できるようになりました。
EC2コンソールのアクション>インスタンスの設定>IAMロールの割り当てから設定できます。
なお、割り当てるロールにはSESFullAccessがアタッチされている必要があるようです。

![イメージ説明](46dfa326097361b250f9c23c32bea50e.png)

または、IPUさんの返信コメントで記載した通り、コードにシークレットキーなどを直接書いても送信できました。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/25 15:47

    追記
    ちゃんと確認はしていませんが、if文の中でuseは使えない?ようです。

    if文のなかにメールを送信するスクリプトを書いたところ、

    use Aws\Ses\SesClient;
    use Aws\Ses\Exception\SesException;

    でエラーが発生しまして、調べたところtry文の中でuseが使えないというヒントを得まして、
    try文の中では使ってないですが、if文の中で利用していたので、
    if文の外に出したら、エラーがなくなりました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.53%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    DynamoDBに複数の項目を追加するプログラムでcontext.done()をコールするタイミング...

    AWSのLambdaでS3にアップロードされたJSONファイルを読み込んで その内容をDynamoDBへ書き込むプログラムを作成しています。 JSONファイルには複数のデー

  • 解決済

    Postfixで受信から転送に切り替え

    いつもお世話になります、最近勉強欲が湧いてメールサーバーについて勉強しようと思っております。 今、少し前に作ったSMTP認証のメールサーバーを受信から転送用に変えようとしてい

  • 解決済

    【JS】どうみても存在するプロパティがundefinedになる

    console.log(userObj);では見えている'email'というプロパティが、次の行のconsole.log(userObj.email);でundefined、con

  • 解決済

    AWS S3 EC2 マウント

    AWSの学習をしています。 S3をEC2にマウントして、ファイルをアップロード出来る仕組みを作ろうとしています。 【前提条件・環境】 ・S3   bucket名"test

  • 受付中

    AWS Linux でBugzillaが表示されない

    AWS LinuxでbugzillとGitlabを設定完了したんですが exapmle.com/でgitlabが表示されていますが。 example.com/bugzilla/

  • 解決済

    EC2上でのシンタックスエラーについて

    EC2にSSH接続して、Node.jsを起動するために「sudo npm start」のコマンドを走らせると下記のようなエラーが出てしまい原因がわからず困っています。 間違えって

  • 解決済

    AWSの仮想linuxでchmodが効きません

    WindowsからGitBashでAWSの仮想Linuxを操作しています。 その途中であるグループに対し権限を変更しようとしたのですが、うまくいきませんでした。 Linuxにつ

  • 受付中

    AWS SQSへの接続ができない。

    S3への接続がうまくいったので、今度はキューを作成したいと思い、AWS SQSでキューを作って、aws sdkを使ってphpからキューをいじろうと考えたのですが、下記エラーがでてし

同じタグがついた質問を見る

  • PHP

    20282questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • AWS(Amazon Web Services)

    1998questions

    Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

  • Apache

    1811questions

    Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

  • Amazon EC2

    123questions

    Amazon EC2は“Amazon Elastic Compute Cloud”の略称です。Amazon Web Services(AWS)の一部であり、仮想化されたWebサーバーのコンピュータリソースをレンタルできるサービスです。