AWS CLI 오류 해결 - AWS Command Line Interface

AWS CLI 오류 해결

이 섹션에서는 문제를 해결하기 위해 따라야 할 일반적인 오류와 문제 해결 단계를 다룹니다. 먼저 일반 문제 해결을 따르는 것이 좋습니다.

먼저 시도해야 할 일반적인 문제 해결

AWS CLI에서 오류 메시지가 표시되거나 문제가 발생할 경우 문제를 해결하는 데 도움이 되는 다음과 같은 일반적인 팁을 따르는 것이 좋습니다.

맨 위로 이동

AWS CLI 명령 형식 확인

명령이 존재하지 않는다는 오류가 발생하거나 명령이 설명서에서 사용 가능하다고 나열된 파라미터(Parameter validation failed)를 인식하지 못하는 오류가 발생할 경우 명령 형식이 잘못되었을 수 있습니다. 다음을 확인하는 것이 좋습니다.

특정 명령을 구성하는 방법에 대한 자세한 내용은 AWS CLI 버전 2 참조 가이드를 참조하세요.

맨 위로 이동

최신 버전의 AWS CLI를 실행 중인지 확인합니다.

명령이 존재하지 않는다는 오류가 발생하거나 명령이 AWS CLI 버전 2 참조 가이드에서 사용 가능하다고 나열된 파라미터를 인식하지 못하는 오류가 발생할 경우 먼저 명령 형식이 올바른지 확인합니다. 형식이 올바른 경우 AWS CLI의 최신 버전으로 업그레이드하는 것이 좋습니다. 업데이트된 AWS CLI 버전은 업무일 기준으로 거의 매일 릴리스됩니다. 새로운 AWS 서비스, 기능 및 파라미터가 이러한 새 버전의 AWS CLI에 반영됩니다. 새로운 서비스, 기능 또는 파라미터에 액세스할 수 있는 유일한 방법은 해당 요소가 도입된 이후 릴리스된 버전으로 업그레이드하는 것입니다.

최신 버전의 AWS CLI 설치 또는 업데이트에 설명된 대로 AWS CLI의 버전 업데이트 방법은 원래 설치 방법에 따라 달라집니다.

번들 설치 관리자 중 하나를 사용한 경우 운영 체제에 적합한 최신 버전을 다운로드하여 설치하기 전에 기존 설치를 제거해야 할 수 있습니다.

맨 위로 이동

--debug 옵션 사용

AWS CLI에서 즉시 파악되지 않는 오류를 보고하거나 예상치 못한 결과를 생성하는 경우 --debug 옵션과 함께 명령을 다시 실행하여 오류에 대한 자세한 정보를 얻을 수 있습니다. 이 옵션을 사용하면 AWS CLI가 명령을 처리하는 데 필요한 모든 단계에 대한 세부 정보를 출력합니다. 출력에 있는 세부 정보를 통해 오류가 언제 발생했고 어디서 시작되었는지에 대한 단서를 확인할 수 있습니다.

이후 검토를 위해 출력을 텍스트 파일로 보내거나 요청이 있을 때 출력을 AWS Support에 보낼 수 있습니다.

--debug 옵션을 포함하면 다음과 같은 세부 정보가 포함됩니다.

  • 보안 인증 검색

  • 제공된 파라미터 구문 분석

  • AWS 서버에 보낸 요청 구성

  • 에 보낸 요청의 내용AWS

  • 원시 응답의 내용

  • 형식이 지정된 출력

다음은 --debug 옵션을 사용할 때와 사용하지 않을 때의 명령 실행의 예입니다.

