[{"data":1,"prerenderedAt":1427},["ShallowReactive",2],{"navigation_docs":3,"-storage-s3-api-usage":212,"-storage-s3-api-usage-surround":1422},[4,21,89,125,152,183,202,207],{"title":5,"collapsed":6,"path":7,"stem":8,"children":9,"page":20},"Getting Started",true,"/getting-started","1.getting-started",[10,15],{"title":11,"path":12,"stem":13,"icon":14},"Introduction","/getting-started/introduction","1.getting-started/introduction","i-lucide-info",{"title":16,"path":17,"stem":18,"icon":19},"Service Tiers","/getting-started/service-tiers","1.getting-started/service-tiers","i-lucide-layers",false,{"title":22,"collapsed":6,"path":23,"stem":24,"children":25,"page":20},"Containers","/containers","2.containers",[26,56],{"title":27,"path":28,"stem":29,"children":30,"page":20},"Kubernetes","/containers/kubernetes","2.containers/1.kubernetes",[31,36,41,46,51],{"title":32,"path":33,"stem":34,"icon":35},"Overview","/containers/kubernetes/overview","2.containers/1.kubernetes/1.overview","i-lucide-box",{"title":37,"path":38,"stem":39,"icon":40},"Create a Cluster","/containers/kubernetes/create-cluster","2.containers/1.kubernetes/2.create-cluster","i-lucide-plus-circle",{"title":42,"path":43,"stem":44,"icon":45},"Connect to Your Cluster","/containers/kubernetes/connect-cluster","2.containers/1.kubernetes/3.connect-cluster","i-lucide-link",{"title":47,"path":48,"stem":49,"icon":50},"Node Groups","/containers/kubernetes/node-groups","2.containers/1.kubernetes/4.node-groups","i-lucide-server",{"title":52,"path":53,"stem":54,"icon":55},"Ingress & Domains","/containers/kubernetes/ingress-domains","2.containers/1.kubernetes/5.ingress-domains","i-lucide-globe",{"title":57,"path":58,"stem":59,"children":60,"page":20},"Container Registry","/containers/container-registry","2.containers/2.container-registry",[61,65,69,74,79,84],{"title":32,"path":62,"stem":63,"icon":64},"/containers/container-registry/overview","2.containers/2.container-registry/1.overview","i-lucide-package",{"title":66,"path":67,"stem":68,"icon":40},"Create a Registry","/containers/container-registry/create-registry","2.containers/2.container-registry/2.create-registry",{"title":70,"path":71,"stem":72,"icon":73},"Push Images to Registry","/containers/container-registry/push-images","2.containers/2.container-registry/3.push-images","i-lucide-upload",{"title":75,"path":76,"stem":77,"icon":78},"Pull Images from Registry","/containers/container-registry/pull-images","2.containers/2.container-registry/4.pull-images","i-lucide-download",{"title":80,"path":81,"stem":82,"icon":83},"Manage Repositories","/containers/container-registry/manage-repositories","2.containers/2.container-registry/5.manage-repositories","i-lucide-folder",{"title":85,"path":86,"stem":87,"icon":88},"Manage Access Credentials","/containers/container-registry/manage-credentials","2.containers/2.container-registry/6.manage-credentials","i-lucide-key",{"title":90,"collapsed":6,"path":91,"stem":92,"children":93,"page":20},"Compute","/compute","3.compute",[94],{"title":95,"path":96,"stem":97,"children":98,"page":20},"Virtual Machines","/compute/virtual-machines","3.compute/virtual-machines",[99,102,106,111,116,121],{"title":32,"path":100,"stem":101,"icon":50},"/compute/virtual-machines/overview","3.compute/virtual-machines/1.overview",{"title":103,"path":104,"stem":105,"icon":40},"Launch an Instance","/compute/virtual-machines/launch-instance","3.compute/virtual-machines/2.launch-instance",{"title":107,"path":108,"stem":109,"icon":110},"Connect with SSH","/compute/virtual-machines/connect-with-ssh","3.compute/virtual-machines/3.connect-with-ssh","i-lucide-terminal",{"title":112,"path":113,"stem":114,"icon":115},"Manage Snapshots","/compute/virtual-machines/manage-snapshots","3.compute/virtual-machines/4.manage-snapshots","i-lucide-camera",{"title":117,"path":118,"stem":119,"icon":120},"Manage Backups","/compute/virtual-machines/manage-backups","3.compute/virtual-machines/5.manage-backups","i-lucide-shield-check",{"title":122,"path":123,"stem":124,"icon":88},"Manage SSH Keys","/compute/virtual-machines/manage-ssh-keys","3.compute/virtual-machines/6.manage-ssh-keys",{"title":126,"collapsed":6,"path":127,"stem":128,"children":129,"page":20},"Databases","/databases","4.databases",[130,134,138,143,147],{"title":32,"path":131,"stem":132,"icon":133},"/databases/overview","4.databases/1.overview","i-lucide-database",{"title":135,"path":136,"stem":137,"icon":40},"Create a Database","/databases/create-database","4.databases/2.create-database",{"title":139,"path":140,"stem":141,"icon":142},"Connect to a Database","/databases/connect-database","4.databases/3.connect-database","i-lucide-plug",{"title":117,"path":144,"stem":145,"icon":146},"/databases/manage-backups","4.databases/4.manage-backups","i-lucide-history",{"title":148,"path":149,"stem":150,"icon":151},"Manage Database","/databases/manage-database","4.databases/5.manage-database","i-lucide-settings",{"title":153,"collapsed":6,"path":154,"stem":155,"children":156,"page":20},"Storage","/storage","5.storage",[157,161,166,170,174,178],{"title":32,"path":158,"stem":159,"icon":160},"/storage/overview","5.storage/1.overview","i-lucide-hard-drive",{"title":162,"path":163,"stem":164,"icon":165},"Create a Bucket","/storage/create-bucket","5.storage/2.create-bucket","i-lucide-folder-plus",{"title":167,"path":168,"stem":169,"icon":73},"Upload & Manage Objects","/storage/manage-objects","5.storage/3.manage-objects",{"title":171,"path":172,"stem":173,"icon":88},"Access Keys","/storage/access-keys","5.storage/4.access-keys",{"title":175,"path":176,"stem":177,"icon":110},"S3 API Usage","/storage/s3-api-usage","5.storage/5.s3-api-usage",{"title":179,"path":180,"stem":181,"icon":182},"Usage & Billing","/storage/usage","5.storage/6.usage","i-lucide-bar-chart",{"title":184,"collapsed":6,"path":185,"stem":186,"children":187,"page":20},"Account","/account","6.account",[188,192,197],{"title":189,"path":190,"stem":191,"icon":88},"API Keys","/account/api-keys","6.account/api-keys",{"title":193,"path":194,"stem":195,"icon":196},"Billing","/account/billing","6.account/billing","i-lucide-credit-card",{"title":198,"path":199,"stem":200,"icon":201},"Limits & Quotas","/account/limits-quotas","6.account/limits-quotas","i-lucide-gauge",{"title":203,"path":204,"stem":205,"icon":206},"FAQ","/faq","faq","i-lucide-help-circle",{"title":208,"path":209,"stem":210,"icon":211},"Support","/support","support","i-lucide-life-buoy",{"id":213,"title":175,"body":214,"description":1415,"extension":1416,"links":1417,"meta":1418,"navigation":1419,"path":176,"seo":1420,"stem":177,"__hash__":1421},"docs/5.storage/5.s3-api-usage.md",{"type":215,"value":216,"toc":1386},"minimark",[217,221,234,239,308,312,418,430,434,439,464,468,528,532,552,556,610,614,648,652,672,676,685,689,692,766,770,804,808,811,901,905,908,927,930,938,941,966,970,1010,1014,1047,1051,1083,1087,1123,1126,1158,1161,1205,1209,1212,1292,1296,1321,1365,1369,1382],[218,219,175],"h1",{"id":220},"s3-api-usage",[222,223,224,225,229,230,233],"p",{},"NexQloud Object Storage is fully S3-compatible. Use standard tools like ",[226,227,228],"strong",{},"boto3"," (Python) and ",[226,231,232],{},"aws-cli"," to interact with your buckets programmatically.",[235,236,238],"h2",{"id":237},"connection-details","Connection Details",[240,241,242,255],"table",{},[243,244,245],"thead",{},[246,247,248,252],"tr",{},[249,250,251],"th",{},"Property",[249,253,254],{},"Value",[256,257,258,272,284,294],"tbody",{},[246,259,260,266],{},[261,262,263],"td",{},[226,264,265],{},"Endpoint",[261,267,268],{},[269,270,271],"code",{},"https://storage.dcp.nexqloud.net",[246,273,274,279],{},[261,275,276],{},[226,277,278],{},"Region",[261,280,281],{},[269,282,283],{},"auto",[246,285,286,291],{},[261,287,288],{},[226,289,290],{},"Signature",[261,292,293],{},"AWS Signature V4",[246,295,296,301],{},[261,297,298],{},[226,299,300],{},"Path Style",[261,302,303,304,307],{},"Required (",[269,305,306],{},"s3ForcePathStyle: true",")",[235,309,311],{"id":310},"supported-operations","Supported Operations",[240,313,314,324],{},[243,315,316],{},[246,317,318,321],{},[249,319,320],{},"Operation",[249,322,323],{},"Supported",[256,325,326,334,341,348,355,362,369,376,383,390,397,404,411],{},[246,327,328,331],{},[261,329,330],{},"ListBuckets",[261,332,333],{},"✓",[246,335,336,339],{},[261,337,338],{},"ListObjects",[261,340,333],{},[246,342,343,346],{},[261,344,345],{},"GetObject",[261,347,333],{},[246,349,350,353],{},[261,351,352],{},"PutObject",[261,354,333],{},[246,356,357,360],{},[261,358,359],{},"DeleteObject",[261,361,333],{},[246,363,364,367],{},[261,365,366],{},"HeadObject",[261,368,333],{},[246,370,371,374],{},[261,372,373],{},"HeadBucket",[261,375,333],{},[246,377,378,381],{},[261,379,380],{},"CopyObject",[261,382,333],{},[246,384,385,388],{},[261,386,387],{},"CreateMultipartUpload",[261,389,333],{},[246,391,392,395],{},[261,393,394],{},"UploadPart",[261,396,333],{},[246,398,399,402],{},[261,400,401],{},"CompleteMultipartUpload",[261,403,333],{},[246,405,406,409],{},[261,407,408],{},"AbortMultipartUpload",[261,410,333],{},[246,412,413,416],{},[261,414,415],{},"ListParts",[261,417,333],{},[419,420,422,425,426,429],"alert",{"type":421},"info",[226,423,424],{},"CreateBucket"," and ",[226,427,428],{},"DeleteBucket"," are managed exclusively through the NexQloud dashboard and are not available via the S3 API.",[235,431,433],{"id":432},"using-boto3-python","Using boto3 (Python)",[435,436,438],"h3",{"id":437},"installation","Installation",[440,441,446],"pre",{"className":442,"code":443,"language":444,"meta":445,"style":445},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","pip install boto3\n","bash","",[269,447,448],{"__ignoreMap":445},[449,450,453,457,461],"span",{"class":451,"line":452},"line",1,[449,454,456],{"class":455},"sBMFI","pip",[449,458,460],{"class":459},"sfazB"," install",[449,462,463],{"class":459}," boto3\n",[435,465,467],{"id":466},"configure-client","Configure Client",[440,469,473],{"className":470,"code":471,"language":472,"meta":445,"style":445},"language-python shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import boto3\n\ns3 = boto3.client(\n    's3',\n    endpoint_url='https://storage.dcp.nexqloud.net',\n    aws_access_key_id='NQAK_YOUR_ACCESS_KEY_ID',\n    aws_secret_access_key='YOUR_SECRET_ACCESS_KEY',\n    region_name='auto'\n)\n","python",[269,474,475,480,486,492,498,504,510,516,522],{"__ignoreMap":445},[449,476,477],{"class":451,"line":452},[449,478,479],{},"import boto3\n",[449,481,483],{"class":451,"line":482},2,[449,484,485],{"emptyLinePlaceholder":6},"\n",[449,487,489],{"class":451,"line":488},3,[449,490,491],{},"s3 = boto3.client(\n",[449,493,495],{"class":451,"line":494},4,[449,496,497],{},"    's3',\n",[449,499,501],{"class":451,"line":500},5,[449,502,503],{},"    endpoint_url='https://storage.dcp.nexqloud.net',\n",[449,505,507],{"class":451,"line":506},6,[449,508,509],{},"    aws_access_key_id='NQAK_YOUR_ACCESS_KEY_ID',\n",[449,511,513],{"class":451,"line":512},7,[449,514,515],{},"    aws_secret_access_key='YOUR_SECRET_ACCESS_KEY',\n",[449,517,519],{"class":451,"line":518},8,[449,520,521],{},"    region_name='auto'\n",[449,523,525],{"class":451,"line":524},9,[449,526,527],{},")\n",[435,529,531],{"id":530},"list-buckets","List Buckets",[440,533,535],{"className":470,"code":534,"language":472,"meta":445,"style":445},"response = s3.list_buckets()\nfor bucket in response['Buckets']:\n    print(bucket['Name'])\n",[269,536,537,542,547],{"__ignoreMap":445},[449,538,539],{"class":451,"line":452},[449,540,541],{},"response = s3.list_buckets()\n",[449,543,544],{"class":451,"line":482},[449,545,546],{},"for bucket in response['Buckets']:\n",[449,548,549],{"class":451,"line":488},[449,550,551],{},"    print(bucket['Name'])\n",[435,553,555],{"id":554},"upload-an-object","Upload an Object",[440,557,559],{"className":470,"code":558,"language":472,"meta":445,"style":445},"# Upload from file\ns3.upload_file('local-file.txt', 'my-bucket', 'remote-file.txt')\n\n# Upload from bytes\ns3.put_object(\n    Bucket='my-bucket',\n    Key='data.json',\n    Body=b'{\"hello\": \"world\"}',\n    ContentType='application/json'\n)\n",[269,560,561,566,571,575,580,585,590,595,600,605],{"__ignoreMap":445},[449,562,563],{"class":451,"line":452},[449,564,565],{},"# Upload from file\n",[449,567,568],{"class":451,"line":482},[449,569,570],{},"s3.upload_file('local-file.txt', 'my-bucket', 'remote-file.txt')\n",[449,572,573],{"class":451,"line":488},[449,574,485],{"emptyLinePlaceholder":6},[449,576,577],{"class":451,"line":494},[449,578,579],{},"# Upload from bytes\n",[449,581,582],{"class":451,"line":500},[449,583,584],{},"s3.put_object(\n",[449,586,587],{"class":451,"line":506},[449,588,589],{},"    Bucket='my-bucket',\n",[449,591,592],{"class":451,"line":512},[449,593,594],{},"    Key='data.json',\n",[449,596,597],{"class":451,"line":518},[449,598,599],{},"    Body=b'{\"hello\": \"world\"}',\n",[449,601,602],{"class":451,"line":524},[449,603,604],{},"    ContentType='application/json'\n",[449,606,608],{"class":451,"line":607},10,[449,609,527],{},[435,611,613],{"id":612},"download-an-object","Download an Object",[440,615,617],{"className":470,"code":616,"language":472,"meta":445,"style":445},"# Download to file\ns3.download_file('my-bucket', 'remote-file.txt', 'local-file.txt')\n\n# Read into memory\nresponse = s3.get_object(Bucket='my-bucket', Key='data.json')\ncontent = response['Body'].read()\n",[269,618,619,624,629,633,638,643],{"__ignoreMap":445},[449,620,621],{"class":451,"line":452},[449,622,623],{},"# Download to file\n",[449,625,626],{"class":451,"line":482},[449,627,628],{},"s3.download_file('my-bucket', 'remote-file.txt', 'local-file.txt')\n",[449,630,631],{"class":451,"line":488},[449,632,485],{"emptyLinePlaceholder":6},[449,634,635],{"class":451,"line":494},[449,636,637],{},"# Read into memory\n",[449,639,640],{"class":451,"line":500},[449,641,642],{},"response = s3.get_object(Bucket='my-bucket', Key='data.json')\n",[449,644,645],{"class":451,"line":506},[449,646,647],{},"content = response['Body'].read()\n",[435,649,651],{"id":650},"list-objects","List Objects",[440,653,655],{"className":470,"code":654,"language":472,"meta":445,"style":445},"response = s3.list_objects_v2(Bucket='my-bucket')\nfor obj in response.get('Contents', []):\n    print(f\"{obj['Key']} ({obj['Size']} bytes)\")\n",[269,656,657,662,667],{"__ignoreMap":445},[449,658,659],{"class":451,"line":452},[449,660,661],{},"response = s3.list_objects_v2(Bucket='my-bucket')\n",[449,663,664],{"class":451,"line":482},[449,665,666],{},"for obj in response.get('Contents', []):\n",[449,668,669],{"class":451,"line":488},[449,670,671],{},"    print(f\"{obj['Key']} ({obj['Size']} bytes)\")\n",[435,673,675],{"id":674},"delete-an-object","Delete an Object",[440,677,679],{"className":470,"code":678,"language":472,"meta":445,"style":445},"s3.delete_object(Bucket='my-bucket', Key='remote-file.txt')\n",[269,680,681],{"__ignoreMap":445},[449,682,683],{"class":451,"line":452},[449,684,678],{},[435,686,688],{"id":687},"multipart-upload-large-files","Multipart Upload (Large Files)",[222,690,691],{},"For files larger than 5 GB, use multipart upload:",[440,693,695],{"className":470,"code":694,"language":472,"meta":445,"style":445},"from boto3.s3.transfer import TransferConfig\n\n# Configure multipart threshold (5 GB)\nconfig = TransferConfig(\n    multipart_threshold=5 * 1024 * 1024 * 1024,\n    multipart_chunksize=100 * 1024 * 1024  # 100 MB chunks\n)\n\ns3.upload_file(\n    'large-file.bin',\n    'my-bucket',\n    'large-file.bin',\n    Config=config\n)\n",[269,696,697,702,706,711,716,721,726,730,734,739,744,750,755,761],{"__ignoreMap":445},[449,698,699],{"class":451,"line":452},[449,700,701],{},"from boto3.s3.transfer import TransferConfig\n",[449,703,704],{"class":451,"line":482},[449,705,485],{"emptyLinePlaceholder":6},[449,707,708],{"class":451,"line":488},[449,709,710],{},"# Configure multipart threshold (5 GB)\n",[449,712,713],{"class":451,"line":494},[449,714,715],{},"config = TransferConfig(\n",[449,717,718],{"class":451,"line":500},[449,719,720],{},"    multipart_threshold=5 * 1024 * 1024 * 1024,\n",[449,722,723],{"class":451,"line":506},[449,724,725],{},"    multipart_chunksize=100 * 1024 * 1024  # 100 MB chunks\n",[449,727,728],{"class":451,"line":512},[449,729,527],{},[449,731,732],{"class":451,"line":518},[449,733,485],{"emptyLinePlaceholder":6},[449,735,736],{"class":451,"line":524},[449,737,738],{},"s3.upload_file(\n",[449,740,741],{"class":451,"line":607},[449,742,743],{},"    'large-file.bin',\n",[449,745,747],{"class":451,"line":746},11,[449,748,749],{},"    'my-bucket',\n",[449,751,753],{"class":451,"line":752},12,[449,754,743],{},[449,756,758],{"class":451,"line":757},13,[449,759,760],{},"    Config=config\n",[449,762,764],{"class":451,"line":763},14,[449,765,527],{},[435,767,769],{"id":768},"generate-a-presigned-url","Generate a Presigned URL",[440,771,773],{"className":470,"code":772,"language":472,"meta":445,"style":445},"url = s3.generate_presigned_url(\n    'get_object',\n    Params={'Bucket': 'my-bucket', 'Key': 'file.txt'},\n    ExpiresIn=3600  # URL valid for 1 hour\n)\nprint(url)\n",[269,774,775,780,785,790,795,799],{"__ignoreMap":445},[449,776,777],{"class":451,"line":452},[449,778,779],{},"url = s3.generate_presigned_url(\n",[449,781,782],{"class":451,"line":482},[449,783,784],{},"    'get_object',\n",[449,786,787],{"class":451,"line":488},[449,788,789],{},"    Params={'Bucket': 'my-bucket', 'Key': 'file.txt'},\n",[449,791,792],{"class":451,"line":494},[449,793,794],{},"    ExpiresIn=3600  # URL valid for 1 hour\n",[449,796,797],{"class":451,"line":500},[449,798,527],{},[449,800,801],{"class":451,"line":506},[449,802,803],{},"print(url)\n",[235,805,807],{"id":806},"using-aws-cli","Using aws-cli",[435,809,438],{"id":810},"installation-1",[440,812,814],{"className":442,"code":813,"language":444,"meta":445,"style":445},"# macOS\nbrew install awscli\n\n# Linux\ncurl \"https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip\" -o \"awscliv2.zip\"\nunzip awscliv2.zip && sudo ./aws/install\n\n# pip\npip install awscli\n",[269,815,816,822,832,836,841,867,884,888,893],{"__ignoreMap":445},[449,817,818],{"class":451,"line":452},[449,819,821],{"class":820},"sHwdD","# macOS\n",[449,823,824,827,829],{"class":451,"line":482},[449,825,826],{"class":455},"brew",[449,828,460],{"class":459},[449,830,831],{"class":459}," awscli\n",[449,833,834],{"class":451,"line":488},[449,835,485],{"emptyLinePlaceholder":6},[449,837,838],{"class":451,"line":494},[449,839,840],{"class":820},"# Linux\n",[449,842,843,846,850,853,856,859,861,864],{"class":451,"line":500},[449,844,845],{"class":455},"curl",[449,847,849],{"class":848},"sMK4o"," \"",[449,851,852],{"class":459},"https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip",[449,854,855],{"class":848},"\"",[449,857,858],{"class":459}," -o",[449,860,849],{"class":848},[449,862,863],{"class":459},"awscliv2.zip",[449,865,866],{"class":848},"\"\n",[449,868,869,872,875,878,881],{"class":451,"line":506},[449,870,871],{"class":455},"unzip",[449,873,874],{"class":459}," awscliv2.zip",[449,876,877],{"class":848}," &&",[449,879,880],{"class":455}," sudo",[449,882,883],{"class":459}," ./aws/install\n",[449,885,886],{"class":451,"line":512},[449,887,485],{"emptyLinePlaceholder":6},[449,889,890],{"class":451,"line":518},[449,891,892],{"class":820},"# pip\n",[449,894,895,897,899],{"class":451,"line":524},[449,896,456],{"class":455},[449,898,460],{"class":459},[449,900,831],{"class":459},[435,902,904],{"id":903},"configure-profile","Configure Profile",[222,906,907],{},"Create a named profile for NexQloud:",[440,909,911],{"className":442,"code":910,"language":444,"meta":445,"style":445},"aws configure --profile nexqloud\n",[269,912,913],{"__ignoreMap":445},[449,914,915,918,921,924],{"class":451,"line":452},[449,916,917],{"class":455},"aws",[449,919,920],{"class":459}," configure",[449,922,923],{"class":459}," --profile",[449,925,926],{"class":459}," nexqloud\n",[222,928,929],{},"Enter the following when prompted:",[440,931,936],{"className":932,"code":934,"language":935},[933],"language-text","AWS Access Key ID: NQAK_YOUR_ACCESS_KEY_ID\nAWS Secret Access Key: YOUR_SECRET_ACCESS_KEY\nDefault region name: auto\nDefault output format: json\n","text",[269,937,934],{"__ignoreMap":445},[435,939,531],{"id":940},"list-buckets-1",[440,942,944],{"className":442,"code":943,"language":444,"meta":445,"style":445},"aws s3 ls --endpoint-url https://storage.dcp.nexqloud.net --profile nexqloud\n",[269,945,946],{"__ignoreMap":445},[449,947,948,950,953,956,959,962,964],{"class":451,"line":452},[449,949,917],{"class":455},[449,951,952],{"class":459}," s3",[449,954,955],{"class":459}," ls",[449,957,958],{"class":459}," --endpoint-url",[449,960,961],{"class":459}," https://storage.dcp.nexqloud.net",[449,963,923],{"class":459},[449,965,926],{"class":459},[435,967,969],{"id":968},"upload-a-file","Upload a File",[440,971,973],{"className":442,"code":972,"language":444,"meta":445,"style":445},"aws s3 cp local-file.txt s3://my-bucket/remote-file.txt \\\n    --endpoint-url https://storage.dcp.nexqloud.net \\\n    --profile nexqloud\n",[269,974,975,994,1003],{"__ignoreMap":445},[449,976,977,979,981,984,987,990],{"class":451,"line":452},[449,978,917],{"class":455},[449,980,952],{"class":459},[449,982,983],{"class":459}," cp",[449,985,986],{"class":459}," local-file.txt",[449,988,989],{"class":459}," s3://my-bucket/remote-file.txt",[449,991,993],{"class":992},"sTEyZ"," \\\n",[449,995,996,999,1001],{"class":451,"line":482},[449,997,998],{"class":459},"    --endpoint-url",[449,1000,961],{"class":459},[449,1002,993],{"class":992},[449,1004,1005,1008],{"class":451,"line":488},[449,1006,1007],{"class":459},"    --profile",[449,1009,926],{"class":459},[435,1011,1013],{"id":1012},"download-a-file","Download a File",[440,1015,1017],{"className":442,"code":1016,"language":444,"meta":445,"style":445},"aws s3 cp s3://my-bucket/remote-file.txt local-file.txt \\\n    --endpoint-url https://storage.dcp.nexqloud.net \\\n    --profile nexqloud\n",[269,1018,1019,1033,1041],{"__ignoreMap":445},[449,1020,1021,1023,1025,1027,1029,1031],{"class":451,"line":452},[449,1022,917],{"class":455},[449,1024,952],{"class":459},[449,1026,983],{"class":459},[449,1028,989],{"class":459},[449,1030,986],{"class":459},[449,1032,993],{"class":992},[449,1034,1035,1037,1039],{"class":451,"line":482},[449,1036,998],{"class":459},[449,1038,961],{"class":459},[449,1040,993],{"class":992},[449,1042,1043,1045],{"class":451,"line":488},[449,1044,1007],{"class":459},[449,1046,926],{"class":459},[435,1048,1050],{"id":1049},"list-objects-in-a-bucket","List Objects in a Bucket",[440,1052,1054],{"className":442,"code":1053,"language":444,"meta":445,"style":445},"aws s3 ls s3://my-bucket/ \\\n    --endpoint-url https://storage.dcp.nexqloud.net \\\n    --profile nexqloud\n",[269,1055,1056,1069,1077],{"__ignoreMap":445},[449,1057,1058,1060,1062,1064,1067],{"class":451,"line":452},[449,1059,917],{"class":455},[449,1061,952],{"class":459},[449,1063,955],{"class":459},[449,1065,1066],{"class":459}," s3://my-bucket/",[449,1068,993],{"class":992},[449,1070,1071,1073,1075],{"class":451,"line":482},[449,1072,998],{"class":459},[449,1074,961],{"class":459},[449,1076,993],{"class":992},[449,1078,1079,1081],{"class":451,"line":488},[449,1080,1007],{"class":459},[449,1082,926],{"class":459},[435,1084,1086],{"id":1085},"sync-a-directory","Sync a Directory",[440,1088,1090],{"className":442,"code":1089,"language":444,"meta":445,"style":445},"aws s3 sync ./local-folder s3://my-bucket/prefix/ \\\n    --endpoint-url https://storage.dcp.nexqloud.net \\\n    --profile nexqloud\n",[269,1091,1092,1109,1117],{"__ignoreMap":445},[449,1093,1094,1096,1098,1101,1104,1107],{"class":451,"line":452},[449,1095,917],{"class":455},[449,1097,952],{"class":459},[449,1099,1100],{"class":459}," sync",[449,1102,1103],{"class":459}," ./local-folder",[449,1105,1106],{"class":459}," s3://my-bucket/prefix/",[449,1108,993],{"class":992},[449,1110,1111,1113,1115],{"class":451,"line":482},[449,1112,998],{"class":459},[449,1114,961],{"class":459},[449,1116,993],{"class":992},[449,1118,1119,1121],{"class":451,"line":488},[449,1120,1007],{"class":459},[449,1122,926],{"class":459},[435,1124,675],{"id":1125},"delete-an-object-1",[440,1127,1129],{"className":442,"code":1128,"language":444,"meta":445,"style":445},"aws s3 rm s3://my-bucket/remote-file.txt \\\n    --endpoint-url https://storage.dcp.nexqloud.net \\\n    --profile nexqloud\n",[269,1130,1131,1144,1152],{"__ignoreMap":445},[449,1132,1133,1135,1137,1140,1142],{"class":451,"line":452},[449,1134,917],{"class":455},[449,1136,952],{"class":459},[449,1138,1139],{"class":459}," rm",[449,1141,989],{"class":459},[449,1143,993],{"class":992},[449,1145,1146,1148,1150],{"class":451,"line":482},[449,1147,998],{"class":459},[449,1149,961],{"class":459},[449,1151,993],{"class":992},[449,1153,1154,1156],{"class":451,"line":488},[449,1155,1007],{"class":459},[449,1157,926],{"class":459},[435,1159,769],{"id":1160},"generate-a-presigned-url-1",[440,1162,1164],{"className":442,"code":1163,"language":444,"meta":445,"style":445},"aws s3 presign s3://my-bucket/file.txt \\\n    --expires-in 3600 \\\n    --endpoint-url https://storage.dcp.nexqloud.net \\\n    --profile nexqloud\n",[269,1165,1166,1180,1191,1199],{"__ignoreMap":445},[449,1167,1168,1170,1172,1175,1178],{"class":451,"line":452},[449,1169,917],{"class":455},[449,1171,952],{"class":459},[449,1173,1174],{"class":459}," presign",[449,1176,1177],{"class":459}," s3://my-bucket/file.txt",[449,1179,993],{"class":992},[449,1181,1182,1185,1189],{"class":451,"line":482},[449,1183,1184],{"class":459},"    --expires-in",[449,1186,1188],{"class":1187},"sbssI"," 3600",[449,1190,993],{"class":992},[449,1192,1193,1195,1197],{"class":451,"line":488},[449,1194,998],{"class":459},[449,1196,961],{"class":459},[449,1198,993],{"class":992},[449,1200,1201,1203],{"class":451,"line":494},[449,1202,1007],{"class":459},[449,1204,926],{"class":459},[235,1206,1208],{"id":1207},"error-handling","Error Handling",[222,1210,1211],{},"Common error responses:",[240,1213,1214,1227],{},[243,1215,1216],{},[246,1217,1218,1221,1224],{},[249,1219,1220],{},"HTTP Code",[249,1222,1223],{},"Error",[249,1225,1226],{},"Cause",[256,1228,1229,1242,1254,1267,1279],{},[246,1230,1231,1234,1239],{},[261,1232,1233],{},"403",[261,1235,1236],{},[269,1237,1238],{},"SignatureDoesNotMatch",[261,1240,1241],{},"Invalid secret key or incorrect signing",[246,1243,1244,1246,1251],{},[261,1245,1233],{},[261,1247,1248],{},[269,1249,1250],{},"AccessDenied",[261,1252,1253],{},"Key does not have permission for this bucket",[246,1255,1256,1259,1264],{},[261,1257,1258],{},"404",[261,1260,1261],{},[269,1262,1263],{},"NoSuchBucket",[261,1265,1266],{},"Bucket does not exist or is not accessible",[246,1268,1269,1271,1276],{},[261,1270,1258],{},[261,1272,1273],{},[269,1274,1275],{},"NoSuchKey",[261,1277,1278],{},"Object key does not exist",[246,1280,1281,1284,1289],{},[261,1282,1283],{},"400",[261,1285,1286],{},[269,1287,1288],{},"InvalidBucketName",[261,1290,1291],{},"Bucket name violates naming rules",[235,1293,1295],{"id":1294},"tips","Tips",[1297,1298,1299,1311,1318],"ul",{},[1300,1301,1302,1303,1306,1307,1310],"li",{},"Always use ",[269,1304,1305],{},"endpoint_url"," / ",[269,1308,1309],{},"--endpoint-url"," — without it, requests go to AWS instead of NexQloud",[1300,1312,1313,1314,1317],{},"Set ",[269,1315,1316],{},"region_name='auto'"," — NexQloud uses a single global region",[1300,1319,1320],{},"Use environment variables for credentials in production:",[440,1322,1324],{"className":442,"code":1323,"language":444,"meta":445,"style":445},"export AWS_ACCESS_KEY_ID=NQAK_YOUR_ACCESS_KEY_ID\nexport AWS_SECRET_ACCESS_KEY=YOUR_SECRET_ACCESS_KEY\nexport AWS_ENDPOINT_URL=https://storage.dcp.nexqloud.net\n",[269,1325,1326,1341,1353],{"__ignoreMap":445},[449,1327,1328,1332,1335,1338],{"class":451,"line":452},[449,1329,1331],{"class":1330},"spNyl","export",[449,1333,1334],{"class":992}," AWS_ACCESS_KEY_ID",[449,1336,1337],{"class":848},"=",[449,1339,1340],{"class":992},"NQAK_YOUR_ACCESS_KEY_ID\n",[449,1342,1343,1345,1348,1350],{"class":451,"line":482},[449,1344,1331],{"class":1330},[449,1346,1347],{"class":992}," AWS_SECRET_ACCESS_KEY",[449,1349,1337],{"class":848},[449,1351,1352],{"class":992},"YOUR_SECRET_ACCESS_KEY\n",[449,1354,1355,1357,1360,1362],{"class":451,"line":488},[449,1356,1331],{"class":1330},[449,1358,1359],{"class":992}," AWS_ENDPOINT_URL",[449,1361,1337],{"class":848},[449,1363,1364],{"class":992},"https://storage.dcp.nexqloud.net\n",[235,1366,1368],{"id":1367},"next-steps","Next Steps",[1297,1370,1371,1377],{},[1300,1372,1373,1376],{},[1374,1375,171],"a",{"href":172}," — manage and rotate your credentials",[1300,1378,1379,1381],{},[1374,1380,179],{"href":180}," — monitor data transfer and API operations",[1383,1384,1385],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}",{"title":445,"searchDepth":482,"depth":482,"links":1387},[1388,1389,1390,1401,1412,1413,1414],{"id":237,"depth":482,"text":238},{"id":310,"depth":482,"text":311},{"id":432,"depth":482,"text":433,"children":1391},[1392,1393,1394,1395,1396,1397,1398,1399,1400],{"id":437,"depth":488,"text":438},{"id":466,"depth":488,"text":467},{"id":530,"depth":488,"text":531},{"id":554,"depth":488,"text":555},{"id":612,"depth":488,"text":613},{"id":650,"depth":488,"text":651},{"id":674,"depth":488,"text":675},{"id":687,"depth":488,"text":688},{"id":768,"depth":488,"text":769},{"id":806,"depth":482,"text":807,"children":1402},[1403,1404,1405,1406,1407,1408,1409,1410,1411],{"id":810,"depth":488,"text":438},{"id":903,"depth":488,"text":904},{"id":940,"depth":488,"text":531},{"id":968,"depth":488,"text":969},{"id":1012,"depth":488,"text":1013},{"id":1049,"depth":488,"text":1050},{"id":1085,"depth":488,"text":1086},{"id":1125,"depth":488,"text":675},{"id":1160,"depth":488,"text":769},{"id":1207,"depth":482,"text":1208},{"id":1294,"depth":482,"text":1295},{"id":1367,"depth":482,"text":1368},"Connect to Object Storage using boto3 and aws-cli","md",null,{},{"icon":110},{"title":175,"description":1415},"iJt1uypdPY8HWOEj0l3_36Hr9ABwYGJYbIue6TLQDbQ",[1423,1425],{"title":171,"path":172,"stem":173,"description":1424,"icon":88,"children":-1},"Create and manage S3-compatible access keys for Object Storage",{"title":179,"path":180,"stem":181,"description":1426,"icon":182,"children":-1},"Monitor storage usage and understand billing metrics",1778274380604]