2020년 11월 25일 수요일

[AWS] Php를 이용한 S3 이미지 업로드와 CloudFront에 추가

[ 순서 ]

Preparation : php설치, AWS CloudFront 사용 중

  • S3 사용을 위해 AWS-SDK-PHP 설치

  • 보안자격증명 key, secret 얻기

  • S3이미지 업로드 Php코드작성

  • S3버킷만들기

  • CloudFront에 S3 연동




[ AWS-SDK-PHP 설치 ]

1 2 3 4 5 6 7 8 9 10 11 php composer 설치 #php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" #php -r "if (hash_file('sha384', 'composer-setup.php') === '756890a4488ce9024fc62c56153228907f1545c228516cbf63f885e036d37e9a59d27d63f46af1d4d07ee0f76181c7d3') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;" #php composer-setup.php #php -r "unlink('composer-setup.php');" composer 전역설정 # sudo cp composer.phar /usr/bin/composer aws-sdk-php설치 #sudo composer require aws/aws-sdk-php

 


[ 보안자격증명 key, secret 얻기 ]

우측상단 계정클릭 → 내보안자격증명 → 액세스키 생성하여 key, secret 포함된 CSV파일 다운












[ S3버킷 설정 ]

1. AWS S3탭에 들어가 버킷생성

2.버킷을 퍼블릭으로 설정

3.해당버킷대쉬보드 → 권한 → 버킷정책

{
"Version": "2020-12-04",
"Statement": [
{
"Sid": "AddPerm",
"Effect": "Allow",
"Principal": "",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::yourBucketName/"
}
]
}


[ S3이미지 업로드 PHP code ]

Post로 File업로드시 필요한 파람터 값을 받는다. S3에 대한 리전, key, secret, 버킷이름 등의 정보를 입력하고, 앞서 다운받았던 aws-sdk-php API를 이용해 업로드 코드를 작성한다.

예제 )

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 #Php to aws S3 require '/PATHtoAWSSDK/aws-sdk/vendor/autoload.php'; use Aws\S3\S3Client; use Aws\Exception\AwsException; use Aws\Credentials\CredentialProvider; #Bucket 연결 객체 $s3Client = new S3Client([ 'region' => 'ap-northeast-1', 'version' => 'latest', # 자격증명 'credentials' => [ 'key' => 'your_key', 'secret' => 'your_secret', ], ]); #File Upload to S3 $fp = fopen($upload_file, r); $result = $s3Client->putObject([ 'Bucket'=>'upload-image-file', 'Key' => $_FILES['file1']['name'], 'Body' => $fp ]); fclose($fp);

참고 : https://docs.aws.amazon.com/ko_kr/sdk-for-php/v3/developer-guide/getting-started_basic-usage.html



[ CloudFront에 S3추가 ]

AWS CloudFront → Create Distribution → Web섹션 Get Started → Origin Domain Name에 만든 S3 Name으로 입력한다.














나머지 설정은 읽어보면서 입력하고 Distribution Settings에 Price Class입력란을 보면 Class 마다 제공되는 Location과 가격이 다르다.














예를 들어 내 서비스가 아프리카국가의 유저들에게는 지원을 하지 않는다면 요금계층200을 선택해 요금을 더 지불하지 않도록 한다.


또한 모든 Location에 CloudFront를 지원하지 않기에 아래 그림을 참조하여 가장 가까운 Edge Location을 찾아 시스템라인을 구성해야 할 것이다.

예를 들어 중국하얼빈 유저들에게 내 웹/앱 서비스를 할 경우 CloudFront Location은 거리상으로 베이징보다 서울이 가깝다고 해보자. 그럼 중국이 포함된 Price Class를 사용하는게 아닌 한국이 포함된 Class를 써야 가장 최적의 네트워크 속도를 가질 것이다.



마지막으로 SSL Certificate된 사용할 도메인을 입력한다.



[ CloudFront Behaviors ]

cloudfront → 변경할 Distributions → Behaviors 탭 → Create Behavior 버튼 → 생성후 저장 Pattern은 * 로 작성




CloudFront 참조 : https://docs.aws.amazon.com/ko_kr/AmazonCloudFront/latest/DeveloperGuide/Introduction.html

https://www.slideshare.net/lacryma1/53-aws-summit-seoul-2015

https://docs.aws.amazon.com/ko_kr/AmazonCloudFront/latest/DeveloperGuide/distribution-web-values-specify.html#DownloadDistValuesPathPattern



댓글 없음:

댓글 쓰기