$ aws iam list-groups --profile MyTestProfile { "Groups": [ { "Path": "/", "GroupName": "MyTestGroup", "GroupId": "AGPA0123456789EXAMPLE", "Arn": "arn:aws:iam::123456789012:group/MyTestGroup", "CreateDate": "2019-08-12T19:34:04Z" } ] }
$ aws iam list-groups --profile MyTestProfile --debug 2019-08-12 12:36:18,305 - MainThread - awscli.clidriver - DEBUG - CLI version: aws-cli/1.16.215 Python/3.7.3 Linux/4.14.133-113.105.amzn2.x86_64 botocore/1.12.205 2019-08-12 12:36:18,305 - MainThread - awscli.clidriver - DEBUG - Arguments entered to CLI: ['iam', 'list-groups', '--debug'] 2019-08-12 12:36:18,305 - MainThread - botocore.hooks - DEBUG - Event session-initialized: calling handler <function add_scalar_parsers at 0x7fdf173161e0> 2019-08-12 12:36:18,305 - MainThread - botocore.hooks - DEBUG - Event session-initialized: calling handler <function register_uri_param_handler at 0x7fdf17dec400> 2019-08-12 12:36:18,305 - MainThread - botocore.hooks - DEBUG - Event session-initialized: calling handler <function inject_assume_role_provider_cache at 0x7fdf17da9378> 2019-08-12 12:36:18,307 - MainThread - botocore.credentials - DEBUG - Skipping environment variable credential check because profile name was explicitly set. 2019-08-12 12:36:18,307 - MainThread - botocore.hooks - DEBUG - Event session-initialized: calling handler <function attach_history_handler at 0x7fdf173ed9d8> 2019-08-12 12:36:18,308 - MainThread - botocore.loaders - DEBUG - Loading JSON file: /home/ec2-user/venv/lib/python3.7/site-packages/botocore/data/iam/2010-05-08/service-2.json 2019-08-12 12:36:18,317 - MainThread - botocore.hooks - DEBUG - Event building-command-table.iam: calling handler <function add_waiters at 0x7fdf1731a840> 2019-08-12 12:36:18,320 - MainThread - botocore.loaders - DEBUG - Loading JSON file: /home/ec2-user/venv/lib/python3.7/site-packages/botocore/data/iam/2010-05-08/waiters-2.json 2019-08-12 12:36:18,321 - MainThread - awscli.clidriver - DEBUG - OrderedDict([('path-prefix', <awscli.arguments.CLIArgument object at 0x7fdf171ac780>), ('marker', <awscli.arguments.CLIArgument object at 0x7fdf171b09e8>), ('max-items', <awscli.arguments.CLIArgument object at 0x7fdf171b09b0>)]) 2019-08-12 12:36:18,322 - MainThread - botocore.hooks - DEBUG - Event building-argument-table.iam.list-groups: calling handler <function add_streaming_output_arg at 0x7fdf17316510> 2019-08-12 12:36:18,322 - MainThread - botocore.hooks - DEBUG - Event building-argument-table.iam.list-groups: calling handler <function add_cli_input_json at 0x7fdf17da9d90> 2019-08-12 12:36:18,322 - MainThread - botocore.hooks - DEBUG - Event building-argument-table.iam.list-groups: calling handler <function unify_paging_params at 0x7fdf17328048> 2019-08-12 12:36:18,326 - MainThread - botocore.loaders - DEBUG - Loading JSON file: /home/ec2-user/venv/lib/python3.7/site-packages/botocore/data/iam/2010-05-08/paginators-1.json 2019-08-12 12:36:18,326 - MainThread - awscli.customizations.paginate - DEBUG - Modifying paging parameters for operation: ListGroups 2019-08-12 12:36:18,326 - MainThread - botocore.hooks - DEBUG - Event building-argument-table.iam.list-groups: calling handler <function add_generate_skeleton at 0x7fdf1737eae8> 2019-08-12 12:36:18,326 - MainThread - botocore.hooks - DEBUG - Event before-building-argument-table-parser.iam.list-groups: calling handler <bound method OverrideRequiredArgsArgument.override_required_args of <awscli.customizations.cliinputjson.CliInputJSONArgument object at 0x7fdf171b0a58>> 2019-08-12 12:36:18,327 - MainThread - botocore.hooks - DEBUG - Event before-building-argument-table-parser.iam.list-groups: calling handler <bound method GenerateCliSkeletonArgument.override_required_args of <awscli.customizations.generatecliskeleton.GenerateCliSkeletonArgument object at 0x7fdf171c5978>> 2019-08-12 12:36:18,327 - MainThread - botocore.hooks - DEBUG - Event operation-args-parsed.iam.list-groups: calling handler functools.partial(<function check_should_enable_pagination at 0x7fdf17328158>, ['marker', 'max-items'], {'max-items': <awscli.arguments.CLIArgument object at 0x7fdf171b09b0>}, OrderedDict([('path-prefix', <awscli.arguments.CLIArgument object at 0x7fdf171ac780>), ('marker', <awscli.arguments.CLIArgument object at 0x7fdf171b09e8>), ('max-items', <awscli.customizations.paginate.PageArgument object at 0x7fdf171c58d0>), ('cli-input-json', <awscli.customizations.cliinputjson.CliInputJSONArgument object at 0x7fdf171b0a58>), ('starting-token', <awscli.customizations.paginate.PageArgument object at 0x7fdf171b0a20>), ('page-size', <awscli.customizations.paginate.PageArgument object at 0x7fdf171c5828>), ('generate-cli-skeleton', <awscli.customizations.generatecliskeleton.GenerateCliSkeletonArgument object at 0x7fdf171c5978>)])) 2019-08-12 12:36:18,328 - MainThread - botocore.hooks - DEBUG - Event load-cli-arg.iam.list-groups.path-prefix: calling handler <awscli.paramfile.URIArgumentHandler object at 0x7fdf1725c978> 2019-08-12 12:36:18,328 - MainThread - botocore.hooks - DEBUG - Event load-cli-arg.iam.list-groups.marker: calling handler <awscli.paramfile.URIArgumentHandler object at 0x7fdf1725c978> 2019-08-12 12:36:18,328 - MainThread - botocore.hooks - DEBUG - Event load-cli-arg.iam.list-groups.max-items: calling handler <awscli.paramfile.URIArgumentHandler object at 0x7fdf1725c978> 2019-08-12 12:36:18,328 - MainThread - botocore.hooks - DEBUG - Event load-cli-arg.iam.list-groups.cli-input-json: calling handler <awscli.paramfile.URIArgumentHandler object at 0x7fdf1725c978> 2019-08-12 12:36:18,328 - MainThread - botocore.hooks - DEBUG - Event load-cli-arg.iam.list-groups.starting-token: calling handler <awscli.paramfile.URIArgumentHandler object at 0x7fdf1725c978> 2019-08-12 12:36:18,328 - MainThread - botocore.hooks - DEBUG - Event load-cli-arg.iam.list-groups.page-size: calling handler <awscli.paramfile.URIArgumentHandler object at 0x7fdf1725c978> 2019-08-12 12:36:18,328 - MainThread - botocore.hooks - DEBUG - Event load-cli-arg.iam.list-groups.generate-cli-skeleton: calling handler <awscli.paramfile.URIArgumentHandler object at 0x7fdf1725c978> 2019-08-12 12:36:18,329 - MainThread - botocore.hooks - DEBUG - Event calling-command.iam.list-groups: calling handler <bound method CliInputJSONArgument.add_to_call_parameters of <awscli.customizations.cliinputjson.CliInputJSONArgument object at 0x7fdf171b0a58>> 2019-08-12 12:36:18,329 - MainThread - botocore.hooks - DEBUG - Event calling-command.iam.list-groups: calling handler <bound method GenerateCliSkeletonArgument.generate_json_skeleton of <awscli.customizations.generatecliskeleton.GenerateCliSkeletonArgument object at 0x7fdf171c5978>> 2019-08-12 12:36:18,329 - MainThread - botocore.credentials - DEBUG - Looking for credentials via: assume-role 2019-08-12 12:36:18,329 - MainThread - botocore.credentials - DEBUG - Looking for credentials via: assume-role-with-web-identity 2019-08-12 12:36:18,329 - MainThread - botocore.credentials - DEBUG - Looking for credentials via: shared-credentials-file 2019-08-12 12:36:18,329 - MainThread - botocore.credentials - INFO - Found credentials in shared credentials file: ~/.aws/credentials 2019-08-12 12:36:18,330 - MainThread - botocore.loaders - DEBUG - Loading JSON file: /home/ec2-user/venv/lib/python3.7/site-packages/botocore/data/endpoints.json 2019-08-12 12:36:18,334 - MainThread - botocore.hooks - DEBUG - Event choose-service-name: calling handler <function handle_service_name_alias at 0x7fdf1898eb70> 2019-08-12 12:36:18,337 - MainThread - botocore.hooks - DEBUG - Event creating-client-class.iam: calling handler <function add_generate_presigned_url at 0x7fdf18a028c8> 2019-08-12 12:36:18,337 - MainThread - botocore.regions - DEBUG - Using partition endpoint for iam, us-west-2: aws-global 2019-08-12 12:36:18,337 - MainThread - botocore.args - DEBUG - The s3 config key is not a dictionary type, ignoring its value of: None 2019-08-12 12:36:18,340 - MainThread - botocore.endpoint - DEBUG - Setting iam timeout as (60, 60) 2019-08-12 12:36:18,341 - MainThread - botocore.loaders - DEBUG - Loading JSON file: /home/ec2-user/venv/lib/python3.7/site-packages/botocore/data/_retry.json 2019-08-12 12:36:18,341 - MainThread - botocore.client - DEBUG - Registering retry handlers for service: iam 2019-08-12 12:36:18,342 - MainThread - botocore.hooks - DEBUG - Event before-parameter-build.iam.ListGroups: calling handler <function generate_idempotent_uuid at 0x7fdf189b10d0> 2019-08-12 12:36:18,342 - MainThread - botocore.hooks - DEBUG - Event before-call.iam.ListGroups: calling handler <function inject_api_version_header_if_needed at 0x7fdf189b2a60> 2019-08-12 12:36:18,343 - MainThread - botocore.endpoint - DEBUG - Making request for OperationModel(name=ListGroups) with params: {'url_path': '/', 'query_string': '', 'method': 'POST', 'headers': {'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8', 'User-Agent': 'aws-cli/1.16.215 Python/3.7.3 Linux/4.14.133-113.105.amzn2.x86_64 botocore/1.12.205'}, 'body': {'Action': 'ListGroups', 'Version': '2010-05-08'}, 'url': 'https://iam.amazonaws.com/', 'context': {'client_region': 'aws-global', 'client_config': <botocore.config.Config object at 0x7fdf16e9a4a8>, 'has_streaming_input': False, 'auth_type': None}} 2019-08-12 12:36:18,343 - MainThread - botocore.hooks - DEBUG - Event request-created.iam.ListGroups: calling handler <bound method RequestSigner.handler of <botocore.signers.RequestSigner object at 0x7fdf16e9a470>> 2019-08-12 12:36:18,343 - MainThread - botocore.hooks - DEBUG - Event choose-signer.iam.ListGroups: calling handler <function set_operation_specific_signer at 0x7fdf18996f28> 2019-08-12 12:36:18,343 - MainThread - botocore.auth - DEBUG - Calculating signature using v4 auth. 2019-08-12 12:36:18,343 - MainThread - botocore.auth - DEBUG - CanonicalRequest: POST / content-type:application/x-www-form-urlencoded; charset=utf-8 host:iam.amazonaws.com x-amz-date:20190812T193618Z content-type;host;x-amz-date 5f776d91EXAMPLE9b8cb5eb5d6d4a787a33ae41c8cd6eEXAMPLEca69080e1e1f 2019-08-12 12:36:18,344 - MainThread - botocore.auth - DEBUG - StringToSign: AWS4-HMAC-SHA256 20190812T193618Z 20190812/us-east-1/iam/aws4_request ab7e367eEXAMPLE2769f178ea509978cf8bfa054874b3EXAMPLE8d043fab6cc9 2019-08-12 12:36:18,344 - MainThread - botocore.auth - DEBUG - Signature: d85a0EXAMPLEb40164f2f539cdc76d4f294fe822EXAMPLE18ad1ddf58a1a3ce7 2019-08-12 12:36:18,344 - MainThread - botocore.endpoint - DEBUG - Sending http request: <AWSPreparedRequest stream_output=False, method=POST, url=https://iam.amazonaws.com/, headers={'Content-Type': b'application/x-www-form-urlencoded; charset=utf-8', 'User-Agent': b'aws-cli/1.16.215 Python/3.7.3 Linux/4.14.133-113.105.amzn2.x86_64 botocore/1.12.205', 'X-Amz-Date': b'20190812T193618Z', 'Authorization': b'AWS4-HMAC-SHA256 Credential=AKIA01234567890EXAMPLE-east-1/iam/aws4_request, SignedHeaders=content-type;host;x-amz-date, Signature=d85a07692aceb401EXAMPLEa1b18ad1ddf58a1a3ce7EXAMPLE', 'Content-Length': '36'}> 2019-08-12 12:36:18,344 - MainThread - urllib3.util.retry - DEBUG - Converted retries value: False -> Retry(total=False, connect=None, read=None, redirect=0, status=None) 2019-08-12 12:36:18,344 - MainThread - urllib3.connectionpool - DEBUG - Starting new HTTPS connection (1): iam.amazonaws.com:443 2019-08-12 12:36:18,664 - MainThread - urllib3.connectionpool - DEBUG - https://iam.amazonaws.com:443 "POST / HTTP/1.1" 200 570 2019-08-12 12:36:18,664 - MainThread - botocore.parsers - DEBUG - Response headers: {'x-amzn-RequestId': '74c11606-bd38-11e9-9c82-559da0adb349', 'Content-Type': 'text/xml', 'Content-Length': '570', 'Date': 'Mon, 12 Aug 2019 19:36:18 GMT'} 2019-08-12 12:36:18,664 - MainThread - botocore.parsers - DEBUG - Response body: b'<ListGroupsResponse xmlns="https://iam.amazonaws.com/doc/2010-05-08/">\n <ListGroupsResult>\n <IsTruncated>false</IsTruncated>\n <Groups>\n <member>\n <Path>/</Path>\n <GroupName>MyTestGroup</GroupName>\n <Arn>arn:aws:iam::123456789012:group/MyTestGroup</Arn>\n <GroupId>AGPA1234567890EXAMPLE</GroupId>\n <CreateDate>2019-08-12T19:34:04Z</CreateDate>\n </member>\n </Groups>\n </ListGroupsResult>\n <ResponseMetadata>\n <RequestId>74c11606-bd38-11e9-9c82-559da0adb349</RequestId>\n </ResponseMetadata>\n</ListGroupsResponse>\n' 2019-08-12 12:36:18,665 - MainThread - botocore.hooks - DEBUG - Event needs-retry.iam.ListGroups: calling handler <botocore.retryhandler.RetryHandler object at 0x7fdf16e9a780> 2019-08-12 12:36:18,665 - MainThread - botocore.retryhandler - DEBUG - No retry needed. 2019-08-12 12:36:18,665 - MainThread - botocore.hooks - DEBUG - Event after-call.iam.ListGroups: calling handler <function json_decode_policies at 0x7fdf189b1d90> { "Groups": [ { "Path": "/", "GroupName": "MyTestGroup", "GroupId": "AGPA123456789012EXAMPLE", "Arn": "arn:aws:iam::123456789012:group/MyTestGroup", "CreateDate": "2019-08-12T19:34:04Z" } ] }

