[ 순서 ]
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