AWS SDK for PHP 버전 3에 대한 FAQ - AWS SDK for PHP

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

AWS SDK for PHP 버전 3에 대한 FAQ

클라이언트에서 사용 가능한 메서드는 무엇입니까?

AWS SDK for PHP는 서비스 설명 및 동적 magic __call() methods를 사용하여 API 작업을 실행합니다. 웹 서비스 클라이언트에 사용 가능한 전체 메서드 목록은 클라이언트의 API 설명서에서 확인할 수 있습니다.

cURL SSL 인증서 오류가 발생한 경우 어떻게 해야 하나요?

이 문제는 cURL 및 SSL을 포함하는 최신이 아닌 CA 번들을 사용할 때 발생할 수 있습니다. 서버에서 CA 번들을 업데이트하거나 cURL 웹 사이트에서 직접 최신 CA 번들을 다운로드하여 이 문제를 해결할 수 있습니다.

기본적으로 AWS SDK for PHP는 PHP를 컴파일할 때 구성되는 CA 번들을 사용합니다. openssl.cafile PHP .ini 구성 설정을 디스크에 있는 CA 파일의 경로로 설정하도록 수정하여 PHP에서 사용되는 기본 CA 번들을 변경할 수 있습니다.

클라이언트에서 사용 가능한 API 버전은 무엇입니까?

version 옵션은 클라이언트를 생성할 때 필요합니다. 사용 가능한 API 버전 목록은 각 클라이언트의 API 설명서 페이지(::aws-php-class:<index.html>)에서 확인할 수 있습니다. 특정 API 버전을 로드할 수 없는 경우 AWS SDK for PHP의 사본을 업데이트해야 할 수도 있습니다.

클라이언트의 API 공급자가 찾을 수 있는 최신 API 버전을 사용하려면 latest 문자열을 "버전" 구성 값에 제공합니다(기본 api_provider는 API용 SDK 모델의 src/data 디렉터리를 스캔함).

주의

API 업데이트를 포함하는 SDK의 새 마이너 버전을 끌어오면 프로덕션 애플리케이션이 중단될 수 있으므로 프로덕션 애플리케이션에서 latest를 사용하지 않는 것이 좋습니다.

클라이언트에서 사용 가능한 리전 버전은 무엇입니까?

region 옵션은 클라이언트를 생성할 때 필요하며, 문자열 값을 사용하여 지정합니다. 사용할 수 있는 AWS 리전 목록은 AWS 일반 참조의 AWS 리전 및 엔드포인트를 참조하세요.

// Set the Region to the EU (Frankfurt) Region. $s3 = new Aws\S3\S3Client([ 'region' => 'eu-central-1', 'version' => '2006-03-01' ]);

2GB보다 큰 파일은 왜 업로드하거나 다운로드할 수 없나요?

PHP는 부호가 있는 정수 유형을 사용하는데 대부분의 플랫폼에서는 32비트 정수를 사용하므로, AWS SDK for PHP는 32비트 스택에서 2GB보다 큰 파일을 올바르게 처리하지 못합니다. 여기서 "스택"은 CPU, OS, 웹 서버, PHP 바이너리를 포함합니다. 이것은 잘 알려진 PHP 문제입니다. Microsoft Windows의 경우 PHP 7 빌드에서만 64비트 정수를 지원합니다.

권장 솔루션은 최신 버전의 PHP가 설치된 64비트 Linux 스택(예: 64비트 Amazon Linux AMI)을 사용하는 것입니다.

자세한 내용은 PHP filesize: Return values 관련 문서를 참조하세요.

네트워크를 통해 전송되는 데이터를 확인하려면 어떻게 해야 하나요?

클라이언트 생성자에서 debug 옵션을 사용하여 네트워크를 통해 전송되는 데이터를 비롯한 디버그 정보를 가져올 수 있습니다. 이 옵션을 true로 설정하면 실행 중인 명령의 모든 변형, 전송 중인 요청, 수신 중인 응답, 처리 중인 결과가 STDOUT로 방출됩니다. 여기에는 네트워크를 통해 주고 받는 데이터가 포함됩니다.

$s3Client = new Aws\S3\S3Client([ 'region' => 'us-standard', 'version' => '2006-03-01', 'debug' => true ]);