맨 위로 이동

AWS CLI 명령 기록 로그 활성화 및 검토

cli_history 파일 설정을 사용하여 AWS CLI 명령 기록 로그를 활성화할 수 있습니다. 이 설정을 활성화하면 AWS CLI에서 aws 명령 내역을 기록합니다.

이 기록을 나열하려면 aws history list 명령을 사용하고 세부 정보를 보려면 aws history show 명령에 결과 command_ids를 사용할 수 있습니다. 자세한 내용은 AWS CLI 참조 가이드aws history 섹션을 참조하세요.

--debug 옵션을 포함하면 다음과 같은 세부 정보가 포함됩니다.

  • botocore에 대한 API 호출

  • 상태 코드

  • HTTP 응답

  • 헤더

  • 반환 코드

이 정보를 사용하여 파라미터 데이터 및 API 호출이 예상대로 작동하는지 확인한 다음, 프로세스의 어느 단계에서 명령이 실패했는지 추론할 수 있습니다.

맨 위로 이동

AWS CLI가 구성되었는지 확인

configcredentials 파일이나 IAM 사용자 또는 역할이 올바르게 구성되지 않은 경우 다양한 오류가 발생할 수 있습니다. configcredentials 파일이나 IAM 사용자 또는 역할과 관련된 오류 해결에 대한 자세한 내용은 액세스 거부 오류잘못된 보안 인증 정보 및 키 오류 섹션을 참조하세요.

