本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
對 的錯誤進行故障診斷 AWS CLI
本節介紹常見錯誤和解決問題時應遵循的故障診斷步驟。我們建議先遵循一般故障診斷。
內容
先嘗試的一般故障診斷
如果您收到錯誤或遇到 問題 AWS CLI,建議您使用以下一般提示來協助您進行疑難排解。
檢查您的 AWS CLI 命令格式
如果您收到錯誤,指出命令不存在,或無法辨識文件表示可用的參數 (Parameter validation failed
),則您的命令格式可能不正確。我們建議您檢查以下內容:
-
檢查您的命令是否有拼寫和格式錯誤。
-
確認所有的引號和逸出適合您的終端機在您的命令中是正確的。
-
產生 AWS CLI 骨架以確認您的命令結構。
-
對於 JSON,請參閱JSON值 的其他疑難排解。如果您的終端機處理JSON格式發生問題,建議您使用 Blob 將JSON資料直接傳遞至 , AWS CLI略過終端機的引號規則。
如需如何建構特定命令的詳細資訊,請參閱第 AWS CLI 2 版參考指南
檢查您的 AWS 區域AWS CLI 命令正在使用
注意
使用 AWS 區域 時 AWS CLI,您必須明確或透過設定預設區域來指定 。如需 AWS 區域 您可以指定之所有 的清單,請參閱 中的AWS 區域和端點Amazon Web Services 一般參考。所使用的 AWS 區域 代號 AWS CLI 與您在 和服務端點中 AWS Management Console URLs看到的名稱相同。
如果指定的 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
選項時,所包括的部分詳細資訊為:
-
API 對 botocore 的呼叫
-
狀態碼
-
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
命令 AWS CLI,您可能需要重新啟動終端機,才能識別任何PATH
更新。 - 可能原因: AWS CLI 未完全安裝
-
範例錯誤文字:
$
aws --version
command not found: aws
如果在第一次安裝或更新 後找不到
aws
命令 AWS CLI,則可能尚未完全安裝。請遵循 安裝或更新至最新版本的 AWS CLI 中適用於您平台的步驟,嘗試重新安裝。 - 可能原因: AWS CLI 沒有許可 (Linux)
-
如果在 Linux AWS CLI 上第一次安裝或更新 之後找不到
aws
命令,則可能沒有其安裝資料夾的execute
許可。使用 安裝PATH
的 執行下列命令 AWS CLI ,以提供chmod
許可 AWS CLI:$
sudo chmod -R 755
/usr/local/aws-cli/
- 可能原因:安裝期間作業系統的
PATH
未更新。 -
範例錯誤文字:
$
aws --version
command not found: aws
您可能需要將
aws
可執行檔新增到作業系統的PATH
環境變數中。若要將 AWS CLI 新增至您的PATH
,請針對作業系統使用以下指示。
「aws --version
」命令傳回的版本與您安裝的版本不同
您的終端機可能PATH
針對 傳回 AWS CLI 不同於預期的 。
- 可能的原因:安裝後需要重新啟動終端機
-
如果
aws
命令顯示錯誤的版本,您可能需要重新啟動終端機才能辨識任何PATH
更新。所有開放終端機都需要被關閉,不僅是您正在使用的終端機而已。 - 可能的原因:安裝後需要重新啟動系統
-
如果
aws
命令顯示錯誤的版本,且終端機重新啟動無效,您可能需要為其重新啟動系統以辨識您的PATH
更新。 - 可能原因:您有多個版本的 AWS CLI
-
如果您更新 AWS CLI 並使用與現有安裝不同的安裝方法,可能會導致安裝多個版本。例如,如果您在 Linux 或 macOS 上使用
pip
,但嘗試使用.pkg
安裝檔案,這可能會導致一些衝突,特別是如果您的PATH
指向舊版本。若要解決此問題,請解除安裝所有版本的 AWS CLI,並執行全新安裝。
解除安裝所有版本後,請遵循適用於您作業系統的指示,安裝所需版本的 AWS CLI 第 1 版或 AWS CLI 第 2 版。
注意
如果您在安裝 第 2 AWS CLI 版並預先安裝第 1 AWS CLI 版之後發生這種情況,請在從第 指示中的遷移說明從 AWS CLI 版本 1 安裝 AWS CLI 版本 2。
"aws --version
" 命令會在解除安裝 後傳回版本 AWS CLI
這通常發生在系統上仍有 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 使用 Python
argparse
程式庫,包括allow_abbrev
引數。參數的縮寫由 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-
不能以縮寫被識別,因為有可能是多個參數的縮寫,例如--change-set-name
和--change-set-type
。因此 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 操作。附加的政策必須授予您許可,以呼叫與您使用 執行的命令對應的API動作 AWS CLI。
大部分的命令均呼叫單一個名稱與命令名稱相符的動作。不過,像
aws s3 sync
呼叫多個 之類的自訂命令APIs。您可以使用--debug
選項查看APIs命令呼叫哪些 。如果您確定使用者或角色具有政策指派的適當許可,請確定您的 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 伺服器不同步
-
為了協助防止重送攻擊
,可以在加密/解密程序期間使用目前時間。如果用戶端和伺服器的時間差異超過允許的數量,程序可能會失敗並拒絕請求。當您在時鐘與主機時鐘不同步的虛擬機器中執行命令,也可能發生這種情況。其中一個可能的原因是虛擬機器休眠,在喚醒後需要一些時間才能與主機的時鐘同步。 在 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
錯誤訊息。這是由於 AWS CLI 不信任代理的憑證,例如代理的憑證是自我簽署的因素,而您的公司設定為憑證授權單位 (CA)。這可防止 在本機 CA 登錄檔中 AWS CLI 尋找您的公司 CA 根憑證。若要修正此問題,請指示 使用
ca_bundle
組態.pem
檔案設定、--ca-bundle命令列選項或AWS_CA_BUNDLE
環境變數來尋找公司檔案 AWS CLI 的位置。 - 可能的原因:您的配置未指向正確的 CA 根憑證位置
-
範例錯誤文字:
$
aws s3 ls
SSL validation failed for
regionname
[Errno 2] No such file or directory這是由於您的憑證授權機構 (CA) 套件檔案位置在 AWS CLI中被錯誤設定。若要解決這個問題,請確認您公司
.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 區域AWS CLI 命令正在使用。
- 可能原因:您的TLS版本需要更新
-
範例錯誤文字:
$
aws s3 ls
[SSL: UNSAFE_LEGACY_RENEGOTIATION_DISABLED] unsafe legacy renegotiation disabled
AWS 服務 使用的版本與您裝置的TLS版本TLS不相容。若要解決此問題,請更新至支援的TLS版本。如需詳細資訊,請參閱強制執行 TLS的 最低版本 AWS CLI。
無效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正確讀取您的 。
- 可能原因:您未輸入有效的 JSON AWS CLI 以供 使用
-
確認您已為命令JSON輸入有效資料。我們建議您使用JSON驗證器,因為JSON格式設定發生問題。
如需在命令列中更進階JSON的使用,請考慮使用命令列JSON處理器,例如
jq
來建立JSON字串。如需 的詳細資訊jq
,請參閱 上的 jq 儲存庫GitHub。 - 可能原因:終端機的引號規則阻止JSON有效傳送至 AWS CLI
-
從命令 AWS CLI 接收任何內容之前,您的終端機會使用其自己的引號和逸出規則來處理命令。由於終端機的格式化規則,在將命令傳遞至 之前,您的部分JSON內容可能會遭到分割 AWS CLI。格式化命令時,務必使用終端機的引號規則。
若要進行疑難排解,請使用
echo
命令查看 shell 如何處理您的參數:$
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。
注意
如果您無法JSON有效存取 AWS CLI,建議您使用 Blob 直接將JSON資料傳遞至 ,以略過終端機的JSON資料輸入引號規則 AWS CLI。如需 Blobs 的詳細資訊,請參閱 Blob。
其他資源
如需 AWS CLI 問題的其他協助,請造訪 上的AWS CLI 社群