このトピックでは、Object Storage Service (OSS) SDK for Goを使用するときのエラーのトラブルシューティング方法について説明します。
クライアントエラー
OSS SDK for Goを使用しているときにエラーが発生した場合は、エラーのトラブルシューティングに使用できる統合エラーインターフェイスが返されます。 次のサンプルコードは、エラーインターフェイスの例を示しています。
型エラーインターフェイス {
エラー () 文字列
}
このインターフェイスに基づいて、他の特定のエラーをトラブルシューティングできます。 次のコードは、HTTPリクエストエラーを返すために使用されるエラーインターフェイスの例を示しています。
// net. エラー
type Error interface {
error
Timeout() bool // Is the error a timeout
Temporary() bool // 一時的なエラーです
}
サーバーエラー
OSS SDK for Goを使用しているときにリクエストエラーが発生した場合は、対応するエラーメッセージが返されます。 OSS SDK for Goで定義されているエラーは、HTTPリクエストエラーおよびI/Oリクエストエラーに対して返されます。 OSSサーバーがリクエストを処理するときにエラーが発生した場合、エラーインターフェイスの実装である次のサンプルコードが返されます。
型ServiceError struct {
コード文字列 // OSSから返されたエラーコード。
メッセージ文字列 // OSSによって提供されるエラーの詳細。
RequestId文字列 // リクエストのUUID。
HostId文字列 // アクセスされたOSSクラスターのホストID。
StatusCode int // HTTPステータスコード。
}
OSSから返されるHTTPステータスコードが期待どおりでない場合、返されるレスポンスには、エラーインターフェイスの実装である次のサンプルコードが含まれます。
型UnexpectedStatusCodeError struct {
allowed []int // OSSによって返される予想されるHTTPステータスコード。
got int // OSSによって返される実際のHTTPステータスコード。
}
例
次のコードは、エラーの処理方法の例を示しています。
パッケージメイン
import (import (import)
"fmt"
"os"
"strings"
「github.com/aliyun/aliyun-oss-go-sdk/oss」
)
// エラー処理の関数。
func HandleError(err error) {
fmt.Println("Error:", err)
os.Exit(-1)
}
func main() {
/// 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err! =nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// Create an OSSClient instance.
// バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 実際のエンドポイントを指定します。
client, err := oss.New("yourEndpoint", ", " ", ", oss.SetCredentialsProvider(&provider))
if err! =nil {
HandleError(err)
}
// バケットの名前を指定します。 例: examplebucket.
bucketName := "examplebucket"
// オブジェクトの名前を指定します。 例: exampleobject.txt。
objectName := "exampleobject.txt"
bucket, err := client.Bucket(bucketName)
if err! =nil {
HandleError(err)
}
// Upload a string.
err = bucket.PutObject(objectName, strings.NewReader("Hello OSS"))
if err! =nil {
HandleError(err)
}
}
OSS エラーコード
次の表に、OSSエラーコードを示します。
エラーコード | 説明 | HTTPステータスコード |
AccessDenied | アクセスが拒否されました。 | 403 |
BucketAlreadyExists | バケットが既に存在します。 | 409 |
BucketNotEmpty | バケットが空ではありません。 | 409 |
EntityTooLarge | エンティティサイズが上限を超えています。 | 400 |
EntityTooSmall | エンティティサイズが下限を下回っています。 | 400 |
FileGroupTooLarge | ファイルグループのサイズが上限を超えています。 | 400 |
InvalidLinkName | シンボリックリンクの名前は、シンボリックリンクが指すオブジェクトと同じです。 | 400 |
LinkPartNotExist | シンボリックリンクが指すオブジェクトは存在しません。 | 400 |
ObjectLinkTooLarge | シンボリックリンクが指すことができるオブジェクトの最大数に達しています。 | 400 |
FieldItemTooLong | POSTリクエストのすべてのフォームフィールドの合計長が制限を超えています。 | 400 |
FilePartInterity | パーツが変更されました。 | 400 |
FilePartNotExist | 部品は存在しません。 | 400 |
FilePartStale | オブジェクトパーツは有効期限切れです。 | 400 |
IncorrectNumberOfFilesInPOSTRequest | POSTリクエストのファイル数が正しくありません。 | 400 |
InvalidArgument | パラメーターの形式が無効です。 | 400 |
InvalidAccessKeyId | AccessKey IDが存在しません。 | 403 |
InvalidBucketName | バケット名が無効です。 | 400 |
InvalidDigest | ダイジェストが無効です。 | 400 |
InvalidEncryptionAlgorithmError | 暗号化アルゴリズムが無効です。 | 400 |
InvalidObjectName | オブジェクト名が無効です。 | 400 |
InvalidPart | パーツが無効です。 | 400 |
InvalidPartOrder | 部品シーケンスが無効です。 | 400 |
InvalidPolicyDocument | ポリシー文書が無効です。 | 400 |
InvalidTargetBucketForLogging | ロギング中に無効な宛先バケットが見つかりました。 | 400 |
内部エラー | 内部OSSエラーが発生しました。 | 500 |
MalformedXML | XML 形式が無効です。 | 400 |
MalformedPOSTRequest | POSTリクエストのボディが無効です。 | 400 |
MaxPOSTPreDataLengthExceededError | PostObjectリクエストのメッセージ本文 (アップロードするオブジェクトコンテンツを除く) が制限を超えています。 | 400 |
MethodNotAllowed | メソッドがサポートされていません。 | 405 |
MissingArgument | 1つ以上の必須パラメーターが指定されていません。 | 411 |
MissingContentLength | コンテンツ長がありません。 | 411 |
NoSuchBucket | 指定したバックアップは存在しません。 | 404 |
NoSuchKey | オブジェクトは存在しません。 | 404 |
NoSuchUpload | マルチパートアップロード ID が存在しません。 | 404 |
NotImplemented | そのメソッドは実装できません。 | 501 |
PreconditionFailed | 前処理中にエラーが発生しました。 | 412 |
RequestTimeTooSkewed | OSSクライアントとOSSサーバーの時間偏差が15分を超えています。 | 403 |
RequestTimeout | リクエストがタイムアウトしました。 | 400 |
RequestIsNotMultiPartContent | POSTリクエストで指定されたcontent-typeの値が無効です。 | 400 |
SignatureDoesNotMatch | 署名エラーが発生しました。 | 403 |
TooManyBuckets | ユーザーのバケット数が制限を超えています。 | 400 |
InvalidEncryptionAlgorithmError | 暗号化アルゴリズムが無効です。 | 400 |
上の表では、エラーコードはOssServiceError. codeパラメーターで指定されています。 HTTPステータスコードは、OssServiceError.StatusCodeパラメーターで指定されます。