맨 위로 이동

명령을 찾을 수 없음 오류

이 오류는 운영 체제에서 AWS CLI 명령을 찾을 수 없음을 의미합니다. 설치가 불완전하거나 업데이트가 필요할 수 있습니다.

가능한 원인: 설치된 버전보다 최신 AWS CLI 기능을 사용하려고 하거나 형식이 잘못됨

오류 텍스트 예:

$ aws s3 copy usage: aws [options] <command> <subcommand> [<subcommand> ...] [parameters] To see help text, you can run: aws help aws <command> help aws <command> <subcommand> help aws: error: argument subcommand: Invalid choice, valid choices are: ls | website cp | mv ....

명령의 형식이 잘못되었거나 기능이 릴리스되기 전의 이전 버전을 사용하는 경우 여러 가지 오류가 발생할 수 있습니다. 이 두 가지 문제를 해결하는 방법에 대한 자세한 내용은 AWS CLI 명령 형식 확인최신 버전의 AWS CLI를 실행 중인지 확인합니다. 섹션을 참조하세요.

맨 위로 이동

가능한 원인: 설치 후 터미널을 다시 시작해야 함

오류 텍스트 예:

$ aws --version command not found: aws

AWS CLI를 처음 설치하거나 업데이트한 후 aws 명령을 찾을 수 없는 경우 PATH 업데이트를 인식하도록 터미널을 다시 시작해야 할 수 있습니다.

맨 위로 이동

가능한 원인: AWS CLI가 완전히 설치되지 않음

오류 텍스트 예:

$ aws --version command not found: aws

AWS CLI를 처음 설치하거나 업데이트한 후 aws 명령을 찾을 수 없다면 완전히 설치되지 않았을 수 있습니다. 플랫폼에 해당하는 최신 버전의 AWS CLI 설치 또는 업데이트 단계에 따라 다시 설치해 봅니다.

