테스트 사이트 - 개발 중인 베타 버전입니다

aws로 sms 전송 질문드립니다. 채택완료

kujira 5년 전 조회 2,611

안녕하세요.

centos 6.10 사용하고 있고 php 버전은 5.6.40입니다.

aws로 sms전송 서비스를 사용하려고 하는데요...

aws에서 기본적인 세팅은 마친 상태입니다.

IAM 계정 생성해서 사용자추가로 AmazonSNSFullAccess 해놓았고요

저희 사이트 루트 경로가 /var/www/html이라 이 위치에서 composer로 aws sdk

설치를 했습니다.

그리고 sudo vi .aws/credentials에 aws_access_id와 aws_secret_access_key도 넣었습니다.

 

그리고 샘플페이지를 만들어 페이지를 열면 sms가 전송이 될 줄 알았는데 페이지가 500에러

가 뜨네요;;;;

 

샘플페이지는 아래와 같이 만들었습니다.

</p>

<p><?php

    require 'vendor/autoload.php'; </p>

<p>    use Aws\Sns\SnsClient;

    use Aws\Exception\AwsException;</p>

<p>    $SnSclient = new SnsClient([ 'profile' => 'default', 'region' => 'us-east-1', 'version' => '2010-03-31' ]); 

    $message = 'phptest'; 

    $phone = '+82내휴대폰번호'; //실제로는 제 휴대폰번호를 입력했습니다.

    

        try { $result = $SnSclient->publish([ 'Message' => $message, 'PhoneNumber' => $phone, ]); 

            var_dump($result); 

        } 

        catch (AwsException $e) { 

            error_log($e->getMessage()); 

        }

?></p>

<p>

 

위와 같이 만들어서 페이지를 열었더니 500에러가 뜨더라구요;;;;

어디에 뭐가 문제인지 도통 모르겠습니다.....

예상되는 문제점을 고수님들 조언 부탁드리겠습니다...

 

혹시나 region이 문제인가 생각해봤는데 region이 문제라면 500에러는 안떠야 되는게 맞는거 아닌가요?

댓글을 작성하려면 로그인이 필요합니다.

답변 2개

채택된 답변
+20 포인트

require 'vendor/autoload.php'

1) require __DIR__ . '/vendor/autoload.php';

2) require './vendor/autoload.php'

1번을 추천드립니다 오토로더 경로 문제인것 같은데요

로그인 후 평가할 수 있습니다

답변에 대한 댓글 3개

k
kujira
5년 전
알려주신 1번으로 수정을 해봐도 마찬가지로 500에러가 나옵니다....ㅠㅠ
2번도 마찬가지구요;;;
폴라베어
5년 전
.env 파일로 환경변수를 선언하셔야되는데
sudo vi .aws/credentials << 해당 방법은 자바에서 사용하는 환경변수 선언방식 인듯합니다.

아래 링크 메뉴얼처럼 서버에서 전역으로 설정하실수도 있고
프로젝트 루트 폴더에 .env을 생성해서 적용할수도 있습니다 << 해당 방법 추천

https://docs.aws.amazon.com/ko_kr/sdk-for-php/v3/developer-guide/guide_credentials_environment.html
https://github.com/aws/aws-sdk-php/issues/887#issuecomment-362592608
.env
[code]
AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
# The access key for your AWS account.
AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
# The secret access key for your AWS account.
AWS_SESSION_TOKEN=AQoDYXdzEJr...<remainder of security token>
# The session key for your AWS account. This is needed only when you are using temporary credentials.
# The AWS_SECURITY_TOKEN environment variable can also be used, but is only supported for backward compatibility purposes.
# AWS_SESSION_TOKEN is supported by multiple AWS SDKs other than PHP.
[/code]
k
kujira
5년 전
putenv('HOME=/var/www/html'); 로 HOME변수 설정하고
credentials에 아이디와 secret키를 [default]로 잡으니 sms가 전송이 되네요.
답변 감사드립니다!!

댓글을 작성하려면 로그인이 필요합니다.

잉끼s
5년 전

</p>

<p>// 에러로그 출력.</p>

<p>error_reporting(E_ALL); 

ini_set("display_errors", 1);</p>

<p>

<code>require</code> <code>'vendor/autoload.php'</code><code>; </code></p>

<p>

 

위와 같이 에러로그 출력하셔서 에러나는 곳 확인해보시기 바랍니다.

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

k
kujira
5년 전
알려주신데로 에러 확인을 해보니 Fatal error가 쭉 뜨는데
Fatal error: Uncaught exception 'Aws\Exception\CredentialsException' with message 'Cannot read credentials from /.aws/credentials' in /var/www/html/vendor/aws/aws-sdk-php/src/Credentials/CredentialProvider.php:689 Stack trace: #0 /var/www/html/vendor/aws/aws-sdk-php/src/Credentials/CredentialProvider.php(422): Aws\Credentials\CredentialProvider::reject('Cannot read cre...') #1 /var/www/html/vendor/aws/aws-sdk-php/src/Middleware.php(121): Aws\Credentials\CredentialProvider::Aws\Credentials\{closure}() #2 /var/www/html/vendor/aws/aws-sdk-php/src/RetryMiddleware.php(275): Aws\Middleware::Aws\{closure}(Object(Aws\Command), Object(GuzzleHttp\Psr7\Request)) #3 /var/www/html/vendor/aws/aws-sdk-php/src/Middleware.php(207): Aws\RetryMiddleware->__invoke(Object(Aws\Command), Object(GuzzleHttp\Psr7\Request)) #4 /var/www/html/vendor/aws/aws-sdk-php/src/StreamRequestPayloadMiddleware.php(83): Aws\Middleware::Aws\{closure}(Object(Aws\Command), Object(GuzzleHttp\Psr7\Request)) #5 /var/www/html/vendor/aws/aws-sdk-php/src/EndpointDiscover in /var/www/html/vendor/aws/aws-sdk-php/src/Credentials/CredentialProvider.php on line 689

이렇게 뜹니다. 살펴보니 대충 credential이 문제인것 같은데 제 실력이 아직 모자라서 확실한 문제가 뭐고 어떻게 해결해야 될지를 모르겠습니다.....ㅠㅠ

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인