Halaman ini berisi penjelasan seputar metode pemecahan masalah terkait error umum yang mungkin Anda alami saat menggunakan Cloud Storage.
Lihat Dasbor Google Cloud Service Health untuk mendapatkan informasi tentang insiden yang memengaruhi layanan Google Cloud seperti Cloud Storage.
Logging permintaan mentah
Saat menggunakan alat seperti gcloud
atau library klien Cloud Storage, sebagian besar
informasi permintaan dan respons ditangani oleh alat tersebut. Namun, terkadang
ada baiknya melihat detail untuk membantu pemecahan masalah atau saat memposting
pertanyaan ke forum seperti Stack Overflow. Gunakan petunjuk
berikut untuk menampilkan header permintaan dan respons di alat Anda:
Konsol
Tampilan informasi permintaan dan respons bergantung pada browser yang Anda gunakan untuk mengakses Konsol Google Cloud. Untuk browser Google Chrome:
Klik tombol menu utama Chrome (more_vert).
Pilih Alat Lainnya.
Klik Alat Developer.
Klik tab Jaringan di panel yang muncul.
Command line
Gunakan flag proses debug global dalam permintaan Anda. Contoh:
gcloud storage ls gs://my-bucket/my-object --log-http --verbosity=debug
Library klien
C++
Tetapkan variabel lingkungan
CLOUD_STORAGE_ENABLE_TRACING=http
untuk mendapatkan traffic HTTP lengkap.Tetapkan variabel lingkungan CLOUD_STORAGE_ENABLE_CLOG=yes untuk mendapatkan logging dari setiap RPC.
C#
Tambahkan logger melalui ApplicationContext.RegisterLogger
, dan tetapkan opsi
logging di pengendali pesan HttpClient
. Untuk mengetahui informasi selengkapnya, lihat halaman
entri FAQ:
Go
Tetapkan variabel lingkungan GODEBUG=http2debug=1
. Untuk mengetahui informasi
selengkapnya, lihat halaman Go package net/http.
Jika Anda ingin mencatat log isi permintaan, gunakan klien HTTP kustom.
Java
Buat file bernama "logging.properties" menggunakan konten berikut:
# Properties file which configures the operation of the JDK logging facility. # The system will look for this config file to be specified as a system property: # -Djava.util.logging.config.file=${project_loc:googleplus-simple-cmdline-sample}/logging.properties # Set up the console handler (uncomment "level" to show more fine-grained messages) handlers = java.util.logging.ConsoleHandler java.util.logging.ConsoleHandler.level = CONFIG # Set up logging of HTTP requests and responses (uncomment "level" to show) com.google.api.client.http.level = CONFIG
Gunakan logging.properties dengan Maven
mvn -Djava.util.logging.config.file=path/to/logging.properties insert_command
Untuk mengetahui informasi selengkapnya, lihat Pluggable HTTP Transport.
Node.js
Tetapkan variabel lingkungan NODE_DEBUG=https
sebelum memanggil skrip
Node.
PHP
Berikan pengendali HTTP Anda ke klien menggunakan
httpHandler
dan siapkan middleware untuk mencatat log permintaan
dan respons.
Python
Gunakan modul logging. Contoh:
import logging import http.client logging.basicConfig(level=logging.DEBUG) http.client.HTTPConnection.debuglevel=5
Ruby
Di bagian atas .rb file
setelah require "google/cloud/storage"
,
tambahkan kode berikut:
ruby Google::Apis.logger.level = Logger::DEBUG
Menambahkan header kustom
Penambahan header kustom ke permintaan adalah alat yang umum digunakan untuk tujuan proses debug, seperti untuk mengaktifkan header debug atau melacak permintaan. Contoh berikut menunjukkan cara menetapkan header permintaan untuk berbagai alat Cloud Storage:
Command line
Gunakan flag --additional-headers
, yang tersedia untuk sebagian besar
perintah. Contoh:
gcloud storage objects describe gs://my-bucket/my-object --additional-headers=HEADER_NAME=HEADER_VALUE
Dengan HEADER_NAME
dan
HEADER_VALUE
adalah header yang Anda tambahkan
ke permintaan.
Library klien
C++
namespace gcs = google::cloud::storage;
gcs::Client client = ...;
client.AnyFunction(... args ..., gcs::CustomHeader("header-name", "value"));
C#
Contoh berikut akan menambahkan header kustom ke setiap permintaan yang dibuat oleh library klien.
using Google.Cloud.Storage.V1;
var client = StorageClient.Create();
client.Service.HttpClient.DefaultRequestHeaders.Add("custom-header", "custom-value");
var buckets = client.ListBuckets("my-project-id");
foreach (var bucket in buckets)
{
Console.WriteLine(bucket.Name);
}
Go
Untuk menambahkan header kustom ke permintaan yang dibuat oleh library klien Go,
diperlukan penggabungan transpor yang digunakan untuk klien dengan RoundTripper
kustom.
Contoh berikut akan mengirimkan header debug dan mencatat log header respons
yang sesuai:
package main
import (
"context"
"io/ioutil"
"log"
"net/http"
"cloud.google.com/go/storage"
"google.golang.org/api/option"
raw "google.golang.org/api/storage/v1"
htransport "google.golang.org/api/transport/http"
)
func main() {
ctx := context.Background()
// Standard way to initialize client:
// client, err := storage.NewClient(ctx)
// if err != nil {
// // handle error
// }
// Instead, create a custom http.Client.
base := http.DefaultTransport
trans, err := htransport.NewTransport(ctx, base, option.WithScopes(raw.DevstorageFullControlScope),
option.WithUserAgent("custom-user-agent"))
if err != nil {
// Handle error.
}
c := http.Client{Transport:trans}
// Add RoundTripper to the created HTTP client.
c.Transport = withDebugHeader{c.Transport}
// Supply this client to storage.NewClient
client, err := storage.NewClient(ctx, option.WithHTTPClient(&c))
if err != nil {
// Handle error.
}
// Use client to make a request
}
type withDebugHeader struct {
rt http.RoundTripper
}
func (wdh withDebugHeader) RoundTrip(r *http.Request) (*http.Response, error) {
headerName := "X-Custom-Header"
r.Header.Add(headerName, "value")
resp, err := wdh.rt.RoundTrip(r)
if err == nil {
log.Printf("Resp Header: %+v, ", resp.Header.Get(headerName))
} else {
log.Printf("Error: %+v", err)
}
return resp, err
}
Java
import com.google.api.gax.rpc.FixedHeaderProvider;
import com.google.api.gax.rpc.HeaderProvider;
import com.google.cloud.WriteChannel;
import com.google.cloud.storage.BlobInfo;
import com.google.cloud.storage.Storage;
import com.google.cloud.storage.StorageOptions;
import java.io.IOException;
import java.nio.ByteBuffer;
import static java.nio.charset.StandardCharsets.UTF_8;
public class Example {
public void main(String args[]) throws IOException {
HeaderProvider headerProvider =
FixedHeaderProvider.create("custom-header", "custom-value");
Storage storage = StorageOptions.getDefaultInstance()
.toBuilder()
.setHeaderProvider(headerProvider)
.build().getService();
String bucketName = "example-bucket";
String blobName = "test-custom-header";
// Use client with custom header
BlobInfo blob = BlobInfo.newBuilder(bucketName, blobName).build();
byte[] stringBytes;
try (WriteChannel writer = storage.writer(blob)) {
stringBytes = "hello world".getBytes(UTF_8);
writer.write(ByteBuffer.wrap(stringBytes));
}
}
}
Node.js
const storage = new Storage();
storage.interceptors.push({
request: requestConfig => {
Object.assign(requestConfig.headers, {
'X-Custom-Header': 'value',
});
return requestConfig;
},
});
PHP
Semua panggilan metode yang memicu permintaan http menerima argumen
$restOptions
opsional sebagai argumen terakhir. Anda dapat memberikan header
kustom ke setiap permintaan atau setiap klien.
use Google\Cloud\Storage\StorageClient;
$client = new StorageClient([
'restOptions' => [
'headers' => [
'x-foo' => 'bat'
]
]
]);
$bucket = $client->bucket('my-bucket');
$bucket->info([
'restOptions' => [
'headers' => [
'x-foo' => 'bar'
]
]
]);
Python
from google.cloud import storage
client = storage.Client(
extra_headers={
"x-custom-header": "value"
}
)
Ruby
require "google/cloud/storage"
storage = Google::Cloud::Storage.new
storage.add_custom_headers { 'X-Custom-Header'=> 'value' }
Mengakses bucket dengan konfigurasi CORS
Jika Anda telah menetapkan konfigurasi CORS di bucket dan melihat bahwa permintaan masuk dari browser klien gagal, coba langkah-langkah pemecahan masalah berikut:
Tinjau konfigurasi CORS pada bucket target. Jika ada beberapa entri konfigurasi CORS, pastikan nilai permintaan yang Anda gunakan untuk memecahkan masalah dipetakan ke nilai dalam satu entri konfigurasi CORS.
Saat menguji penerbitan permintaan CORS, pastikan Anda tidak membuat permintaan ke endpoint
storage.cloud.google.com
, yang tidak mengizinkan permintaan CORS. Untuk mengetahui informasi selengkapnya tentang endpoint yang didukung untuk CORS, lihat Dukungan CORS Cloud Storage.Tinjau permintaan dan respons menggunakan alat pilihan Anda. Di browser Chrome, Anda dapat menggunakan alat developer standar untuk melihat informasi ini:
- Klik menu Chrome (more_vert) di toolbar browser.
- Pilih Alat Lainnya > Alat Developer.
- Klik tab Jaringan.
- Dari aplikasi atau command line, kirim permintaan tersebut.
- Di panel yang menampilkan aktivitas jaringan, cari permintaan tersebut.
- Di kolom Name, klik nama yang sesuai dengan permintaan.
- Klik tab Header untuk melihat header respons, atau tab Response untuk melihat isi respons.
Jika Anda tidak melihat permintaan dan respons, mungkin browser telah meng-cache upaya permintaan preflight yang gagal sebelumnya. Menghapus cache browser juga akan menghapus cache preflight. Jika tidak, tetapkan nilai
MaxAgeSec
dalam konfigurasi CORS Anda ke nilai yang lebih rendah dari nilai default1800
(30 menit), tunggu selama durasiMaxAgeSec
lama, lalu coba ulangi permintaan tersebut. Tindakan ini akan melakukan permintaan preflight baru, yang mengambil konfigurasi CORS baru dan menghapus permanen entri cache. Setelah men-debug masalah, naikkanMaxAgeSec
kembali ke nilai yang lebih tinggi untuk mengurangi traffic preflight ke bucket Anda.Pastikan permintaan memiliki header
Origin
dan nilai header-nya cocok setidaknya dengan salah satu nilaiOrigins
dalam konfigurasi CORS bucket. Perhatikan bahwa skema, host, dan port nilai harus sama persis. Beberapa contoh kecocokan yang dapat diterima adalah sebagai berikut:http://origin.example.com
cocok denganhttp://origin.example.com:80
(karena 80 adalah port HTTP default), tetapi tidak cocok denganhttps://origin.example.com
,http://origin.example.com:8080
,http://origin.example.com:5151
, atauhttp://sub.origin.example.com
.https://example.com:443
cocok denganhttps://example.com
, tetapi tidak cocok denganhttp://example.com
atauhttp://example.com:443
.http://localhost:8080
hanya cocok persis denganhttp://localhost:8080
dan tidak cocok denganhttp://localhost:5555
atauhttp://localhost.example.com:8080
.
Untuk permintaan sederhana, pastikan metode HTTP permintaan cocok dengan setidaknya salah satu nilai
Methods
dalam konfigurasi CORS bucket. Untuk permintaan preflight, pastikan metode yang ditentukan dalamAccess-Control-Request-Method
cocok dengan setidaknya salah satu nilaiMethods
.Untuk permintaan preflight, periksa apakah permintaan menyertakan satu atau beberapa header
Access-Control-Request-Header
. Jika demikian, pastikan setiap nilaiAccess-Control-Request-Header
cocok dengan nilaiResponseHeader
dalam konfigurasi CORS bucket. Semua header yang disebutkan dalamAccess-Control-Request-Header
harus ada dalam konfigurasi CORS agar permintaan preflight berhasil dan menyertakan header CORS dalam respons.
Kode error
Berikut adalah kode status HTTP umum yang mungkin Anda temui.
301: Moved Permanently
Masalah: Saya sedang menyiapkan situs statis, dan objek kosong serta kode respons HTTP 301
ditampilkan saat mengakses
jalur direktori.
Solusi: Jika browser mendownload objek nol byte dan Anda menerima kode respons HTTP 301
saat mengakses direktori, seperti
http://www.example.com/dir/
, artinya bucket Anda kemungkinan besar berisi objek kosong
dari nama tersebut. Untuk memeriksa apakah ini memang masalahnya beserta cara memperbaikinya:
- Di Konsol Google Cloud, buka halaman Buckets Cloud Storage.
- Klik tombol Aktifkan Cloud Shell di bagian atas konsol Google Cloud.
- Jalankan
gcloud storage ls --recursive gs://www.example.com/dir/
. Jika output-nya menyertakanhttp://www.example.com/dir/
, Anda akan memiliki objek kosong di lokasi tersebut. - Hapus objek kosong tersebut dengan perintah:
gcloud storage rm gs://www.example.com/dir/
Sekarang Anda dapat mengakses http://www.example.com/dir/
dan membuatnya menampilkan
file index.html
direktori tersebut, bukan objek kosong.
400: Bad Request
Masalah: Saat melakukan upload yang dapat dilanjutkan, saya mendapatkan error ini dan
pesan Failed to parse Content-Range header.
Solusi: Nilai yang Anda gunakan dalam header Content-Range
tidak valid. Sebagai contoh,
Content-Range: */*
tidak valid dan harus ditetapkan sebagai
Content-Range: bytes */*
. Jika error ini muncul, artinya proses upload yang
dapat dilanjutkan saat ini tidak aktif lagi, dan Anda harus memulai proses upload baru yang dapat dilanjutkan.
401: Unauthorized
Masalah: Permintaan langsung ke bucket publik, atau menggunakan Cloud CDN, gagal dengan respons HTTP 401: Unauthorized
dan Authentication Required
.
Solusi: Pastikan klien Anda, atau proxy perantara apa pun, tidak menambahkan
header Authorization
ke permintaan ke Cloud Storage. Setiap permintaan dengan
header Authorization
, meskipun kosong, akan divalidasi seolah-olah permintaan tersebut merupakan
upaya autentikasi.
403: Account Disabled
Masalah: Saya mencoba membuat bucket, tetapi malah mendapatkan error 403 Account Disabled
.
Solusi: Error ini menunjukkan bahwa Anda belum mengaktifkan penagihan untuk project terkait. Untuk mengetahui langkah-langkah mengaktifkan penagihan, lihat Mengaktifkan penagihan untuk project.
Jika penagihan diaktifkan dan pesan error ini terus muncul, Anda dapat menghubungi dukungan dengan memberikan project ID dan deskripsi masalah ini.
403: Forbidden
Masalah: Saya seharusnya memiliki izin untuk mengakses bucket atau objek tertentu, tetapi
saat mencobanya, saya malah mendapatkan error 403 - Forbidden
dengan pesan yang
mirip dengan: example@email.com does not have storage.objects.get access to the
Google Cloud Storage object
.
Solusi: Anda tidak memiliki izin IAM pada bucket atau objek yang diperlukan untuk menyelesaikan permintaan. Jika tidak dapat membuat permintaan sesuai ekspektasi Anda, lakukan pemeriksaan berikut:
Apakah penerima akses yang disebutkan dalam pesan error sudah sesuai dengan ekspektasi Anda? Jika pesan error merujuk ke alamat email yang tidak terduga atau pada "Pemanggil anonim", artinya permintaan Anda tidak menggunakan kredensial seperti yang diinginkan. Hal ini dapat terjadi karena alat yang digunakan untuk membuat permintaan dibuat dengan kredensial dari alias atau entity lain. Alasan lain adalah karena permintaan dibuat atas nama Anda oleh akun layanan.
Apakah izin yang disebutkan dalam pesan error sesuai dengan yang Anda perlukan? Jika izinnya ternyata tidak sesuai ekspektasi, kemungkinan besar karena alat yang digunakan memerlukan akses tambahan untuk menyelesaikan permintaan Anda. Misalnya, untuk menghapus objek dalam bucket secara massal,
gcloud
harus terlebih dahulu membuat daftar objek di bucket yang ingin dihapus. Bagian penghapusan massal ini memerlukan izinstorage.objects.list
, yang mungkin mengejutkan, mengingat sasarannya adalah penghapusan objek, yang biasanya hanya memerlukan izinstorage.objects.delete
. Jika pesan error muncul karena masalah ini, pastikan Anda telah diberi peran IAM yang memiliki izin tambahan yang diperlukan.Apakah Anda diberi peran IAM tersebut di resource yang dimaksud atau di resource induk? Sebagai contoh, jika Anda diberi peran
Storage Object Viewer
untuk suatu project lalu Anda mencoba mendownload objek, pastikan objek berada dalam bucket yang ada di project tersebut. Anda mungkin tidak sengaja memiliki izinStorage Object Viewer
untuk project yang berbeda.Apakah izin Anda untuk mengakses bucket atau objek tertentu diberikan melalui nilai kemudahan? Penghapusan akses yang diberikan ke nilai kemudahan dapat menyebabkan akun utama yang sebelumnya diaktifkan kehilangan akses ke resource.
Misalnya, jane@example.com memiliki peran dasar Pemilik (
roles/owner
) untuk project bernamamy-example-project
, dan kebijakan IAM project tersebut memberikan peran Storage Object Creator (roles/storage.objectCreator
) ke nilai kemudahanprojectOwner:my-example-project
. Artinya, jane@example.com memiliki izin yang terkait dengan peran Storage Object Creator untuk bucket dalammy-example-project
. Jika pemberian ini dihapus, jane@example.com akan kehilangan izin yang terkait dengan peran Storage Object Creator.Dalam skenario seperti itu, Anda dapat mendapatkan kembali akses ke bucket atau objek dengan memberi diri Anda izin level bucket atau level objek yang diperlukan untuk melakukan tindakan yang Anda perlukan.
Apakah ada kebijakan Tolak IAM yang mencegah Anda menggunakan izin tertentu? Anda dapat menghubungi administrator organisasi untuk mengetahui apakah kebijakan IAM Deny telah diterapkan.
409: Conflict
Masalah: Saya mencoba membuat bucket, tetapi malah mendapatkan error berikut:
409 Conflict. Sorry, that name is not available. Please try a different one.
Solusi: Nama bucket yang Anda coba buat (misalnya, gs://cats
atau gs://dogs
)
sudah digunakan. Cloud Storage memiliki namespace global sehingga Anda tidak dapat
memberi bucket dengan nama yang sama seperti bucket yang ada. Pilih nama yang
tidak digunakan.
412: Batasan kustom dilanggar
Masalah: Permintaan saya ditolak dengan error 412 orgpolicy
.
Masalah: Permintaan saya ditolak dengan error 412 Multiple constraints were violated
.
Solusi: Hubungi tim administrator keamanan Anda untuk mengetahui apakah bucket yang Anda gunakan untuk mengirim permintaan terpengaruh oleh kebijakan organisasi yang menggunakan batasan kustom. Bucket Anda mungkin juga terpengaruh oleh kebijakan organisasi yang berbeda-beda dan saling bertentangan. Misalnya, jika satu kebijakan menentukan bahwa bucket harus memiliki class penyimpanan Standard dan kebijakan lain menentukan bahwa bucket harus memiliki class penyimpanan Coldline.
429: Too Many Requests
Masalah: Permintaan saya ditolak dengan error 429 Too Many Requests
.
Solusi: Anda mencapai batas jumlah permintaan Cloud Storage yang diperbolehkan untuk resource tertentu. Lihat Kuota Cloud Storage untuk membaca penjelasan mengenai batasan di Cloud Storage.
Jika beban kerja Anda terdiri dari 1.000 permintaan per detik ke bucket, lihat Pedoman rasio permintaan dan distribusi akses untuk membaca penjelasan mengenai praktik terbaik, termasuk cara meningkatkan beban kerja secara bertahap dan menghindari nama file berurutan.
Jika beban kerja Anda berpotensi menggunakan traffic keluar jaringan sebesar 50 Gbps atau lebih ke lokasi tertentu, periksa penggunaan bandwidth Anda untuk memastikan Anda tidak mengalami kuota bandwidth.
Mendiagnosis error Konsol Google Cloud
Masalah: Saya mendapatkan pesan error generik saat menggunakan Konsol Google Cloud untuk melakukan suatu operasi. Contohnya, saya melihat pesan error saat mencoba menghapus bucket, tetapi tidak ada detail informasi terkait alasan operasi itu gagal.
Solusi: Gunakan notifikasi Konsol Google Cloud untuk melihat informasi mendetail tentang operasi yang gagal tersebut.
Klik tombol Notifications (notifications) di header Konsol Google Cloud.
Dropdown akan menampilkan operasi terbaru yang dilakukan oleh konsol Google Cloud.
Klik item yang ingin Anda lihat detailnya lebih lanjut.
Halaman yang menampilkan detail informasi tentang operasi akan terbuka.
Klik setiap baris untuk memperluas detail informasi error.
Masalah: Saat menggunakan Konsol Google Cloud, saya tidak melihat kolom tertentu ditampilkan.
Solusi: Untuk melihat kolom tertentu yang ditampilkan di konsol Google Cloud, klik ikon Column display options (
), lalu pilih kolom yang ingin ditampilkan.Folder simulasi dan folder terkelola
Masalah: Saya menghapus beberapa objek di bucket, dan sekarang folder tempat objek tersebut disimpan tidak muncul di Konsol Google Cloud.
Solusi: Meskipun Konsol Google Cloud menampilkan konten bucket Anda seolah-olah ada struktur direktori, folder sebenarnya tidak benar-benar ada di Cloud Storage. Karena itu, saat Anda menghapus semua objek dengan awalan umum dari bucket, ikon folder yang merepresentasikan grup objek tersebut tidak muncul kembali di Konsol Google Cloud.
Masalah: Saya tidak dapat membuat folder terkelola.
Solusi: Untuk membuat folder terkelola, pastikan persyaratan berikut terpenuhi:
Anda memiliki peran IAM yang berisi izin
storage.managedfolders.create
, seperti peran Storage Object Admin (roles/storage.objectAdmin
). Untuk petunjuk tentang cara memberikan peran, lihat Menggunakan izin IAM.Akses level bucket yang seragam diaktifkan di bucket tempat Anda ingin membuat folder terkelola.
Tidak ada IAM Conditions di bucket atau project yang menggunakan jenis resource bucket (
storage.googleapis.com/Bucket
) atau jenis resource objek (storage.googleapis.com/Object
). Jika ada bucket dalam project yang memiliki IAM Conditions yang menggunakan salah satu jenis resource ini, folder terkelola tidak dapat dibuat di salah satu bucket dalam project tersebut, meskipun kondisi tersebut dihapus nanti.
Masalah: Saya tidak dapat menonaktifkan akses level bucket yang seragam karena ada folder yang dikelola di bucket saya.
Solusi: Akses level bucket seragam tidak dapat dinonaktifkan jika ada folder terkelola di bucket. Untuk menonaktifkan akses level bucket yang seragam, Anda harus menghapus semua folder terkelola di bucket terlebih dahulu.
Error situs statis
Berikut masalah umum yang mungkin Anda alami saat menyiapkan bucket untuk menghosting situs statis.
Penyajian HTTPS
Masalah: Saya ingin menayangkan konten melalui HTTPS tanpa menggunakan load balancer.
Solusi: Anda dapat menyajikan konten statis melalui HTTPS menggunakan URI langsung
seperti https://storage.googleapis.com/my-bucket/my-object
. Untuk opsi lain
dalam menyajikan konten melalui domain kustom lewat SSL, Anda dapat:
- Menggunakan Jaringan Penayangan Konten pihak ketiga dengan Cloud Storage.
- Menyajikan konten situs statis dari Firebase Hosting, sebagai ganti Cloud Storage.
Verifikasi domain
Masalah: Saya tidak dapat memverifikasi domain.
Solusi: Biasanya, proses verifikasi di Search Console akan mengarahkan Anda untuk mengupload file ke domain, tetapi untuk melakukannya, Anda harus memiliki bucket yang terkait. Bucket ini hanya dapat dibuat setelah Anda melakukan verifikasi domain.
Dalam hal ini, lakukan verifikasi kepemilikan menggunakan metode Penyedia nama domain. Lihat halaman Verifikasi kepemilikan untuk mengetahui langkah-langkahnya. Verifikasi ini dapat dilakukan sebelum bucket dibuat.
Halaman yang tidak dapat diakses
Masalah: Saya mendapatkan pesan error Access denied
untuk halaman web yang disajikan oleh situs
saya.
Solusi: Pastikan objek dibagikan secara publik. Jika belum, lihat Membuat Data untuk Publik untuk mengetahui petunjuk cara melakukannya.
Jika sebelumnya Anda telah mengupload dan membagikan object, tetapi kemudian mengupload versi barunya, Anda harus membagikan ulang objek tersebut secara publik. Langkah ini diperlukan karena izin publik diganti dengan file baru yang diupload.
Gagal memperbarui izin
Masalah: Saya mendapatkan pesan error saat mencoba membuat data saya menjadi publik.
Solusi: Pastikan Anda memiliki izin storage.buckets.setIamPolicy
atau izin storage.objects.setIamPolicy
. Izin ini
diberikan, misalnya, dalam
peran Storage Admin (roles/storage.admin
). Jika Anda memiliki izin storage.buckets.setIamPolicy
atau izin storage.objects.setIamPolicy
dan masih mendapatkan error, bucket Anda mungkin dibatasi oleh pencegahan akses publik, yang tidak mengizinkan akses ke allUsers
atau allAuthenticatedUsers
. Pencegahan akses publik dapat ditetapkan di bucket secara langsung, atau mungkin diterapkan melalui kebijakan organisasi yang ditetapkan pada level yang lebih tinggi.
Download konten
Masalah: Saya tidak dapat melihat konten halaman di browser, tetapi malah diminta untuk mendownloadnya.
Solusi: Jika Anda menentukan MainPageSuffix
sebagai objek yang tidak memiliki
jenis konten web, pengunjung situs akan diminta untuk mendownload konten, bukan
dapat melihat konten halaman yang ditayangkan. Untuk mengatasi masalah ini, perbarui
entri metadata Content-Type
ke nilai yang sesuai, seperti text/html
.
Untuk mengetahui petunjuknya, lihat Mengedit metadata objek.
Latensi
Berikut adalah masalah latensi umum yang mungkin Anda temui. Selain itu, Dasbor Google Cloud Service Health memberikan informasi tentang insiden yang memengaruhi layanan Google Cloud seperti Cloud Storage.
Latensi upload atau download
Masalah: Saya melihat adanya peningkatan latensi saat mengupload atau mendownload.
Solusi: Pertimbangkan penyebab umum latensi upload dan download berikut:
Batasan CPU atau memori: Sistem operasi lingkungan yang terpengaruh harus memiliki alat yang dapat mengukur konsumsi resource lokal seperti penggunaan CPU dan memori.
Batasan IO disk: Dampak performa mungkin disebabkan oleh IO disk lokal.
Jarak geografis: Performa dapat dipengaruhi oleh jarak fisik antara bucket Cloud Storage dan lingkungan yang terpengaruh, terutama dalam kasus lintas benua. Pengujian dengan bucket yang ada di region yang sama dengan lingkungan yang terpengaruh dapat mengidentifikasi sejauh mana jarak geografis berpengaruh pada latensi Anda.
- Jika berlaku, DNS resolver di lingkungan yang terpengaruh harus menggunakan protokol EDNS(0) agar permintaan dari lingkungan tersebut dirutekan melalui Google Front End yang sesuai.
Latensi library klien atau CLI
Masalah: Saya melihat adanya peningkatan latensi saat mengakses Cloud Storage dengan Google Cloud CLI atau salah satu library klien.
Solusi: CLI gcloud dan library klien
secara otomatis mencoba lagi permintaan jika diperlukan, dan perilaku ini
dapat secara efektif meningkatkan latensi seperti yang terlihat dari pengguna akhir. Gunakan metrik Cloud Monitoring storage.googleapis.com/api/request_count
untuk melihat apakah Cloud Storage secara konsisten menyajikan kode respons yang dapat dicoba lagi, seperti 429
atau 5xx
.
Server proxy
Masalah: Saya terhubung melalui server proxy. Apa yang harus saya lakukan?
Solusi: Untuk mengakses Cloud Storage melalui server proxy, Anda harus mengizinkan akses ke domain berikut:
accounts.google.com
untuk membuat token autentikasi OAuth2oauth2.googleapis.com
untuk melakukan pertukaran token OAuth2*.googleapis.com
untuk permintaan penyimpanan
Jika server proxy atau kebijakan keamanan tidak mendukung daftar izin menurut domain, tetapi hanya mendukung daftar izin menurut pemblokiran jaringan IP, sebaiknya konfigurasikan server proxy untuk semua rentang alamat IP Google. Anda dapat menemukan rentang alamat dengan membuat kueri data WHOIS di ARIN. Sebagai praktik terbaik, Anda harus meninjau setelan proxy secara berkala untuk memastikan setelan tersebut cocok dengan alamat IP Google.
Sebaiknya jangan mengonfigurasi proxy dengan alamat IP individual yang Anda
dapatkan dari pencarian satu kali oauth2.googleapis.com
dan
storage.googleapis.com
. Karena layanan Google diekspos menggunakan nama DNS
yang memetakan ke sejumlah besar alamat IP yang dapat berubah seiring waktu,
mengonfigurasi proxy berdasarkan pencarian satu kali dapat menyebabkan kegagalan untuk
terhubung ke Cloud Storage.
Jika permintaan dirutekan melalui server proxy, sebaiknya
hubungi administrator jaringan untuk memastikan bahwa header Authorization
yang berisi kredensial Anda tidak dihapus oleh proxy. Tanpa
header Authorization
, permintaan akan ditolak dan Anda akan mendapatkan
error MissingSecurityHeader
.
Error Storage Insights
Masalah: Konfigurasi laporan inventaris saya menghasilkan beberapa laporan inventaris secara harian.
Solusi: Jika Anda memiliki lebih dari 1.000.000 objek di bucket, beberapa laporan inventaris dapat dibuat sebagai shard. Konfigurasi laporan inventaris menghasilkan satu laporan inventaris untuk setiap 1.000.000 objek dalam bucket. Misalnya, jika Anda memiliki bucket dengan 3.500.000 objek, konfigurasi laporan inventaris di bucket akan menghasilkan empat shard laporan inventaris sesuai frekuensi yang Anda tentukan, beserta file manifes yang berisi jumlah shard laporan inventaris yang dihasilkan dan nama filenya.
Masalah: Laporan inventaris tidak muncul di bucket tujuan.
Solusi: Jika Anda telah membuat konfigurasi laporan inventaris dan tidak melihat laporan inventaris yang dibuat di bucket tujuan, periksa hal berikut:
Pastikan tanggal mulai yang ditentukan dalam konfigurasi laporan inventaris sesuai dengan ekspektasi Anda tentang kapan laporan inventaris harus dibuat. Untuk mengetahui petunjuk cara menentukan tanggal mulai, lihat Membuat konfigurasi laporan inventaris.
Lihat histori laporan inventaris Anda untuk memeriksa kegagalan dan penyebab utamanya. Untuk melihat histori laporan inventaris, selesaikan langkah-langkah berikut:
- Di Konsol Google Cloud, buka halaman Bucket Cloud Storage.
Di daftar bucket, klik nama bucket sumber yang berisi konfigurasi laporan inventaris.
Di halaman Detail bucket, klik tab Laporan inventaris.
Di daftar konfigurasi laporan inventaris, klik UUID konfigurasi laporan inventaris yang membuat laporan yang ingin Anda periksa.
Periksa kegagalan di bagian Histori laporan inventaris. Anda dapat menahan pointer di atas Bantuan (
) untuk mendapatkan detail tentang penyebab kegagalan.
- Di Konsol Google Cloud, buka halaman Bucket Cloud Storage.
Pastikan agen layanan tingkat project diberi peran IAM yang diperlukan untuk membaca dan menulis laporan inventaris. Untuk mengetahui petunjuknya, lihat Memberikan peran yang diperlukan ke agen layanan.
Masalah: Saya melihat penundaan acak pada pembuatan laporan inventaris.
Solusi: Interval waktu antara laporan inventaris yang dibuat dapat bervariasi. Anda mungkin melihat keterlambatan hingga satu hari.
Langkah selanjutnya
- Temukan jawaban atas pertanyaan lainnya di FAQ Cloud Storage.
- Pelajari opsi dukungan Anda.
- Pelajari cara Error Reporting dapat membantu Anda mengidentifikasi dan memahami error Cloud Storage.