맨 위로 이동

가능한 원인: AWS CLI에 권한이 없음(Linux)

Linux에 AWS CLI를 처음 설치하거나 업데이트한 후 aws 명령을 찾을 수 없다면 완전히 설치된 폴더에 대한 execute 권한이 없기 때문일 수 있습니다. AWS CLI에 chmod 권한을 제공하려면 AWS CLI 설치에 다음 명령을 PATH와 함께 실행합니다.

$ sudo chmod -R 755 /usr/local/aws-cli/

맨 위로 이동

가능한 원인: 설치하는 동안 운영 체제 PATH가 업데이트되지 않음

오류 텍스트 예:

$ aws --version command not found: aws

aws 실행 파일을 운영 체제의 PATH 환경 변수에 추가해야 할 수 있습니다. AWS CLI를 PATH에 추가하려면 사용 중인 운영 체제에 따라 다음에 나온 해당 지침을 따릅니다.

Linux and macOS
  1. 사용자 디렉터리에서 셸의 프로파일 스크립트를 찾습니다. 어떤 셸을 가지고 있는지 잘 모르는 경우 echo $SHELL을 실행합니다.

    $ ls -a ~ . .. .bash_logout .bash_profile .bashrc Desktop Documents Downloads
    • Bash - .bash_profile, .profile 또는 .bash_login

    • Zsh.zshrc

    • Tcsh - .tcshrc, .cshrc 또는 .login

  2. 내보내기 명령을 프로필 스크립트에 추가하세요. 다음 명령은 현재 PATH 변수에 로컬 bin을 추가합니다.

    export PATH=/usr/local/bin:$PATH
  3. 현재 세션에 업데이트된 프로파일을 다시 로드합니다.

    $ source ~/.bash_profile
Windows
  1. Windows 명령 프롬프트에서 where 명령을 /R path 파라미터와 함께 사용하여 aws 파일 위치를 찾습니다. aws를 포함한 모든 폴더가 반환됩니다.

    C:\> where /R c:\ aws c:\Program Files\Amazon\AWSCLIV2\aws.exe ...

    기본적으로 AWS CLI 버전 2는 다음 위치에 있습니다.

    c:\Program Files\Amazon\AWSCLIV2\aws.exe
  2. Windows 키를 누르고 environment variables를 입력하세요.

  3. 제안 목록에서 Edit environment variables for your account를 선택합니다.

  4. 경로를 선택한 다음 편집을 선택합니다.

  5. 첫 번째 단계에서 찾은 경로(예: C:\Program Files\Amazon\AWSCLIV2\aws.exe)를 Variable value 필드에 추가합니다.

  6. 확인을 두 번 선택하여 새 설정을 적용합니다.

  7. 실행 중인 명령 프롬프트를 모두 닫았다가 명령 프롬프트 창을 다시 엽니다.

맨 위로 이동

'aws --version' 명령이 설치한 버전과 다른 버전을 반환함

터미널이 AWS CLI에 대해 예상과 다른 PATH를 반환할 수 있습니다.

가능한 원인: 설치 후 터미널을 다시 시작해야 함

aws 명령에 잘못된 버전이 표시되는 경우 PATH 업데이트를 인식하도록 터미널을 다시 시작해야 할 수 있습니다. 활성 터미널뿐만 아니라 열려 있는 모든 터미널을 닫아야 합니다.

맨 위로 이동

가능한 원인: 설치 후 시스템을 다시 시작해야 함

aws 명령에 잘못된 버전이 표시되고 터미널을 다시 시작해도 문제가 해결되지 않는 경우 PATH 업데이트를 인식하도록 시스템을 다시 시작해야 할 수 있습니다.

맨 위로 이동

가능한 원인: 여러 버전의 AWS CLI가 있음

AWS CLI를 업데이트하면서 기존 설치와 다른 설치 방법을 사용한 경우 여러 버전이 설치될 수 있습니다. 예를 들어 Linux 또는 macOS에서 현재 설치에 pip를 사용했지만 .pkg 설치 파일을 사용하여 업데이트를 시도한 경우 특히 이전 버전을 가리키는 PATH와 충돌이 발생할 수 있습니다.

이 문제를 해결하려면 모든 버전의 AWS CLI를 제거하고 새로 설치를 수행합니다.

모든 버전을 제거한 후 운영 체제에 해당하는 지침을 따라 AWS CLI 버전 1 또는 AWS CLI 버전 2의 원하는 버전을 설치합니다.

참고

기존에 설치된 AWS CLI 버전 1과 함께 AWS CLI 버전 2를 설치한 후 이러한 문제가 발생하는 경우 에 나온 마이그레이션 지침을 따릅니다AWS CLI 버전 2 마이그레이션 지침.

맨 위로 이동

AWS CLI를 제거한 후 'aws --version' 명령이 버전을 반환함

이는 대개 시스템 어딘가에 AWS CLI가 아직 설치되어 있는 경우 발생합니다.

가능한 원인: 제거 후 터미널을 다시 시작해야 함

aws --version 명령이 여전히 작동하는 경우 터미널 업데이트를 인식하도록 터미널을 다시 시작해야 할 수 있습니다.

맨 위로 이동

가능한 원인: 시스템에 여러 버전의 AWS CLI가 있거나 원래 AWS CLI를 설치하는 데 사용한 것과 동일한 제거 방법을 사용하지 않음

AWS CLI를 설치하는 데 사용한 것과 다른 방법을 사용하여 제거했거나 여러 버전을 설치한 경우 AWS CLI가 올바르게 제거되지 않을 수 있습니다. 예를 들어 현재 설치에 pip를 사용한 경우 pip를 사용하여 제거해야 합니다. 이 문제를 해결하려면 설치에 사용한 것과 동일한 방법을 사용하여 AWS CLI를 제거합니다.

  1. 운영 체제 및 원래 설치 방법에 해당하는 지침을 따라 AWS CLI 버전 1AWS CLI 버전 2를 제거합니다.

  2. 열려 있는 터미널을 모두 닫습니다.

  3. 원하는 터미널을 열고 다음 명령에 입력한 후 버전이 반환되지 않는지 확인합니다.

    $ aws --version command not found: aws

    출력에 여전히 버전이 나열되어 있는 경우 AWS CLI가 다른 방법을 사용하여 설치되었거나 여러 버전이 있을 가능성이 큽니다. AWS CLI를 설치하는 데 사용한 방법을 모르는 경우 버전 출력이 표시되지 않을 때까지 운영 체제에 해당하는 AWS CLI 버전 1AWS CLI 버전 2의 각 제거 방법 지침을 따릅니다.

    참고

    패키지 관리자를 사용하여 AWS CLI(pip, apt, brew 등)를 설치한 경우 동일한 패키지 관리자를 사용하여 제거해야 합니다. 모든 버전의 패키지를 제거하는 방법에 대해 패키지 관리자가 제공하는 지침을 따르세요.

맨 위로 이동

AWS CLI에서 불완전한 파라미터 이름을 가진 명령을 처리했습니다.

가능한 원인: AWS CLI 파라미터의 알려진 약어를 사용했습니다.

AWS CLI는 Python을 사용하여 빌드되었으므로 AWS CLI에서 allow_abbrev 인수를 포함한 Python argparse 라이브러리를 사용합니다. 파라미터의 약어는 AWS CLI에 의해 인식되고 처리됩니다.

다음 create-change-set 명령 예제에서는 CloudFormation 스택 이름을 변경합니다. --change-set-n 파라미터는 --change-set-name의 약어로 인식되며 AWS CLI에서 명령을 처리합니다.

$ aws cloudformation create-change-set --stack-name my-stack --change-set-n my-change-set

약어가 여러 명령일 수 있는 경우 파라미터는 약어로 인식되지 않습니다.

다음 create-change-set 명령 예제에서는 CloudFormation 스택 이름을 변경합니다. --change-set-name--change-set-type와 같이 약어가 될 수 있는 여러 파라미터가 있기 때문에 --change-set- 파라미터는 약어로 인식되지 않습니다. 따라서 AWS CLI에서는 명령을 처리하지 않습니다.

$ aws cloudformation create-change-set --stack-name my-stack --change-set- my-change-set
주의

의도적으로 파라미터 약어를 사용하지 마세요. 신뢰할 수 없으며 이전 버전과도 호환되지 않습니다. 약어를 혼동시키는 새 파라미터가 명령에 추가되면 명령이 손상됩니다.

또한 파라미터가 단일 값 인수인 경우 명령에서 예상치 못한 동작이 발생할 수 있습니다. 단일 값 인수의 여러 인스턴스가 전달되면 마지막 인스턴스만 실행됩니다. 다음 예에서 --filters 파라미터는 단일 값 인수를 사용합니다. --filters--filter 파라미터는 지정됩니다. --filter 파라미터는 --filters의 약어입니다. 이로 인해 --filters의 두 인스턴스가 적용되고 마지막 --filter 인수만 적용됩니다.

$ aws ec2 describe-vpc-peering-connections \ --filters Name=tag:TagName,Values=VpcPeeringConnection \ --filter Name=status-code,Values=active

명령을 실행하기 전에 올바른 파라미터를 사용하고 있는지 확인하여 예기치 않은 동작을 방지하세요.

맨 위로 이동

액세스 거부 오류

가능한 원인: AWS CLI 프로그램 파일에 '실행' 권한이 없음

Linux 또는 macOS에서 aws 프로그램이 호출하는 사용자에 대한 실행 권한을 가지고 있는지 확인합니다. 일반적으로 사용 권한은 755로 설정됩니다.

사용자에 대한 실행 권한을 추가하려면 다음 명령을 실행합니다. 이때 ~/.local/bin/aws를 사용자 컴퓨터의 프로그램 경로로 바꾸세요.

$ chmod +x ~/.local/bin/aws

맨 위로 이동

가능한 원인: IAM 보안 인증에 작업을 수행할 수 있는 권한이 없음

오류 텍스트 예:

$ aws s3 ls An error occurred (AcessDenied) when calling the ListBuckets operation: Access denied.

AWS CLI 명령을 실행할 때 이를 실행하는 사용자를 대신해서 해당 사용자를 IAM 계정 또는 역할과 연결하는 보안 인증 정보를 사용하여 AWS 작업이 수행됩니다. 연결된 정책은 사용자가 AWS CLI에서 실행하는 명령에 해당하는 API 작업을 호출할 수 있는 권한을 부여해야 합니다.

대부분의 명령은 명령 이름과 일치하는 이름으로 한 가지 작업을 호출합니다. 그러나 aws s3 sync 같은 사용자 지정 명령은 여러 API를 호출합니다. --debug 옵션으로 명령이 어떤 API를 호출하는지 확인할 수 있습니다.

사용자 또는 역할에 정책이 할당한 적절한 권한이 있는 경우 필요한 보안 인증 정보를 AWS CLI 명령에서 사용 중인지 확인합니다. 필요한 보안 인증 정보를 AWS CLI에서 사용 중인지 확인하려면 보안 인증 정보에 대한 다음 섹션을 참조하세요.

IAM 권한 할당에 대한 자세한 내용은 IAM 사용 설명서에서 액세스 관리 개요: 권한 및 정책을 참조하세요.