요청에 대한 임의 헤더를 설정하려면 어떻게 해야 하나요?

Aws\HandlerList 또는 Aws\CommandInterfaceAws\ClientInterface에 사용자 지정 미들웨어를 추가하여 서비스 작업에 임의 헤더를 추가할 수 있습니다. 다음 예에서는 Aws\Middleware::mapRequest 헬퍼 메서드를 사용하여 특정 Amazon S3PutObject 작업에 X-Foo-Baz 헤더를 추가하는 방법을 보여줍니다.

자세한 내용은 mapRequest를 참조하세요.

임의 요청에 서명하려면 어떻게 해야 하나요?

SDK:AWS-PHP-Class: SignatureV4 클래스 <class-Aws.Signature.SignatureV4.html>를 사용하여 임의::aws-php-class: PSR-7 요청 <class-Psr.Http.Message.RequestInterface.html>에 서명할 수 있습니다.

이렇게 수행하는 방법에 대한 전체 예제는 AWS SDK for PHP 버전 3으로 사용자 지정 Amazon CloudSearch 도메인 요청에 서명을 참조하세요.

명령을 전송하기 전에 수정하려면 어떻게 해야 하나요?

Aws\HandlerList 또는 Aws\CommandInterfaceAws\ClientInterface에 사용자 지정 미들웨어를 추가하여 명령을 전송하기 전에 수정할 수 있습니다. 다음 예에서는 명령을 전송하기 전에 명령에 사용자 지정 명령 파라미터를 추가하는 방법을 보여줍니다. 이때 기본 옵션을 추가해야 합니다. 이 예에서는 Aws\Middleware::mapCommand 헬퍼 메서드를 사용합니다.

자세한 내용은 mapCommand를 참조하세요.

CredentialsException이란 무엇입니까?

AWS SDK for PHP를 사용하는 동안 Aws\Exception\CredentialsException이 표시되는 경우, SDK에 자격 증명이 제공되지 않아 사용 중인 환경에서 자격 증명을 찾을 수 없다는 것을 의미합니다.

자격 증명 없이 클라이언트를 인스턴스화한 경우 서비스 작업을 처음으로 수행할 때 SDK에서 자격 증명을 찾으려고 시도합니다. 먼저 일부 특정 환경 변수를 확인한 다음 구성된 Amazon EC2 인스턴스에서만 사용 가능한 인스턴스 프로파일 자격 증명을 찾습니다. 자격 증명이 제공되지 않았거나 없는 경우 Aws\Exception\CredentialsException이 발생합니다.

이 오류가 표시되는 경우 인스턴스 프로파일 자격 증명을 사용하려면 SDK가 실행 중인 Amazon EC2 인스턴스가 적절한 IAM 역할로 구성되어 있는지 확인해야 합니다.

이 오류가 표시되는 경우 인스턴스 프로파일 자격 증명을 사용하지 않으려면 SDK에 자격 증명을 올바르게 제공했는지 확인해야 합니다.

자세한 내용은 AWS SDK for PHP 버전 3의 자격 증명을 참조하세요.

AWS SDK for PHP는 HHVM에서 작동합니까?

AWS SDK for PHP는 현재 HHVM에서 실행되지 않으며, HHVM의 배포량 시맨틱 문제가 해결될 때까지 사용할 수 없습니다.

SSL을 비활성화하려면 어떻게 해야 하나요?

클라이언트 팩토리 메서드의 scheme 파라미터를 'http'로 설정하여 SSL을 비활성화할 수 있습니다. 모든 서비스에서 http 액세스를 지원하는 것은 아닙니다. 모든 지원 리전 및 엔드포인트 목록은 AWS 일반 참조에서 AWS 리전 및 엔드포인트를 참조하세요.

$client = new Aws\DynamoDb\DynamoDbClient([ 'version' => '2012-08-10', 'region' => 'us-west-2', 'scheme' => 'http' ]);
주의

SSL에서 모든 데이터를 암호화해야 하고, 연결 핸드셰이크를 완료하는 데 TCP보다 더 많은 TCP 패킷이 필요하므로 SSL을 비활성화하면 성능이 약간 향상될 수 있습니다. 하지만 SSL을 비활성화하면 모든 데이터가 암호화되지 않은 네트워크를 통해 전송됩니다. 따라서 SSL을 비활성화하기 전에 보안 영향과 네트워크를 통한 염탐 가능성을 신중하게 고려해야 합니다.

