AWS CLI에 대한 오류 문제 해결
이 섹션에서는 문제를 해결하기 위해 따라야 할 일반적인 오류와 문제 해결 단계를 다룹니다. 먼저 일반 문제 해결을 따르는 것이 좋습니다.
목차
먼저 시도해야 할 일반적인 문제 해결
AWS CLI에서 오류 메시지가 표시되거나 문제가 발생할 경우 문제를 해결하는 데 도움이 되는 다음과 같은 일반적인 팁을 따르는 것이 좋습니다.
AWS CLI 명령 형식 확인
명령이 존재하지 않는다는 오류가 발생하거나 명령이 설명서에서 사용 가능하다고 나열된 파라미터(Parameter validation failed
)를 인식하지 못하는 오류가 발생할 경우 명령 형식이 잘못되었을 수 있습니다. 다음을 확인하는 것이 좋습니다.
-
명령에서 맞춤법 및 형식 오류가 있는지 확인합니다.
-
명령에서 해당 터미널에 적용되는 모든 따옴표와 이스케이프가 올바른지 확인합니다.
-
AWS CLI 스켈레톤을 생성하여 명령 구조를 확인합니다.
-
JSON의 경우 추가로 JSON 값에 대한 문제 해결을 참조하세요. 터미널 처리 JSON 형식에 문제가 있는 경우 Blob를 사용하여 JSON 데이터를 AWS CLI에 직접 전달함으로써 터미널의 인용 규칙을 건너뛰는 것이 좋습니다.
특정 명령을 구성하는 방법에 대한 자세한 내용은 AWS CLI 버전 2 참조 가이드
AWS CLI 명령이 사용 중인 AWS 리전 확인
참고
AWS CLI를 사용하여 명시적으로 또는 기본 리전을 설정하여 AWS 리전 리전을 지정해야 합니다. 지정할 수 있는 모든 AWS 리전 목록은 Amazon Web Services 일반 참조의 AWS 리전 및 엔드포인트를 참조하세요. AWS CLI에서 사용하는 AWS Management Console 표기는 AWS 리전 URL 및 서비스 엔드포인트에서 사용하는 것과 동일한 이름입니다.
지정한 AWS 리전에서 AWS 서비스를 사용할 수 없거나 리소스가 다른 AWS 리전에 있는 경우 오류 또는 예기치 않은 결과가 발생할 수 있습니다. AWS 리전은 우선 순위에 따라 다음과 같은 방식으로 설정됩니다.
-
--region
명령줄 옵션 -
SDK 호환
AWS_REGION
환경 변수입니다. -
AWS_DEFAULT_REGION
환경 변수. -
region 프로파일 설정입니다.
리소스에 대해 올바른 AWS 리전을 사용하고 있는지 확인하세요.
최신 버전의 AWS CLI를 실행 중인지 확인합니다.
명령이 존재하지 않는다는 오류가 발생하거나 명령이 AWS CLI 버전 2 참조 가이드
최신 버전의 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가 구성되었는지 확인
config
및 credentials
파일이나 IAM 사용자 또는 역할이 올바르게 구성되지 않은 경우 다양한 오류가 발생할 수 있습니다. config
및 credentials
파일이나 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
에 추가하려면 사용 중인 운영 체제에 따라 다음에 나온 해당 지침을 따릅니다.
'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 버전 1에서 AWS CLI 버전 2 설치.
AWS CLI를 제거한 후 'aws --version
' 명령이 버전을 반환함
이는 대개 시스템 어딘가에 AWS CLI가 아직 설치되어 있는 경우 발생합니다.
- 가능한 원인: 제거 후 터미널을 다시 시작해야 함
-
aws --version
명령이 여전히 작동하는 경우 터미널 업데이트를 인식하도록 터미널을 다시 시작해야 할 수 있습니다. - 가능한 원인: 시스템에 여러 버전의 AWS CLI가 있거나 원래 AWS CLI를 설치하는 데 사용한 것과 동일한 제거 방법을 사용하지 않음
-
AWS CLI를 설치하는 데 사용한 것과 다른 방법을 사용하여 제거했거나 여러 버전을 설치한 경우 AWS CLI가 올바르게 제거되지 않을 수 있습니다. 예를 들어 현재 설치에
pip
를 사용한 경우pip
를 사용하여 제거해야 합니다. 이 문제를 해결하려면 설치에 사용한 것과 동일한 방법을 사용하여 AWS CLI를 제거합니다.-
운영 체제 및 원래 설치 방법에 해당하는 지침을 따라 AWS CLI 버전 1 및 AWS CLI 버전 2를 제거합니다.
-
열려 있는 터미널을 모두 닫습니다.
-
원하는 터미널을 열고 다음 명령에 입력한 후 버전이 반환되지 않는지 확인합니다.
$
aws --version
command not found: aws
출력에 여전히 버전이 나열되어 있는 경우 AWS CLI가 다른 방법을 사용하여 설치되었거나 여러 버전이 있을 가능성이 큽니다. AWS CLI를 설치하는 데 사용한 방법을 모르는 경우 버전 출력이 표시되지 않을 때까지 운영 체제에 해당하는 AWS CLI 버전 1 및 AWS 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
키 페어 세부 정보를 확인하려면
config
및credentials
파일을 검토합니다.config
및credentials
파일에 대한 자세한 내용은 AWS CLI의 구성 및 보안 인증 파일 설정 섹션을 참조하세요. 보안 인증 정보 우선 순위를 비롯한 인증 및 보안 인증에 대한 자세한 내용은 AWS CLI에 대한 인증 및 액세스 보안 인증 섹션을 참조하세요. - 가능한 원인: 컴퓨터의 클록이 동기화되지 않음
-
유효한 보안 인증 정보를 사용 중이라면 클록이 동기화되지 않았을 수 있습니다. 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 구성을 업데이트합니다. - 가능한 원인: 구성이 올바른 AWS 리전를 사용하지 않음
-
오류 텍스트 예:
$
aws s3 ls
[SSL: CERTIFICATE_ VERIFY_FAILED] certificate verify failed
지정한 AWS 리전에서 AWS 서비스를 사용할 수 없거나 리소스가 다른 AWS 리전에 있는 경우 오류 또는 예기치 않은 결과가 발생할 수 있습니다. 문제 해결 단계는 AWS CLI 명령이 사용 중인 AWS 리전 확인 섹션을 참조하세요.
- 가능한 원인: TLS 버전을 업데이트해야 함
-
오류 텍스트 예:
$
aws s3 ls
[SSL: UNSAFE_LEGACY_RENEGOTIATION_DISABLED] unsafe legacy renegotiation disabled
AWS 서비스가 디바이스의 TLS 버전과 호환되지 않는 TLS 버전을 사용합니다. 이 문제를 해결하려면 지원되는 TLS 버전으로 업데이트하세요. 자세한 내용은 AWS CLI에 최소 버전의 TLS 적용 섹션을 참조하세요.
잘못된 JSON 오류
오류 텍스트 예:
$
aws dynamodb update-table \ --provisioned-throughput
'{"ReadCapacityUnits":15,WriteCapacityUnits":10}'
\ --table-name MyDDBTableError 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 \ --debug2022-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 문제에 추가적인 도움이 필요하면 GitHub의 AWS CLI 커뮤니티