맨 위로 이동

잘못된 보안 인증 정보 및 키 오류

오류 텍스트 예:

$ aws s3 ls An error occurred (InvalidAccessKeyId) when calling the ListBuckets operation: The AWS Access Key Id you provided does not exist in our records.
$ aws s3 ls An error occurred (InvalidClientTokenId) when calling the ListBuckets operation: The security token included in the request is invalid.
가능한 원인: AWS CLI가 잘못된 보안 인증 정보 또는 예상과 다른 위치의 보안 인증 정보를 읽습니다.

AWS CLI가 예상과 다른 위치에서 보안 인증 정보를 읽고 있거나 키 페어 정보가 올바르지 않을 수 있습니다. aws configure list를 실행하여 어떤 보안 인증을 사용하고 있는지 확인할 수 있습니다.

다음은 기본 프로파일에 사용된 보안 인증을 확인하는 방법을 나타낸 예제입니다.

$ aws configure list Name Value Type Location ---- ----- ---- -------- profile <not set> None None access_key ****************XYVA shared-credentials-file secret_key ****************ZAGY shared-credentials-file region us-west-2 config-file ~/.aws/config

다음은 명명된 프로파일의 보안 인증을 확인하는 방법을 나타낸 예제입니다.

$ aws configure list --profile saanvi Name Value Type Location ---- ----- ---- -------- profile saanvi manual --profile access_key **************** shared-credentials-file secret_key **************** shared-credentials-file region us-west-2 config-file ~/.aws/config

키 페어 세부 정보를 확인하려면 configcredentials 파일을 검토합니다. configcredentials 파일에 대한 자세한 내용은 구성 및 자격 증명 파일 설정 섹션을 참조하세요. 보안 인증 정보 우선 순위를 비롯한 인증 및 보안 인증에 대한 자세한 내용은 인증 및 액세스 보안 인증 섹션을 참조하세요.

맨 위로 이동

가능한 원인: 컴퓨터의 클록이 동기화되지 않음

유효한 보안 인증 정보를 사용 중이라면 클록이 동기화되지 않았을 수 있습니다. Linux 또는 macOS에서 date를 실행하여 시간을 확인합니다.

$ date

몇 분 안에 시스템 클록이 정확하지 않으면 ntpd를 사용하여 동기화합니다.

$ sudo service ntpd stop $ sudo ntpdate time.nist.gov $ sudo service ntpd start $ ntpstat

Windows에서는 제어판의 날짜 및 시간 옵션을 사용하여 시스템 클록을 구성합니다.

맨 위로 이동

서명 불일치 오류

오류 텍스트 예:

$ aws s3 ls An error occurred (SignatureDoesNotMatch) when calling the ListBuckets operation: The request signature we calculated does not match the signature you provided. Check your key and signing method.

AWS CLI에서 명령을 실행하면 암호화된 요청을 AWS 서버에 보내 적절한 AWS 서비스 작업을 수행합니다. 보안 인증(액세스 키 및 보안 키)이 암호화에 포함되며 보안 인증을 통해 AWS에서 요청하는 사람을 인증할 수 있습니다. 다음과 같이 이 프로세스의 올바른 작업에 방해가 될 수 있는 요소가 여러 개 있습니다.

가능한 원인: 클록이 AWS 서버와 동기화되지 않음

재생 공격(Replay Attack)으로부터 보호하기 위해 암호화/암호 해독 프로세스 동안 현재 시간이 사용될 수 있습니다. 클라이언트 및 서버의 시간이 허용된 시간을 넘는 경우 프로세스가 실패할 수 있으며 요청이 거부됩니다. 이는 클록이 호스트 머신의 클록과 동기화되지 않은 가상 머신에서 명령을 실행할 때에도 발생할 수 있습니다. 한 가지 가능한 원인은 가상 머신이 최대 절전 모드에 있다가 활성화된 후 얼마 뒤 클록을 호스트 머신과 동기화할 때입니다.

Linux 또는 macOS에서 date를 실행하여 시간을 확인합니다.

$ date

몇 분 안에 시스템 클록이 정확하지 않으면 ntpd를 사용하여 동기화합니다.

$ sudo service ntpd stop $ sudo ntpdate time.nist.gov $ sudo service ntpd start $ ntpstat

Windows에서는 제어판의 날짜 및 시간 옵션을 사용하여 시스템 클록을 구성합니다.

맨 위로 이동

가능한 원인: 운영 체제에서 특정 특수 문자가 포함된 AWS 키를 잘못 처리하고 있음

AWS 키에 -, +, / 또는 %와 같은 특정 특수 문자가 포함되어 있는 경우 일부 운영 체제 변형에서 해당 문자열을 잘못 처리해서 키 문자열이 잘못 해석됩니다.

보안 인증 파일 생성 중 새 인스턴스에 보안 인증 파일을 작성하는 도구와 같이 다른 도구 또는 스크립트를 사용하여 키를 처리하는 경우, 이러한 도구 및 스크립트를 통해 특수 문자가 AWS에서 더 이상 인식할 수 없는 것으로 변환되도록 특수 문자를 자체적으로 처리할 수도 있습니다.

문제를 일으키는 특수 문자가 포함되지 않은 비밀 키를 얻으려면 비밀 키를 다시 생성하는 것이 좋습니다.

맨 위로 이동

SSL 인증서 오류

가능한 원인: AWS CLI가 프록시 인증서를 신뢰하지 않음

오류 텍스트 예:

$ aws s3 ls [SSL: CERTIFICATE_ VERIFY_FAILED] certificate verify failed