"구문 분석 오류"가 발생한 경우 어떻게 해야 하나요?

PHP 엔진은 이해할 수 없는 구문이 발견될 경우 구문 분석 오류를 발생합니다. 이 오류는 다른 버전의 PHP용으로 작성된 코드를 실행하려고 시도할 때 거의 항상 발생합니다.

구문 분석 오류가 발생하는 경우, 시스템이 SDK의 AWS SDK for PHP 버전 3에 대한 요구 사항 및 권장 사항을 충족하는지 확인해야 합니다.

Amazon S3 클라이언트가 gzip으로 압축된 파일을 해제하는 이유는 무엇입니까?

기본 Guzzle 6 HTTP 핸들러를 비롯한 일부 HTTP 핸들러에서는 압축된 응답 본문을 기본적으로 압축 해제합니다. decode_content HTTP 옵션을 false로 설정하여 이 동작을 재정의할 수 있습니다. 이전 버전과의 호환성을 위해 이 기본값은 변경할 수 없지만, S3 클라이언트 수준에서 콘텐츠 디코딩을 비활성화하는 것이 좋습니다.

자동 콘텐츠 디코딩을 비활성화하는 방법을 보여주는 예는 decode_content를 참조하세요.

Amazon S3에서 본문 서명을 비활성화하려면 어떻게 해야 하나요?

명령 객체의 ContentSHA256 파라미터를 Aws\Signature\S3SignatureV4::UNSIGNED_PAYLOAD로 설정하여 본문 서명을 비활성화할 수 있습니다. 그러면 AWS SDK for PHP는 이 파라미터를 'x-amz-content-sha-256' 헤더로 사용하고 표준 요청의 본문 체크섬을 사용합니다.

$s3Client = new Aws\S3\S3Client([ 'version' => '2006-03-01', 'region' => 'us-standard' ]); $params = [ 'Bucket' => 'foo', 'Key' => 'baz', 'ContentSHA256' => Aws\Signature\S3SignatureV4::UNSIGNED_PAYLOAD ]; // Using operation methods creates command implicitly $result = $s3Client->putObject($params); // Using commands explicitly. $command = $s3Client->getCommand('PutObject', $params); $result = $s3Client->execute($command);

AWS SDK for PHP는 재시도 스키마를 어떻게 처리하나요?

AWS SDK for PHP에는 재시도 동작을 처리하는 RetryMiddleware가 있습니다. 서버 오류에 대한 5xx HTTP 상태 코드 측면에서 SDK는 500, 502, 503 및 504에 대해 재시도됩니다.

재시도를 통해 RequestLimitExceeded, Throttling, ProvisionedThroughputExceededException, ThrottlingException, RequestThrottled, BandwidthLimitExceeded를 비롯한 예외를 처리합니다.

또한 AWS SDK for PHP는 지수 지연을 재시도 스키마의 백오프 및 지터 알고리즘과 통합합니다. 모든 서비스에 대한 기본 재시도 동작은 3으로 구성되며, Amazon DynamoDB만 예외적으로 10으로 구성됩니다.

오류 코드가 있는 예외를 처리하려면 어떻게 해야 하나요?

AWS SDK for PHP 사용자 지정 Exception 클래스 외에 각 AWS 서비스 클라이언트에는 AwsExceptionAwsException에서 상속되는 자체 예외 클래스가 있습니다. 각 메서드의 Errors 섹션에 나열된 API 관련 오류를 포착하기 위해 오류 유형을 자세히 결정할 수 있습니다.

오류 코드 정보는 Aws\Exception\AwsException에서 getAwsErrorCode()로 확인할 수 있습니다.

$sns = new \Aws\Sns\SnsClient([ 'region' => 'us-west-2', 'version' => 'latest', ]); try { $sns->publish([ // parameters ... ]); // Do something } catch (SnsException $e) { switch ($e->getAwsErrorCode()) { case 'EndpointDisabled': case 'NotFound': // Do something break; } }