aws로 sms 전송 질문드립니다.

aws로 sms 전송 질문드립니다.

QA

aws로 sms 전송 질문드립니다.

답변 2

본문

안녕하세요.

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에러

가 뜨네요;;;;

 

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


<?php
    require 'vendor/autoload.php'; 
    use Aws\Sns\SnsClient;
    use Aws\Exception\AwsException;
    $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()); 
        }
?>

 

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

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

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

 

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

이 질문에 댓글 쓰기 :

답변 2

require 'vendor/autoload.php'

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

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

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

.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


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.


// 에러로그 출력.
error_reporting(E_ALL); 
ini_set("display_errors", 1);

require 'vendor/autoload.php'; 

 

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

알려주신데로 에러 확인을 해보니 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이 문제인것 같은데 제 실력이 아직 모자라서 확실한 문제가 뭐고 어떻게 해결해야 될지를 모르겠습니다.....ㅠㅠ

답변을 작성하시기 전에 로그인 해주세요.
QA 내용 검색
질문등록
전체 57
© SIRSOFT
현재 페이지 제일 처음으로