AWS CLI 명령을 사용하면 [SSL: CERTIFICATE_ VERIFY_FAILED] certificate verify failed 오류 메시지를 받게 됩니다. 이것은 사용자의 프록시 인증서가 자체 서명되고 회사가 인증 기관(CA)으로 설정된 것과 같은 요인으로 인해 AWS CLI가 프록시의 인증서를 신뢰하지 않기 때문에 발생합니다. 이렇게 하면 AWS CLI에서 로컬 CA 레지스트리의 회사 CA 루트 인증서를 찾지 못하게 됩니다.

이 문제를 해결하려면 ca_bundle 구성 파일 설정, --ca-bundle 명령줄 옵션 또는 AWS_CA_BUNDLE 환경 변수를 사용해 회사의 .pem 파일을 찾을 수 있는 위치를 AWS CLI에 지시합니다.

맨 위로 이동

가능한 원인: 구성이 올바른 CA 루트 인증서 위치를 가리키지 않음

오류 텍스트 예:

$ aws s3 ls SSL validation failed for regionname [Errno 2] No such file or directory

이것은 AWS CLI에서 인증 기관(CA) 번들 파일 위치가 잘못 구성되었기 때문에 발생합니다. 이 문제를 해결하려면 회사 .pem 파일의 위치를 확인하고 ca_bundle 구성 파일 설정, --ca-bundle 명령줄 옵션 또는 AWS_CA_BUNDLE 환경 변수를 사용하여 AWS CLI 구성을 업데이트합니다.

맨 위로 이동

잘못된 JSON 오류

오류 텍스트 예:

$ aws dynamodb update-table \ --provisioned-throughput '{"ReadCapacityUnits":15,WriteCapacityUnits":10}' \ --table-name MyDDBTable Error parsing parameter '--provisioned-throughput': Invalid JSON: Expecting property name enclosed in double quotes: line 1 column 25 (char 24) JSON received: {"ReadCapacityUnits":15,WriteCapacityUnits":10}

AWS CLI 명령을 사용하면 "Invalid JSON" 오류 메시지를 받게 됩니다. 이것은 일반적으로 사용자가 예상 JSON 형식으로 명령을 입력했지만 AWS CLI가 JSON을 올바르게 읽을 수 없는 경우 표시되는 오류입니다.

가능한 원인: AWS CLI에서 사용할 유효한 JSON을 입력하지 않음

명령에 유효한 JSON을 입력했는지 확인합니다. 형식 지정에 문제가 있는 JSON에 대해 JSON 검사기를 사용하는 것이 좋습니다.

명령줄에서 고급 JSON을 사용하려면 명령줄 JSON 프로세서(예: jq)를 사용하여 JSON 문자열을 생성하는 것이 좋습니다. jq에 대한 자세한 내용은 GitHub에서 jq 리포지토리를 참조하세요.

맨 위로 이동

가능한 원인: 터미널의 인용 규칙으로 인해 유효한 JSON이 AWS CLI로 전송되지 않음

AWS CLI가 명령에서 무엇이든 수신하기 전에 터미널은 자체 인용 및 이스케이프 규칙을 사용하여 명령을 처리합니다. 터미널의 형식 지정 규칙으로 인해 명령이 AWS CLI에 전달되기 전에 일부 JSON 콘텐츠가 제거될 수 있습니다. 명령을 공식화할 때 터미널의 인용 규칙을 사용해야 합니다.

문제를 해결하려면 echo 명령을 사용하여 셸에서 파라미터를 처리하는 방법을 확인합니다.

$ echo {"ReadCapacityUnits":15,"WriteCapacityUnits":10} ReadCapacityUnits:15 WriteCapacityUnits:10
$ echo '{"ReadCapacityUnits":15,"WriteCapacityUnits":10}' {"ReadCapacityUnits":15,"WriteCapacityUnits":10}

유효한 JSON이 반환될 때까지 명령을 수정합니다.

보다 심층적인 문제 해결을 위해 --debug 파라미터를 사용하여 디버그 로그를 확인합니다. 디버그 로그에는 AWS CLI에 전달된 내용이 정확히 표시되어 있습니다.

$ aws dynamodb update-table \ --provisioned-throughput '{"ReadCapacityUnits":15,WriteCapacityUnits":10}' \ --table-name MyDDBTable \ --debug 2022-07-19 22:25:07,741 - MainThread - awscli.clidriver - DEBUG - CLI version: aws-cli/1.18.147 Python/2.7.18 Linux/5.4.196-119.356.amzn2int.x86_64 botocore/1.18.6 2022-07-19 22:25:07,741 - MainThread - awscli.clidriver - DEBUG - Arguments entered to CLI: ['dynamodb', 'update-table', '--provisioned-throughput', '{"ReadCapacityUnits":15,WriteCapacityUnits":10}', '--table-name', 'MyDDBTable', '--debug']

터미널의 인용 규칙을 사용하여 JSON 입력이 AWS CLI로 전송될 때 발생하는 문제를 해결합니다. 인용 규칙에 대한 자세한 내용은 AWS CLI에서 문자열에 따옴표 사용 섹션을 참조하세요.

참고

AWS CLI에 유효한 JSON을 가져오는 데 문제가 있는 경우 Blob을 사용하여 JSON 데이터를 AWS CLI에 직접 전달함으로써 JSON 데이터 입력에 대한 터미널의 인용 규칙을 우회하는 것이 좋습니다. Blob에 대한 자세한 내용은 Blob 섹션을 참조하세요.

맨 위로 이동

추가 리소스

AWS CLI 문제에 추가적인 도움이 필요하면 GitHubAWS CLI 커뮤니티 또는 AWS re:Post 커뮤니티를 방문하세요.

맨 위로 이동