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

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

QA

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

본문

안녕하세요.

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

답변을 작성하시기 전에 로그인 해주세요.
전체 123,529 | RSS
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT