<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>S3Client on Grafana Labs</title><link>https://grafana.com/docs/k6/v2.3.x/javascript-api/jslib/aws/s3client/</link><description>Recent content in S3Client on Grafana Labs</description><generator>Hugo -- gohugo.io</generator><language>en</language><atom:link href="/docs/k6/v2.3.x/javascript-api/jslib/aws/s3client/index.xml" rel="self" type="application/rss+xml"/><item><title>abortMultipartUpload</title><link>https://grafana.com/docs/k6/v2.3.x/javascript-api/jslib/aws/s3client/abortmultipartupload/</link><pubDate>Mon, 21 Sep 2026 15:16:28 +0000</pubDate><guid>https://grafana.com/docs/k6/v2.3.x/javascript-api/jslib/aws/s3client/abortmultipartupload/</guid><content><![CDATA[&lt;h1 id=&#34;abortmultipartupload&#34;&gt;abortMultipartUpload&lt;/h1&gt;
&lt;p&gt;&lt;code&gt;S3Client.abortMultipartUpload&lt;/code&gt; aborts a multipart upload to an S3 bucket.&lt;/p&gt;
&lt;h3 id=&#34;parameters&#34;&gt;Parameters&lt;/h3&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th style=&#34;text-align: left&#34;&gt;Parameter&lt;/th&gt;
              &lt;th style=&#34;text-align: left&#34;&gt;Type&lt;/th&gt;
              &lt;th style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;bucketName&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;string&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;Name of the bucket to delete the multipart object from.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;objectKey&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;string&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;Name of the multipart object to delete.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;uploadId&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;number&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;UploadId of the multipart upload to abort.&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;h3 id=&#34;returns&#34;&gt;Returns&lt;/h3&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th style=&#34;text-align: left&#34;&gt;Type&lt;/th&gt;
              &lt;th style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;Promise&amp;lt;void&amp;gt;&lt;/code&gt;&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;A promise that fulfills when the multipart upload has been aborted.&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;h3 id=&#34;example&#34;&gt;Example&lt;/h3&gt;
&lt;!-- md-k6:skip --&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;JavaScript&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-javascript&#34;&gt;import {
  AWSConfig,
  S3Client,
} from &amp;#39;https://jslib.k6.io/aws/0.14.0/s3.js&amp;#39;;

const awsConfig = new AWSConfig({
  region: __ENV.AWS_REGION,
  accessKeyId: __ENV.AWS_ACCESS_KEY_ID,
  secretAccessKey: __ENV.AWS_SECRET_ACCESS_KEY,
  sessionToken: __ENV.AWS_SESSION_TOKEN,
});

const s3 = new S3Client(awsConfig);

const testBucketName = &amp;#39;test-jslib-aws&amp;#39;;
const testFileKey = &amp;#39;multipart.txt&amp;#39;;

export default async function () {
  // Initialize a multipart upload
  const multipartUpload = await s3.createMultipartUpload(testBucketName, testFileKey);

  // Abort multipart upload
  await s3.abortMultipartUpload(testBucketName, testFileKey, multipartUpload.uploadId);
}&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;em&gt;A k6 script that will create a multipart upload and abort the multipart&lt;/em&gt;&lt;/p&gt;
]]></content><description>&lt;h1 id="abortmultipartupload">abortMultipartUpload&lt;/h1>
&lt;p>&lt;code>S3Client.abortMultipartUpload&lt;/code> aborts a multipart upload to an S3 bucket.&lt;/p>
&lt;h3 id="parameters">Parameters&lt;/h3>
&lt;section class="expand-table-wrapper">&lt;div class="button-div">
&lt;button class="expand-table-btn">Expand table&lt;/button>
&lt;/div>&lt;div class="responsive-table-wrapper">
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align: left">Parameter&lt;/th>
&lt;th style="text-align: left">Type&lt;/th>
&lt;th style="text-align: left">Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align: left">bucketName&lt;/td>
&lt;td style="text-align: left">string&lt;/td>
&lt;td style="text-align: left">Name of the bucket to delete the multipart object from.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">objectKey&lt;/td>
&lt;td style="text-align: left">string&lt;/td>
&lt;td style="text-align: left">Name of the multipart object to delete.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">uploadId&lt;/td>
&lt;td style="text-align: left">number&lt;/td>
&lt;td style="text-align: left">UploadId of the multipart upload to abort.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;/div>
&lt;/section>&lt;h3 id="returns">Returns&lt;/h3>
&lt;section class="expand-table-wrapper">&lt;div class="button-div">
&lt;button class="expand-table-btn">Expand table&lt;/button>
&lt;/div>&lt;div class="responsive-table-wrapper">
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align: left">Type&lt;/th>
&lt;th style="text-align: left">Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align: left">&lt;code>Promise&amp;lt;void&amp;gt;&lt;/code>&lt;/td>
&lt;td style="text-align: left">A promise that fulfills when the multipart upload has been aborted.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;/div>
&lt;/section>&lt;h3 id="example">Example&lt;/h3>
&lt;!-- md-k6:skip -->
&lt;div class="code-snippet ">&lt;div class="lang-toolbar">
&lt;span class="lang-toolbar__item lang-toolbar__item-active">JavaScript&lt;/span>
&lt;span class="code-clipboard">
&lt;button x-data="app_code_snippet()" x-init="init()" @click="copy()">
&lt;img class="code-clipboard__icon" src="/media/images/icons/icon-copy-small-2.svg" alt="Copy code to clipboard" width="14" height="13">
&lt;span>Copy&lt;/span>
&lt;/button>
&lt;/span>
&lt;div class="lang-toolbar__border">&lt;/div>
&lt;/div>&lt;div class="code-snippet ">
&lt;pre data-expanded="false">&lt;code class="language-javascript">import {
AWSConfig,
S3Client,
} from &amp;#39;https://jslib.k6.io/aws/0.14.0/s3.js&amp;#39;;
const awsConfig = new AWSConfig({
region: __ENV.AWS_REGION,
accessKeyId: __ENV.AWS_ACCESS_KEY_ID,
secretAccessKey: __ENV.AWS_SECRET_ACCESS_KEY,
sessionToken: __ENV.AWS_SESSION_TOKEN,
});
const s3 = new S3Client(awsConfig);
const testBucketName = &amp;#39;test-jslib-aws&amp;#39;;
const testFileKey = &amp;#39;multipart.txt&amp;#39;;
export default async function () {
// Initialize a multipart upload
const multipartUpload = await s3.createMultipartUpload(testBucketName, testFileKey);
// Abort multipart upload
await s3.abortMultipartUpload(testBucketName, testFileKey, multipartUpload.uploadId);
}&lt;/code>&lt;/pre>
&lt;/div>
&lt;/div>
&lt;p>&lt;em>A k6 script that will create a multipart upload and abort the multipart&lt;/em>&lt;/p></description></item><item><title>completeMultipartUpload</title><link>https://grafana.com/docs/k6/v2.3.x/javascript-api/jslib/aws/s3client/completemultipartupload/</link><pubDate>Mon, 21 Sep 2026 15:16:28 +0000</pubDate><guid>https://grafana.com/docs/k6/v2.3.x/javascript-api/jslib/aws/s3client/completemultipartupload/</guid><content><![CDATA[&lt;h1 id=&#34;completemultipartupload&#34;&gt;completeMultipartUpload&lt;/h1&gt;
&lt;p&gt;&lt;code&gt;S3Client.completeMultipartUpload&lt;/code&gt; uploads a multipart object to an S3 bucket.&lt;/p&gt;
&lt;h3 id=&#34;parameters&#34;&gt;Parameters&lt;/h3&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th style=&#34;text-align: left&#34;&gt;Parameter&lt;/th&gt;
              &lt;th style=&#34;text-align: left&#34;&gt;Type&lt;/th&gt;
              &lt;th style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;bucketName&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;string&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;Name of the bucket to delete the object to.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;objectKey&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;string&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;Name of the uploaded object.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;uploadId&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;number&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;UploadId of the multipart upload to complete.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;parts&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;Array&amp;lt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/jslib/aws/s3client/s3part/&#34;&gt;S3Part&lt;/a&gt;&amp;gt;&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;The 
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/jslib/aws/s3client/s3part/&#34;&gt;S3Part&lt;/a&gt;s to assemble.&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;h3 id=&#34;returns&#34;&gt;Returns&lt;/h3&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th style=&#34;text-align: left&#34;&gt;Type&lt;/th&gt;
              &lt;th style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;Promise&amp;lt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/jslib/aws/s3client/s3uploadedobject/&#34;&gt;S3UploadedObject&lt;/a&gt;&amp;gt;&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;A Promise that fulfills with an 
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/jslib/aws/s3client/s3uploadedobject/&#34;&gt;S3UploadedObject&lt;/a&gt; containing metadata about the completed multipart upload, including ETag and optional checksums.&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;h3 id=&#34;example&#34;&gt;Example&lt;/h3&gt;
&lt;!-- md-k6:skip --&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;JavaScript&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-javascript&#34;&gt;import crypto from &amp;#39;k6/crypto&amp;#39;;
import exec from &amp;#39;k6/execution&amp;#39;;

import {
  AWSConfig,
  S3Client,
} from &amp;#39;https://jslib.k6.io/aws/0.14.0/s3.js&amp;#39;;

const awsConfig = new AWSConfig({
  region: __ENV.AWS_REGION,
  accessKeyId: __ENV.AWS_ACCESS_KEY_ID,
  secretAccessKey: __ENV.AWS_SECRET_ACCESS_KEY,
  sessionToken: __ENV.AWS_SESSION_TOKEN,
});

const s3 = new S3Client(awsConfig);

const testBucketName = &amp;#39;test-jslib-aws&amp;#39;;
const testFileKey = &amp;#39;multipart.txt&amp;#39;;

export default async function () {
  // List the buckets the AWS authentication configuration
  // gives us access to.
  const buckets = await s3.listBuckets();

  // If our test bucket does not exist, abort the execution.
  if (buckets.filter((b) =&amp;gt; b.name === testBucketName).length == 0) {
    exec.test.abort();
  }

  // Produce random bytes to upload of size ~12MB, that
  // we will upload in two 6MB parts. This is done as the
  // minimum part size supported by S3 is 5MB.
  const bigFile = crypto.randomBytes(12 * 1024 * 1024);

  // Initialize a multipart upload
  const multipartUpload = await s3.createMultipartUpload(testBucketName, testFileKey);

  // Upload the first part
  const firstPartData = bigFile.slice(0, 6 * 1024 * 1024);
  const firstPart = await s3.uploadPart(
    testBucketName,
    testFileKey,
    multipartUpload.uploadId,
    1,
    firstPartData
  );

  // Upload the second part
  const secondPartData = bigFile.slice(6 * 1024 * 1024, 12 * 1024 * 1024);
  const secondPart = await s3.uploadPart(
    testBucketName,
    testFileKey,
    multipartUpload.uploadId,
    2,
    secondPartData
  );

  // Complete the multipart upload
  const uploadResult = await s3.completeMultipartUpload(
    testBucketName,
    testFileKey,
    multipartUpload.uploadId,
    [firstPart, secondPart]
  );

  // Access the upload metadata
  console.log(&amp;#39;Multipart upload completed! ETag:&amp;#39;, uploadResult.eTag);

  if (uploadResult.size) {
    console.log(&amp;#39;Total object size:&amp;#39;, uploadResult.size);
  }

  // For multipart uploads, the checksum type will typically be &amp;#34;COMPOSITE&amp;#34;
  if (uploadResult.checksumType) {
    console.log(&amp;#39;Checksum type:&amp;#39;, uploadResult.checksumType);
  }

  // Let&amp;#39;s redownload it verify it&amp;#39;s correct, and delete it
  const obj = await s3.getObject(testBucketName, testFileKey);
  await s3.deleteObject(testBucketName, testFileKey);
}&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;em&gt;A k6 script that will upload a multipart upload to an S3 bucket&lt;/em&gt;&lt;/p&gt;
]]></content><description>&lt;h1 id="completemultipartupload">completeMultipartUpload&lt;/h1>
&lt;p>&lt;code>S3Client.completeMultipartUpload&lt;/code> uploads a multipart object to an S3 bucket.&lt;/p>
&lt;h3 id="parameters">Parameters&lt;/h3>
&lt;section class="expand-table-wrapper">&lt;div class="button-div">
&lt;button class="expand-table-btn">Expand table&lt;/button>
&lt;/div>&lt;div class="responsive-table-wrapper">
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align: left">Parameter&lt;/th>
&lt;th style="text-align: left">Type&lt;/th>
&lt;th style="text-align: left">Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align: left">bucketName&lt;/td>
&lt;td style="text-align: left">string&lt;/td>
&lt;td style="text-align: left">Name of the bucket to delete the object to.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">objectKey&lt;/td>
&lt;td style="text-align: left">string&lt;/td>
&lt;td style="text-align: left">Name of the uploaded object.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">uploadId&lt;/td>
&lt;td style="text-align: left">number&lt;/td>
&lt;td style="text-align: left">UploadId of the multipart upload to complete.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">parts&lt;/td>
&lt;td style="text-align: left">Array&amp;lt;
&lt;a href="/docs/k6/v2.3.x/javascript-api/jslib/aws/s3client/s3part/">S3Part&lt;/a>&amp;gt;&lt;/td>
&lt;td style="text-align: left">The
&lt;a href="/docs/k6/v2.3.x/javascript-api/jslib/aws/s3client/s3part/">S3Part&lt;/a>s to assemble.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;/div>
&lt;/section>&lt;h3 id="returns">Returns&lt;/h3>
&lt;section class="expand-table-wrapper">&lt;div class="button-div">
&lt;button class="expand-table-btn">Expand table&lt;/button>
&lt;/div>&lt;div class="responsive-table-wrapper">
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align: left">Type&lt;/th>
&lt;th style="text-align: left">Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align: left">Promise&amp;lt;
&lt;a href="/docs/k6/v2.3.x/javascript-api/jslib/aws/s3client/s3uploadedobject/">S3UploadedObject&lt;/a>&amp;gt;&lt;/td>
&lt;td style="text-align: left">A Promise that fulfills with an
&lt;a href="/docs/k6/v2.3.x/javascript-api/jslib/aws/s3client/s3uploadedobject/">S3UploadedObject&lt;/a> containing metadata about the completed multipart upload, including ETag and optional checksums.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;/div>
&lt;/section>&lt;h3 id="example">Example&lt;/h3>
&lt;!-- md-k6:skip -->
&lt;div class="code-snippet ">&lt;div class="lang-toolbar">
&lt;span class="lang-toolbar__item lang-toolbar__item-active">JavaScript&lt;/span>
&lt;span class="code-clipboard">
&lt;button x-data="app_code_snippet()" x-init="init()" @click="copy()">
&lt;img class="code-clipboard__icon" src="/media/images/icons/icon-copy-small-2.svg" alt="Copy code to clipboard" width="14" height="13">
&lt;span>Copy&lt;/span>
&lt;/button>
&lt;/span>
&lt;div class="lang-toolbar__border">&lt;/div>
&lt;/div>&lt;div class="code-snippet ">
&lt;pre data-expanded="false">&lt;code class="language-javascript">import crypto from &amp;#39;k6/crypto&amp;#39;;
import exec from &amp;#39;k6/execution&amp;#39;;
import {
AWSConfig,
S3Client,
} from &amp;#39;https://jslib.k6.io/aws/0.14.0/s3.js&amp;#39;;
const awsConfig = new AWSConfig({
region: __ENV.AWS_REGION,
accessKeyId: __ENV.AWS_ACCESS_KEY_ID,
secretAccessKey: __ENV.AWS_SECRET_ACCESS_KEY,
sessionToken: __ENV.AWS_SESSION_TOKEN,
});
const s3 = new S3Client(awsConfig);
const testBucketName = &amp;#39;test-jslib-aws&amp;#39;;
const testFileKey = &amp;#39;multipart.txt&amp;#39;;
export default async function () {
// List the buckets the AWS authentication configuration
// gives us access to.
const buckets = await s3.listBuckets();
// If our test bucket does not exist, abort the execution.
if (buckets.filter((b) =&amp;gt; b.name === testBucketName).length == 0) {
exec.test.abort();
}
// Produce random bytes to upload of size ~12MB, that
// we will upload in two 6MB parts. This is done as the
// minimum part size supported by S3 is 5MB.
const bigFile = crypto.randomBytes(12 * 1024 * 1024);
// Initialize a multipart upload
const multipartUpload = await s3.createMultipartUpload(testBucketName, testFileKey);
// Upload the first part
const firstPartData = bigFile.slice(0, 6 * 1024 * 1024);
const firstPart = await s3.uploadPart(
testBucketName,
testFileKey,
multipartUpload.uploadId,
1,
firstPartData
);
// Upload the second part
const secondPartData = bigFile.slice(6 * 1024 * 1024, 12 * 1024 * 1024);
const secondPart = await s3.uploadPart(
testBucketName,
testFileKey,
multipartUpload.uploadId,
2,
secondPartData
);
// Complete the multipart upload
const uploadResult = await s3.completeMultipartUpload(
testBucketName,
testFileKey,
multipartUpload.uploadId,
[firstPart, secondPart]
);
// Access the upload metadata
console.log(&amp;#39;Multipart upload completed! ETag:&amp;#39;, uploadResult.eTag);
if (uploadResult.size) {
console.log(&amp;#39;Total object size:&amp;#39;, uploadResult.size);
}
// For multipart uploads, the checksum type will typically be &amp;#34;COMPOSITE&amp;#34;
if (uploadResult.checksumType) {
console.log(&amp;#39;Checksum type:&amp;#39;, uploadResult.checksumType);
}
// Let&amp;#39;s redownload it verify it&amp;#39;s correct, and delete it
const obj = await s3.getObject(testBucketName, testFileKey);
await s3.deleteObject(testBucketName, testFileKey);
}&lt;/code>&lt;/pre>
&lt;/div>
&lt;/div>
&lt;p>&lt;em>A k6 script that will upload a multipart upload to an S3 bucket&lt;/em>&lt;/p></description></item><item><title>copyObject</title><link>https://grafana.com/docs/k6/v2.3.x/javascript-api/jslib/aws/s3client/copyobject/</link><pubDate>Mon, 21 Sep 2026 15:16:28 +0000</pubDate><guid>https://grafana.com/docs/k6/v2.3.x/javascript-api/jslib/aws/s3client/copyobject/</guid><content><![CDATA[&lt;h1 id=&#34;copyobject&#34;&gt;copyObject&lt;/h1&gt;
&lt;p&gt;&lt;code&gt;S3Client.copyObject&lt;/code&gt; copies an object from one bucket to another.&lt;/p&gt;
&lt;h3 id=&#34;parameters&#34;&gt;Parameters&lt;/h3&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th style=&#34;text-align: left&#34;&gt;Parameter&lt;/th&gt;
              &lt;th style=&#34;text-align: left&#34;&gt;Type&lt;/th&gt;
              &lt;th style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;sourceBucket&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;string&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;Name of the bucket to copy the object from.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;sourceKey&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;string&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;Name of the object to copy from the source bucket.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;destinationBucket&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;string&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;Name of the bucket to copy the object to.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;destinationKey&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;string&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;Name of the destination object.&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;h3 id=&#34;returns&#34;&gt;Returns&lt;/h3&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th style=&#34;text-align: left&#34;&gt;Type&lt;/th&gt;
              &lt;th style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;Promise&amp;lt;void&amp;gt;&lt;/code&gt;&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;A Promise that fulfills when the object has been copied from one bucket to another.&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;h3 id=&#34;example&#34;&gt;Example&lt;/h3&gt;
&lt;!-- md-k6:skip --&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;JavaScript&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-javascript&#34;&gt;import exec from &amp;#39;k6/execution&amp;#39;;

import {
  AWSConfig,
  S3Client,
} from &amp;#39;https://jslib.k6.io/aws/0.14.0/s3.js&amp;#39;;

const awsConfig = new AWSConfig({
  region: __ENV.AWS_REGION,
  accessKeyId: __ENV.AWS_ACCESS_KEY_ID,
  secretAccessKey: __ENV.AWS_SECRET_ACCESS_KEY,
});

const testFile = open(&amp;#39;./bonjour.txt&amp;#39;, &amp;#39;r&amp;#39;);
const s3 = new S3Client(awsConfig);
const testBucketName = &amp;#39;test-jslib-aws&amp;#39;;
const testFileKey = &amp;#39;bonjour.txt&amp;#39;;
const testDestinationBucketName = &amp;#39;test-jslib-aws-destination&amp;#39;;

export default async function () {
  // Let&amp;#39;s upload our test file to the bucket
  await s3.putObject(testBucketName, testFileKey, testFile);

  // Let&amp;#39;s create our destination bucket
  await s3.copyObject(testBucketName, testFileKey, testDestinationBucketName, testFileKey);
}&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;em&gt;A k6 script that will copy an object from a source S3 bucket to a destination bucket&lt;/em&gt;&lt;/p&gt;
]]></content><description>&lt;h1 id="copyobject">copyObject&lt;/h1>
&lt;p>&lt;code>S3Client.copyObject&lt;/code> copies an object from one bucket to another.&lt;/p>
&lt;h3 id="parameters">Parameters&lt;/h3>
&lt;section class="expand-table-wrapper">&lt;div class="button-div">
&lt;button class="expand-table-btn">Expand table&lt;/button>
&lt;/div>&lt;div class="responsive-table-wrapper">
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align: left">Parameter&lt;/th>
&lt;th style="text-align: left">Type&lt;/th>
&lt;th style="text-align: left">Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align: left">sourceBucket&lt;/td>
&lt;td style="text-align: left">string&lt;/td>
&lt;td style="text-align: left">Name of the bucket to copy the object from.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">sourceKey&lt;/td>
&lt;td style="text-align: left">string&lt;/td>
&lt;td style="text-align: left">Name of the object to copy from the source bucket.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">destinationBucket&lt;/td>
&lt;td style="text-align: left">string&lt;/td>
&lt;td style="text-align: left">Name of the bucket to copy the object to.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">destinationKey&lt;/td>
&lt;td style="text-align: left">string&lt;/td>
&lt;td style="text-align: left">Name of the destination object.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;/div>
&lt;/section>&lt;h3 id="returns">Returns&lt;/h3>
&lt;section class="expand-table-wrapper">&lt;div class="button-div">
&lt;button class="expand-table-btn">Expand table&lt;/button>
&lt;/div>&lt;div class="responsive-table-wrapper">
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align: left">Type&lt;/th>
&lt;th style="text-align: left">Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align: left">&lt;code>Promise&amp;lt;void&amp;gt;&lt;/code>&lt;/td>
&lt;td style="text-align: left">A Promise that fulfills when the object has been copied from one bucket to another.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;/div>
&lt;/section>&lt;h3 id="example">Example&lt;/h3>
&lt;!-- md-k6:skip -->
&lt;div class="code-snippet ">&lt;div class="lang-toolbar">
&lt;span class="lang-toolbar__item lang-toolbar__item-active">JavaScript&lt;/span>
&lt;span class="code-clipboard">
&lt;button x-data="app_code_snippet()" x-init="init()" @click="copy()">
&lt;img class="code-clipboard__icon" src="/media/images/icons/icon-copy-small-2.svg" alt="Copy code to clipboard" width="14" height="13">
&lt;span>Copy&lt;/span>
&lt;/button>
&lt;/span>
&lt;div class="lang-toolbar__border">&lt;/div>
&lt;/div>&lt;div class="code-snippet ">
&lt;pre data-expanded="false">&lt;code class="language-javascript">import exec from &amp;#39;k6/execution&amp;#39;;
import {
AWSConfig,
S3Client,
} from &amp;#39;https://jslib.k6.io/aws/0.14.0/s3.js&amp;#39;;
const awsConfig = new AWSConfig({
region: __ENV.AWS_REGION,
accessKeyId: __ENV.AWS_ACCESS_KEY_ID,
secretAccessKey: __ENV.AWS_SECRET_ACCESS_KEY,
});
const testFile = open(&amp;#39;./bonjour.txt&amp;#39;, &amp;#39;r&amp;#39;);
const s3 = new S3Client(awsConfig);
const testBucketName = &amp;#39;test-jslib-aws&amp;#39;;
const testFileKey = &amp;#39;bonjour.txt&amp;#39;;
const testDestinationBucketName = &amp;#39;test-jslib-aws-destination&amp;#39;;
export default async function () {
// Let&amp;#39;s upload our test file to the bucket
await s3.putObject(testBucketName, testFileKey, testFile);
// Let&amp;#39;s create our destination bucket
await s3.copyObject(testBucketName, testFileKey, testDestinationBucketName, testFileKey);
}&lt;/code>&lt;/pre>
&lt;/div>
&lt;/div>
&lt;p>&lt;em>A k6 script that will copy an object from a source S3 bucket to a destination bucket&lt;/em>&lt;/p></description></item><item><title>createMultipartUpload</title><link>https://grafana.com/docs/k6/v2.3.x/javascript-api/jslib/aws/s3client/createmultipartupload/</link><pubDate>Mon, 21 Sep 2026 15:16:28 +0000</pubDate><guid>https://grafana.com/docs/k6/v2.3.x/javascript-api/jslib/aws/s3client/createmultipartupload/</guid><content><![CDATA[&lt;h1 id=&#34;createmultipartupload&#34;&gt;createMultipartUpload&lt;/h1&gt;
&lt;p&gt;&lt;code&gt;S3Client.createMultipartUpload&lt;/code&gt; creates a new multipart upload for a given an object key in a bucket.&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th style=&#34;text-align: left&#34;&gt;Parameter&lt;/th&gt;
              &lt;th style=&#34;text-align: left&#34;&gt;Type&lt;/th&gt;
              &lt;th style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;bucketName&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;string&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;Name of the bucket to upload the object to.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;objectKey&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;string&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;Name of the uploaded object.&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;h3 id=&#34;returns&#34;&gt;Returns&lt;/h3&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th style=&#34;text-align: left&#34;&gt;Type&lt;/th&gt;
              &lt;th style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;Promise&amp;lt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/jslib/aws/s3client/s3multipartupload/&#34;&gt;S3MultipartUpload&lt;/a&gt;&amp;gt;&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;A Promise that fulfills with a 
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/jslib/aws/s3client/s3multipartupload/&#34;&gt;S3MultipartUpload&lt;/a&gt; representing a S3 Multipart Upload.&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;h3 id=&#34;example&#34;&gt;Example&lt;/h3&gt;
&lt;!-- md-k6:skip --&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;JavaScript&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-javascript&#34;&gt;import {
  AWSConfig,
  S3Client,
} from &amp;#39;https://jslib.k6.io/aws/0.14.0/s3.js&amp;#39;;

const awsConfig = new AWSConfig({
  region: __ENV.AWS_REGION,
  accessKeyId: __ENV.AWS_ACCESS_KEY_ID,
  secretAccessKey: __ENV.AWS_SECRET_ACCESS_KEY,
  sessionToken: __ENV.AWS_SESSION_TOKEN,
});

const s3 = new S3Client(awsConfig);

const testBucketName = &amp;#39;test-jslib-aws&amp;#39;;
const testFileKey = &amp;#39;multipart.txt&amp;#39;;

export default async function () {
  // Initialize a multipart upload
  const multipartUpload = await s3.createMultipartUpload(testBucketName, testFileKey);

  // Abort multipart upload
  await s3.abortMultipartUpload(testBucketName, testFileKey, multipartUpload.uploadId);
}&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;em&gt;A k6 script that will create a multipart upload to an S3 bucket&lt;/em&gt;&lt;/p&gt;
]]></content><description>&lt;h1 id="createmultipartupload">createMultipartUpload&lt;/h1>
&lt;p>&lt;code>S3Client.createMultipartUpload&lt;/code> creates a new multipart upload for a given an object key in a bucket.&lt;/p>
&lt;section class="expand-table-wrapper">&lt;div class="button-div">
&lt;button class="expand-table-btn">Expand table&lt;/button>
&lt;/div>&lt;div class="responsive-table-wrapper">
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align: left">Parameter&lt;/th>
&lt;th style="text-align: left">Type&lt;/th>
&lt;th style="text-align: left">Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align: left">bucketName&lt;/td>
&lt;td style="text-align: left">string&lt;/td>
&lt;td style="text-align: left">Name of the bucket to upload the object to.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">objectKey&lt;/td>
&lt;td style="text-align: left">string&lt;/td>
&lt;td style="text-align: left">Name of the uploaded object.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;/div>
&lt;/section>&lt;h3 id="returns">Returns&lt;/h3>
&lt;section class="expand-table-wrapper">&lt;div class="button-div">
&lt;button class="expand-table-btn">Expand table&lt;/button>
&lt;/div>&lt;div class="responsive-table-wrapper">
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align: left">Type&lt;/th>
&lt;th style="text-align: left">Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align: left">Promise&amp;lt;
&lt;a href="/docs/k6/v2.3.x/javascript-api/jslib/aws/s3client/s3multipartupload/">S3MultipartUpload&lt;/a>&amp;gt;&lt;/td>
&lt;td style="text-align: left">A Promise that fulfills with a
&lt;a href="/docs/k6/v2.3.x/javascript-api/jslib/aws/s3client/s3multipartupload/">S3MultipartUpload&lt;/a> representing a S3 Multipart Upload.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;/div>
&lt;/section>&lt;h3 id="example">Example&lt;/h3>
&lt;!-- md-k6:skip -->
&lt;div class="code-snippet ">&lt;div class="lang-toolbar">
&lt;span class="lang-toolbar__item lang-toolbar__item-active">JavaScript&lt;/span>
&lt;span class="code-clipboard">
&lt;button x-data="app_code_snippet()" x-init="init()" @click="copy()">
&lt;img class="code-clipboard__icon" src="/media/images/icons/icon-copy-small-2.svg" alt="Copy code to clipboard" width="14" height="13">
&lt;span>Copy&lt;/span>
&lt;/button>
&lt;/span>
&lt;div class="lang-toolbar__border">&lt;/div>
&lt;/div>&lt;div class="code-snippet ">
&lt;pre data-expanded="false">&lt;code class="language-javascript">import {
AWSConfig,
S3Client,
} from &amp;#39;https://jslib.k6.io/aws/0.14.0/s3.js&amp;#39;;
const awsConfig = new AWSConfig({
region: __ENV.AWS_REGION,
accessKeyId: __ENV.AWS_ACCESS_KEY_ID,
secretAccessKey: __ENV.AWS_SECRET_ACCESS_KEY,
sessionToken: __ENV.AWS_SESSION_TOKEN,
});
const s3 = new S3Client(awsConfig);
const testBucketName = &amp;#39;test-jslib-aws&amp;#39;;
const testFileKey = &amp;#39;multipart.txt&amp;#39;;
export default async function () {
// Initialize a multipart upload
const multipartUpload = await s3.createMultipartUpload(testBucketName, testFileKey);
// Abort multipart upload
await s3.abortMultipartUpload(testBucketName, testFileKey, multipartUpload.uploadId);
}&lt;/code>&lt;/pre>
&lt;/div>
&lt;/div>
&lt;p>&lt;em>A k6 script that will create a multipart upload to an S3 bucket&lt;/em>&lt;/p></description></item><item><title>deleteObject</title><link>https://grafana.com/docs/k6/v2.3.x/javascript-api/jslib/aws/s3client/deleteobject/</link><pubDate>Mon, 21 Sep 2026 15:16:28 +0000</pubDate><guid>https://grafana.com/docs/k6/v2.3.x/javascript-api/jslib/aws/s3client/deleteobject/</guid><content><![CDATA[&lt;h1 id=&#34;deleteobject&#34;&gt;deleteObject&lt;/h1&gt;
&lt;p&gt;&lt;code&gt;S3Client.deleteObject&lt;/code&gt; deletes an object from a bucket.&lt;/p&gt;
&lt;h3 id=&#34;parameters&#34;&gt;Parameters&lt;/h3&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th style=&#34;text-align: left&#34;&gt;Parameter&lt;/th&gt;
              &lt;th style=&#34;text-align: left&#34;&gt;Type&lt;/th&gt;
              &lt;th style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;bucketName&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;string&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;Name of the bucket to delete the object from.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;objectKey&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;string&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;Name of the object to delete.&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;h3 id=&#34;returns&#34;&gt;Returns&lt;/h3&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th style=&#34;text-align: left&#34;&gt;Type&lt;/th&gt;
              &lt;th style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;Promise&amp;lt;void&amp;gt;&lt;/code&gt;&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;A promise that fulfills when the object has been deleted from S3.&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;h3 id=&#34;example&#34;&gt;Example&lt;/h3&gt;
&lt;!-- md-k6:skip --&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;JavaScript&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-javascript&#34;&gt;import exec from &amp;#39;k6/execution&amp;#39;;

import {
  AWSConfig,
  S3Client,
} from &amp;#39;https://jslib.k6.io/aws/0.14.0/s3.js&amp;#39;;

const awsConfig = new AWSConfig({
  region: __ENV.AWS_REGION,
  accessKeyId: __ENV.AWS_ACCESS_KEY_ID,
  secretAccessKey: __ENV.AWS_SECRET_ACCESS_KEY,
});

const s3 = new S3Client(awsConfig);
const testBucketName = &amp;#39;test-jslib-aws&amp;#39;;
const testFileKey = &amp;#39;bonjour.txt&amp;#39;;

export default async function () {
  // Let&amp;#39;s delete our test object
  await s3.deleteObject(testBucketName, testFileKey);

  // And make sure it was indeed deleted
  const objects = await s3.listObjects();
  if (objects.filter((o) =&amp;gt; o.name === testBucketName).length != 0) {
    exec.test.abort();
  }
}&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;em&gt;A k6 script that will delete an object from a S3 bucket&lt;/em&gt;&lt;/p&gt;
]]></content><description>&lt;h1 id="deleteobject">deleteObject&lt;/h1>
&lt;p>&lt;code>S3Client.deleteObject&lt;/code> deletes an object from a bucket.&lt;/p>
&lt;h3 id="parameters">Parameters&lt;/h3>
&lt;section class="expand-table-wrapper">&lt;div class="button-div">
&lt;button class="expand-table-btn">Expand table&lt;/button>
&lt;/div>&lt;div class="responsive-table-wrapper">
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align: left">Parameter&lt;/th>
&lt;th style="text-align: left">Type&lt;/th>
&lt;th style="text-align: left">Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align: left">bucketName&lt;/td>
&lt;td style="text-align: left">string&lt;/td>
&lt;td style="text-align: left">Name of the bucket to delete the object from.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">objectKey&lt;/td>
&lt;td style="text-align: left">string&lt;/td>
&lt;td style="text-align: left">Name of the object to delete.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;/div>
&lt;/section>&lt;h3 id="returns">Returns&lt;/h3>
&lt;section class="expand-table-wrapper">&lt;div class="button-div">
&lt;button class="expand-table-btn">Expand table&lt;/button>
&lt;/div>&lt;div class="responsive-table-wrapper">
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align: left">Type&lt;/th>
&lt;th style="text-align: left">Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align: left">&lt;code>Promise&amp;lt;void&amp;gt;&lt;/code>&lt;/td>
&lt;td style="text-align: left">A promise that fulfills when the object has been deleted from S3.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;/div>
&lt;/section>&lt;h3 id="example">Example&lt;/h3>
&lt;!-- md-k6:skip -->
&lt;div class="code-snippet ">&lt;div class="lang-toolbar">
&lt;span class="lang-toolbar__item lang-toolbar__item-active">JavaScript&lt;/span>
&lt;span class="code-clipboard">
&lt;button x-data="app_code_snippet()" x-init="init()" @click="copy()">
&lt;img class="code-clipboard__icon" src="/media/images/icons/icon-copy-small-2.svg" alt="Copy code to clipboard" width="14" height="13">
&lt;span>Copy&lt;/span>
&lt;/button>
&lt;/span>
&lt;div class="lang-toolbar__border">&lt;/div>
&lt;/div>&lt;div class="code-snippet ">
&lt;pre data-expanded="false">&lt;code class="language-javascript">import exec from &amp;#39;k6/execution&amp;#39;;
import {
AWSConfig,
S3Client,
} from &amp;#39;https://jslib.k6.io/aws/0.14.0/s3.js&amp;#39;;
const awsConfig = new AWSConfig({
region: __ENV.AWS_REGION,
accessKeyId: __ENV.AWS_ACCESS_KEY_ID,
secretAccessKey: __ENV.AWS_SECRET_ACCESS_KEY,
});
const s3 = new S3Client(awsConfig);
const testBucketName = &amp;#39;test-jslib-aws&amp;#39;;
const testFileKey = &amp;#39;bonjour.txt&amp;#39;;
export default async function () {
// Let&amp;#39;s delete our test object
await s3.deleteObject(testBucketName, testFileKey);
// And make sure it was indeed deleted
const objects = await s3.listObjects();
if (objects.filter((o) =&amp;gt; o.name === testBucketName).length != 0) {
exec.test.abort();
}
}&lt;/code>&lt;/pre>
&lt;/div>
&lt;/div>
&lt;p>&lt;em>A k6 script that will delete an object from a S3 bucket&lt;/em>&lt;/p></description></item><item><title>getObject</title><link>https://grafana.com/docs/k6/v2.3.x/javascript-api/jslib/aws/s3client/getobject/</link><pubDate>Mon, 21 Sep 2026 15:16:28 +0000</pubDate><guid>https://grafana.com/docs/k6/v2.3.x/javascript-api/jslib/aws/s3client/getobject/</guid><content><![CDATA[&lt;h1 id=&#34;getobject&#34;&gt;getObject&lt;/h1&gt;
&lt;p&gt;&lt;code&gt;S3Client.getObject&lt;/code&gt; downloads an object from a bucket.&lt;/p&gt;
&lt;p&gt;As a default, the object&amp;rsquo;s data will be treated as a string. In order to treat the object&amp;rsquo;s data as binary content, and
receive the data as an &lt;code&gt;ArrayBuffer&lt;/code&gt;, you can pass &lt;a href=&#34;#parameters&#34;&gt;&lt;code&gt;additionalHeaders&lt;/code&gt;&lt;/a&gt; to &lt;code&gt;getObject&lt;/code&gt;, with the &lt;code&gt;Accept&lt;/code&gt; header set to
&lt;code&gt;application/octet-stream&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id=&#34;parameters&#34;&gt;Parameters&lt;/h3&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th style=&#34;text-align: left&#34;&gt;Parameter&lt;/th&gt;
              &lt;th style=&#34;text-align: left&#34;&gt;Type&lt;/th&gt;
              &lt;th style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;bucketName&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;string&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;Name of the bucket to fetch the object from.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;objectKey&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;string&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;Name of the object to download.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;additionalHeaders&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;Object&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;Additional headers to send with the request.&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;h3 id=&#34;returns&#34;&gt;Returns&lt;/h3&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th style=&#34;text-align: left&#34;&gt;Type&lt;/th&gt;
              &lt;th style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;Promise&amp;lt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/jslib/aws/s3client/object/&#34;&gt;Object&lt;/a&gt;&amp;gt;&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;A Promise that fulfills with an 
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/jslib/aws/s3client/object/&#34;&gt;Object&lt;/a&gt; describing and holding the downloaded content.&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;h3 id=&#34;example&#34;&gt;Example&lt;/h3&gt;
&lt;h4 id=&#34;downloading-a-text-file-from-aws-s3&#34;&gt;Downloading a text file from AWS S3&lt;/h4&gt;
&lt;!-- md-k6:skip --&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;JavaScript&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-javascript&#34;&gt;import exec from &amp;#39;k6/execution&amp;#39;;

import {
  AWSConfig,
  S3Client,
} from &amp;#39;https://jslib.k6.io/aws/0.14.0/s3.js&amp;#39;;

const awsConfig = new AWSConfig({
  region: __ENV.AWS_REGION,
  accessKeyId: __ENV.AWS_ACCESS_KEY_ID,
  secretAccessKey: __ENV.AWS_SECRET_ACCESS_KEY,
});

const s3 = new S3Client(awsConfig);
const testBucketName = &amp;#39;test-jslib-aws&amp;#39;;
const testFileKey = &amp;#39;bonjour.txt&amp;#39;;

export default async function () {
  const objects = await s3.listObjects(testBucketName);

  // If our test object does not exist, abort the execution.
  if (objects.filter((o) =&amp;gt; o.key === testFileKey).length == 0) {
    exec.test.abort();
  }

  // Let&amp;#39;s download our test object and print its content
  const object = await s3.getObject(testBucketName, testFileKey);
  console.log(JSON.stringify(object));
}&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;em&gt;A k6 script that will download an object from a bucket&lt;/em&gt;&lt;/p&gt;
&lt;h4 id=&#34;downloading-a-binary-file-from-aws-s3&#34;&gt;Downloading a binary file from AWS S3&lt;/h4&gt;
&lt;!-- md-k6:skip --&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;JavaScript&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-javascript&#34;&gt;import exec from &amp;#39;k6/execution&amp;#39;;

import {
  AWSConfig,
  S3Client,
} from &amp;#39;https://jslib.k6.io/aws/0.14.0/s3.js&amp;#39;;

const awsConfig = new AWSConfig({
  region: __ENV.AWS_REGION,
  accessKeyId: __ENV.AWS_ACCESS_KEY_ID,
  secretAccessKey: __ENV.AWS_SECRET_ACCESS_KEY,
});

const s3 = new S3Client(awsConfig);
const testBucketName = &amp;#39;test-jslib-aws&amp;#39;;
const testFileKey = &amp;#39;quick.pdf&amp;#39;;

export default async function () {
  // Download an object from S3, and require from the `getObject` operation
  // to treat it as a binary content&amp;#39;s file, and return an Object who&amp;#39;s data
  // parameter is an ArrayBuffer.
  const s3Object = await s3.getObject(testBucketName, testFileKey, {
    Accept: &amp;#39;application/octet-stream&amp;#39;,
  });

  console.log(`Successfully downloaded a binary file of size ${s3Object.data.byteLength} bytes`);
}&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;em&gt;A k6 script that will download a binary object from a bucket&lt;/em&gt;&lt;/p&gt;
]]></content><description>&lt;h1 id="getobject">getObject&lt;/h1>
&lt;p>&lt;code>S3Client.getObject&lt;/code> downloads an object from a bucket.&lt;/p>
&lt;p>As a default, the object&amp;rsquo;s data will be treated as a string. In order to treat the object&amp;rsquo;s data as binary content, and
receive the data as an &lt;code>ArrayBuffer&lt;/code>, you can pass &lt;a href="#parameters">&lt;code>additionalHeaders&lt;/code>&lt;/a> to &lt;code>getObject&lt;/code>, with the &lt;code>Accept&lt;/code> header set to
&lt;code>application/octet-stream&lt;/code>.&lt;/p></description></item><item><title>listBuckets</title><link>https://grafana.com/docs/k6/v2.3.x/javascript-api/jslib/aws/s3client/listbuckets/</link><pubDate>Mon, 21 Sep 2026 15:16:28 +0000</pubDate><guid>https://grafana.com/docs/k6/v2.3.x/javascript-api/jslib/aws/s3client/listbuckets/</guid><content><![CDATA[&lt;h1 id=&#34;listbuckets&#34;&gt;listBuckets&lt;/h1&gt;
&lt;p&gt;&lt;code&gt;S3Client.listBuckets()&lt;/code&gt; lists the buckets the authenticated user has access to in the region set by the &lt;code&gt;S3Client&lt;/code&gt; instance&amp;rsquo;s configuration.&lt;/p&gt;
&lt;h3 id=&#34;returns&#34;&gt;Returns&lt;/h3&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th style=&#34;text-align: left&#34;&gt;Type&lt;/th&gt;
              &lt;th style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;Promise&amp;lt;Array&amp;lt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/jslib/aws/s3client/bucket/&#34;&gt;Bucket&lt;/a&gt;&amp;raquo;&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;A Promise that fulfills with an array of 
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/jslib/aws/s3client/bucket/&#34;&gt;Bucket&lt;/a&gt; objects.&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;h3 id=&#34;example&#34;&gt;Example&lt;/h3&gt;
&lt;!-- md-k6:skip --&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;JavaScript&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-javascript&#34;&gt;import exec from &amp;#39;k6/execution&amp;#39;;

import {
  AWSConfig,
  S3Client,
} from &amp;#39;https://jslib.k6.io/aws/0.14.0/s3.js&amp;#39;;

const awsConfig = new AWSConfig({
  region: __ENV.AWS_REGION,
  accessKeyId: __ENV.AWS_ACCESS_KEY_ID,
  secretAccessKey: __ENV.AWS_SECRET_ACCESS_KEY,
});

const s3 = new S3Client(awsConfig);
const testBucketName = &amp;#39;test-jslib-aws&amp;#39;;

export default async function () {
  // List the buckets the AWS authentication configuration
  // gives us access to.
  const buckets = await s3.listBuckets();

  // If our test bucket does not exist, abort the execution.
  if (buckets.filter((b) =&amp;gt; b.name === testBucketName).length == 0) {
    exec.test.abort();
  }

  // ... work with the bucket&amp;#39;s content
}&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
]]></content><description>&lt;h1 id="listbuckets">listBuckets&lt;/h1>
&lt;p>&lt;code>S3Client.listBuckets()&lt;/code> lists the buckets the authenticated user has access to in the region set by the &lt;code>S3Client&lt;/code> instance&amp;rsquo;s configuration.&lt;/p>
&lt;h3 id="returns">Returns&lt;/h3>
&lt;section class="expand-table-wrapper">&lt;div class="button-div">
&lt;button class="expand-table-btn">Expand table&lt;/button>
&lt;/div>&lt;div class="responsive-table-wrapper">
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align: left">Type&lt;/th>
&lt;th style="text-align: left">Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align: left">Promise&amp;lt;Array&amp;lt;
&lt;a href="/docs/k6/v2.3.x/javascript-api/jslib/aws/s3client/bucket/">Bucket&lt;/a>&amp;raquo;&lt;/td>
&lt;td style="text-align: left">A Promise that fulfills with an array of
&lt;a href="/docs/k6/v2.3.x/javascript-api/jslib/aws/s3client/bucket/">Bucket&lt;/a> objects.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;/div>
&lt;/section>&lt;h3 id="example">Example&lt;/h3>
&lt;!-- md-k6:skip -->
&lt;div class="code-snippet ">&lt;div class="lang-toolbar">
&lt;span class="lang-toolbar__item lang-toolbar__item-active">JavaScript&lt;/span>
&lt;span class="code-clipboard">
&lt;button x-data="app_code_snippet()" x-init="init()" @click="copy()">
&lt;img class="code-clipboard__icon" src="/media/images/icons/icon-copy-small-2.svg" alt="Copy code to clipboard" width="14" height="13">
&lt;span>Copy&lt;/span>
&lt;/button>
&lt;/span>
&lt;div class="lang-toolbar__border">&lt;/div>
&lt;/div>&lt;div class="code-snippet ">
&lt;pre data-expanded="false">&lt;code class="language-javascript">import exec from &amp;#39;k6/execution&amp;#39;;
import {
AWSConfig,
S3Client,
} from &amp;#39;https://jslib.k6.io/aws/0.14.0/s3.js&amp;#39;;
const awsConfig = new AWSConfig({
region: __ENV.AWS_REGION,
accessKeyId: __ENV.AWS_ACCESS_KEY_ID,
secretAccessKey: __ENV.AWS_SECRET_ACCESS_KEY,
});
const s3 = new S3Client(awsConfig);
const testBucketName = &amp;#39;test-jslib-aws&amp;#39;;
export default async function () {
// List the buckets the AWS authentication configuration
// gives us access to.
const buckets = await s3.listBuckets();
// If our test bucket does not exist, abort the execution.
if (buckets.filter((b) =&amp;gt; b.name === testBucketName).length == 0) {
exec.test.abort();
}
// ... work with the bucket&amp;#39;s content
}&lt;/code>&lt;/pre>
&lt;/div>
&lt;/div></description></item><item><title>listObjects</title><link>https://grafana.com/docs/k6/v2.3.x/javascript-api/jslib/aws/s3client/listobjects/</link><pubDate>Mon, 21 Sep 2026 15:16:28 +0000</pubDate><guid>https://grafana.com/docs/k6/v2.3.x/javascript-api/jslib/aws/s3client/listobjects/</guid><content><![CDATA[&lt;h1 id=&#34;listobjects&#34;&gt;listObjects&lt;/h1&gt;
&lt;p&gt;&lt;code&gt;S3Client.listObjects()&lt;/code&gt; lists the objects contained in a bucket.&lt;/p&gt;
&lt;h3 id=&#34;parameters&#34;&gt;Parameters&lt;/h3&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th style=&#34;text-align: left&#34;&gt;Parameter&lt;/th&gt;
              &lt;th style=&#34;text-align: left&#34;&gt;Type&lt;/th&gt;
              &lt;th style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;bucketName&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;string&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;Name of the bucket to fetch the object from.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;prefix (optional)&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;string&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;Limits the response to keys that begin with the specified prefix.&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;h3 id=&#34;returns&#34;&gt;Returns&lt;/h3&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th style=&#34;text-align: left&#34;&gt;Type&lt;/th&gt;
              &lt;th style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;Promise&amp;lt;Array&amp;lt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/jslib/aws/s3client/object/&#34;&gt;Object&lt;/a&gt;&amp;raquo;&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;A Promise that fulfills with an array of 
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/jslib/aws/s3client/object/&#34;&gt;Object&lt;/a&gt; objects.&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;h3 id=&#34;example&#34;&gt;Example&lt;/h3&gt;
&lt;!-- md-k6:skip --&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;JavaScript&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-javascript&#34;&gt;import exec from &amp;#39;k6/execution&amp;#39;;

import {
  AWSConfig,
  S3Client,
} from &amp;#39;https://jslib.k6.io/aws/0.14.0/s3.js&amp;#39;;

const awsConfig = new AWSConfig({
  region: __ENV.AWS_REGION,
  accessKeyId: __ENV.AWS_ACCESS_KEY_ID,
  secretAccessKey: __ENV.AWS_SECRET_ACCESS_KEY,
});

const s3 = new S3Client(awsConfig);
const testBucketName = &amp;#39;test-jslib-aws&amp;#39;;
const testFileKey = &amp;#39;bonjour.txt&amp;#39;;

export default async function () {
  // List our bucket&amp;#39;s objects
  const objects = await s3.listObjects(testBucketName);

  // If our test object does not exist, abort the execution.
  if (objects.filter((o) =&amp;gt; o.key === testFileKey).length == 0) {
    exec.test.abort();
  }

  // ... work with the bucket&amp;#39;s objects
  console.log(JSON.stringify(objects));
}&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
]]></content><description>&lt;h1 id="listobjects">listObjects&lt;/h1>
&lt;p>&lt;code>S3Client.listObjects()&lt;/code> lists the objects contained in a bucket.&lt;/p>
&lt;h3 id="parameters">Parameters&lt;/h3>
&lt;section class="expand-table-wrapper">&lt;div class="button-div">
&lt;button class="expand-table-btn">Expand table&lt;/button>
&lt;/div>&lt;div class="responsive-table-wrapper">
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align: left">Parameter&lt;/th>
&lt;th style="text-align: left">Type&lt;/th>
&lt;th style="text-align: left">Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align: left">bucketName&lt;/td>
&lt;td style="text-align: left">string&lt;/td>
&lt;td style="text-align: left">Name of the bucket to fetch the object from.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">prefix (optional)&lt;/td>
&lt;td style="text-align: left">string&lt;/td>
&lt;td style="text-align: left">Limits the response to keys that begin with the specified prefix.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;/div>
&lt;/section>&lt;h3 id="returns">Returns&lt;/h3>
&lt;section class="expand-table-wrapper">&lt;div class="button-div">
&lt;button class="expand-table-btn">Expand table&lt;/button>
&lt;/div>&lt;div class="responsive-table-wrapper">
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align: left">Type&lt;/th>
&lt;th style="text-align: left">Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align: left">Promise&amp;lt;Array&amp;lt;
&lt;a href="/docs/k6/v2.3.x/javascript-api/jslib/aws/s3client/object/">Object&lt;/a>&amp;raquo;&lt;/td>
&lt;td style="text-align: left">A Promise that fulfills with an array of
&lt;a href="/docs/k6/v2.3.x/javascript-api/jslib/aws/s3client/object/">Object&lt;/a> objects.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;/div>
&lt;/section>&lt;h3 id="example">Example&lt;/h3>
&lt;!-- md-k6:skip -->
&lt;div class="code-snippet ">&lt;div class="lang-toolbar">
&lt;span class="lang-toolbar__item lang-toolbar__item-active">JavaScript&lt;/span>
&lt;span class="code-clipboard">
&lt;button x-data="app_code_snippet()" x-init="init()" @click="copy()">
&lt;img class="code-clipboard__icon" src="/media/images/icons/icon-copy-small-2.svg" alt="Copy code to clipboard" width="14" height="13">
&lt;span>Copy&lt;/span>
&lt;/button>
&lt;/span>
&lt;div class="lang-toolbar__border">&lt;/div>
&lt;/div>&lt;div class="code-snippet ">
&lt;pre data-expanded="false">&lt;code class="language-javascript">import exec from &amp;#39;k6/execution&amp;#39;;
import {
AWSConfig,
S3Client,
} from &amp;#39;https://jslib.k6.io/aws/0.14.0/s3.js&amp;#39;;
const awsConfig = new AWSConfig({
region: __ENV.AWS_REGION,
accessKeyId: __ENV.AWS_ACCESS_KEY_ID,
secretAccessKey: __ENV.AWS_SECRET_ACCESS_KEY,
});
const s3 = new S3Client(awsConfig);
const testBucketName = &amp;#39;test-jslib-aws&amp;#39;;
const testFileKey = &amp;#39;bonjour.txt&amp;#39;;
export default async function () {
// List our bucket&amp;#39;s objects
const objects = await s3.listObjects(testBucketName);
// If our test object does not exist, abort the execution.
if (objects.filter((o) =&amp;gt; o.key === testFileKey).length == 0) {
exec.test.abort();
}
// ... work with the bucket&amp;#39;s objects
console.log(JSON.stringify(objects));
}&lt;/code>&lt;/pre>
&lt;/div>
&lt;/div></description></item><item><title>putObject</title><link>https://grafana.com/docs/k6/v2.3.x/javascript-api/jslib/aws/s3client/putobject/</link><pubDate>Mon, 21 Sep 2026 15:16:28 +0000</pubDate><guid>https://grafana.com/docs/k6/v2.3.x/javascript-api/jslib/aws/s3client/putobject/</guid><content><![CDATA[&lt;h1 id=&#34;putobject&#34;&gt;putObject&lt;/h1&gt;
&lt;p&gt;&lt;code&gt;S3Client.putObject&lt;/code&gt; uploads an object to a bucket.&lt;/p&gt;
&lt;h3 id=&#34;parameters&#34;&gt;Parameters&lt;/h3&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th style=&#34;text-align: left&#34;&gt;Parameter&lt;/th&gt;
              &lt;th style=&#34;text-align: left&#34;&gt;Type&lt;/th&gt;
              &lt;th style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;bucketName&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;string&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;Name of the bucket to upload the object to.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;objectKey&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;string&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;Name of the uploaded object.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;data&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;string | ArrayBuffer&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;Content of the object to upload.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;params&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;&lt;a href=&#34;#putobjectparams&#34;&gt;PutObjectParams&lt;/a&gt; (optional)&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;Options for the request.&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;h4 id=&#34;putobjectparams&#34;&gt;PutObjectParams&lt;/h4&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th style=&#34;text-align: left&#34;&gt;Name&lt;/th&gt;
              &lt;th style=&#34;text-align: left&#34;&gt;Type&lt;/th&gt;
              &lt;th style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;contentDisposition&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;string (optional)&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;Specifies presentational information for the object. For more information, see &lt;a href=&#34;https://tools.ietf.org/html/rfc6266&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;RFC 6266&lt;/a&gt;.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;contentEncoding&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;string (optional)&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;Specifies what content encodings have been applied to the object and thus what decoding mechanisms must be applied to obtain the media-type referenced by the Content-Type header field. For more information, see &lt;a href=&#34;https://tools.ietf.org/html/rfc2616&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;RFC 2616&lt;/a&gt;.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;contentLength&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;number (optional)&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;Size of the body in bytes. This parameter is useful when the size of the body cannot be determined automatically.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;contentMD5&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;string (optional)&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;The base64-encoded 128-bit MD5 digest of the message (without the headers) according to RFC 1864. This header can be used as a message integrity check to verify that the received message is identical to the message that was sent.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;contentType&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;string (optional)&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;A standard MIME type describing the format of the object data. For more information, see &lt;a href=&#34;https://tools.ietf.org/html/rfc2616&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;RFC 2616&lt;/a&gt;.&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;h3 id=&#34;returns&#34;&gt;Returns&lt;/h3&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th style=&#34;text-align: left&#34;&gt;Type&lt;/th&gt;
              &lt;th style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;Promise&amp;lt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/jslib/aws/s3client/s3uploadedobject/&#34;&gt;S3UploadedObject&lt;/a&gt;&amp;gt;&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;A Promise that fulfills with an 
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/jslib/aws/s3client/s3uploadedobject/&#34;&gt;S3UploadedObject&lt;/a&gt; containing metadata about the uploaded object, including ETag and optional checksums.&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;h3 id=&#34;example&#34;&gt;Example&lt;/h3&gt;
&lt;!-- md-k6:skip --&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;JavaScript&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-javascript&#34;&gt;import {
  AWSConfig,
  S3Client,
} from &amp;#39;https://jslib.k6.io/aws/0.14.0/s3.js&amp;#39;;

const awsConfig = new AWSConfig({
  region: __ENV.AWS_REGION,
  accessKeyId: __ENV.AWS_ACCESS_KEY_ID,
  secretAccessKey: __ENV.AWS_SECRET_ACCESS_KEY,
});

const s3 = new S3Client(awsConfig);
const testBucketName = &amp;#39;test-jslib-aws&amp;#39;;
const testFileKey = &amp;#39;bonjour.txt&amp;#39;;
const testFile = open(&amp;#39;./bonjour.txt&amp;#39;, &amp;#39;r&amp;#39;);

export default async function () {
  // Let&amp;#39;s upload our test file to the bucket
  const uploadResult = await s3.putObject(testBucketName, testFileKey, testFile, {
    contentType: &amp;#39;text/plain&amp;#39;,
    contentLength: testFile.length,
  });

  // Access the upload metadata
  console.log(&amp;#39;Upload successful! ETag:&amp;#39;, uploadResult.eTag);

  if (uploadResult.size) {
    console.log(&amp;#39;Object size:&amp;#39;, uploadResult.size);
  }

  // Check if checksums are available
  if (uploadResult.sha256) {
    console.log(&amp;#39;SHA256 checksum:&amp;#39;, uploadResult.sha256);
  }

  // And let&amp;#39;s redownload it to verify it&amp;#39;s correct
  const obj = await s3.getObject(testBucketName, testFileKey);
  console.log(JSON.stringify(obj));
}&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;em&gt;A k6 script that will upload an object to a S3 bucket&lt;/em&gt;&lt;/p&gt;
]]></content><description>&lt;h1 id="putobject">putObject&lt;/h1>
&lt;p>&lt;code>S3Client.putObject&lt;/code> uploads an object to a bucket.&lt;/p>
&lt;h3 id="parameters">Parameters&lt;/h3>
&lt;section class="expand-table-wrapper">&lt;div class="button-div">
&lt;button class="expand-table-btn">Expand table&lt;/button>
&lt;/div>&lt;div class="responsive-table-wrapper">
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align: left">Parameter&lt;/th>
&lt;th style="text-align: left">Type&lt;/th>
&lt;th style="text-align: left">Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align: left">bucketName&lt;/td>
&lt;td style="text-align: left">string&lt;/td>
&lt;td style="text-align: left">Name of the bucket to upload the object to.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">objectKey&lt;/td>
&lt;td style="text-align: left">string&lt;/td>
&lt;td style="text-align: left">Name of the uploaded object.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">data&lt;/td>
&lt;td style="text-align: left">string | ArrayBuffer&lt;/td>
&lt;td style="text-align: left">Content of the object to upload.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">params&lt;/td>
&lt;td style="text-align: left">&lt;a href="#putobjectparams">PutObjectParams&lt;/a> (optional)&lt;/td>
&lt;td style="text-align: left">Options for the request.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;/div>
&lt;/section>&lt;h4 id="putobjectparams">PutObjectParams&lt;/h4>
&lt;section class="expand-table-wrapper">&lt;div class="button-div">
&lt;button class="expand-table-btn">Expand table&lt;/button>
&lt;/div>&lt;div class="responsive-table-wrapper">
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align: left">Name&lt;/th>
&lt;th style="text-align: left">Type&lt;/th>
&lt;th style="text-align: left">Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align: left">contentDisposition&lt;/td>
&lt;td style="text-align: left">string (optional)&lt;/td>
&lt;td style="text-align: left">Specifies presentational information for the object. For more information, see &lt;a href="https://tools.ietf.org/html/rfc6266" target="_blank" rel="noopener noreferrer">RFC 6266&lt;/a>.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">contentEncoding&lt;/td>
&lt;td style="text-align: left">string (optional)&lt;/td>
&lt;td style="text-align: left">Specifies what content encodings have been applied to the object and thus what decoding mechanisms must be applied to obtain the media-type referenced by the Content-Type header field. For more information, see &lt;a href="https://tools.ietf.org/html/rfc2616" target="_blank" rel="noopener noreferrer">RFC 2616&lt;/a>.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">contentLength&lt;/td>
&lt;td style="text-align: left">number (optional)&lt;/td>
&lt;td style="text-align: left">Size of the body in bytes. This parameter is useful when the size of the body cannot be determined automatically.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">contentMD5&lt;/td>
&lt;td style="text-align: left">string (optional)&lt;/td>
&lt;td style="text-align: left">The base64-encoded 128-bit MD5 digest of the message (without the headers) according to RFC 1864. This header can be used as a message integrity check to verify that the received message is identical to the message that was sent.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">contentType&lt;/td>
&lt;td style="text-align: left">string (optional)&lt;/td>
&lt;td style="text-align: left">A standard MIME type describing the format of the object data. For more information, see &lt;a href="https://tools.ietf.org/html/rfc2616" target="_blank" rel="noopener noreferrer">RFC 2616&lt;/a>.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;/div>
&lt;/section>&lt;h3 id="returns">Returns&lt;/h3>
&lt;section class="expand-table-wrapper">&lt;div class="button-div">
&lt;button class="expand-table-btn">Expand table&lt;/button>
&lt;/div>&lt;div class="responsive-table-wrapper">
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align: left">Type&lt;/th>
&lt;th style="text-align: left">Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align: left">Promise&amp;lt;
&lt;a href="/docs/k6/v2.3.x/javascript-api/jslib/aws/s3client/s3uploadedobject/">S3UploadedObject&lt;/a>&amp;gt;&lt;/td>
&lt;td style="text-align: left">A Promise that fulfills with an
&lt;a href="/docs/k6/v2.3.x/javascript-api/jslib/aws/s3client/s3uploadedobject/">S3UploadedObject&lt;/a> containing metadata about the uploaded object, including ETag and optional checksums.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;/div>
&lt;/section>&lt;h3 id="example">Example&lt;/h3>
&lt;!-- md-k6:skip -->
&lt;div class="code-snippet ">&lt;div class="lang-toolbar">
&lt;span class="lang-toolbar__item lang-toolbar__item-active">JavaScript&lt;/span>
&lt;span class="code-clipboard">
&lt;button x-data="app_code_snippet()" x-init="init()" @click="copy()">
&lt;img class="code-clipboard__icon" src="/media/images/icons/icon-copy-small-2.svg" alt="Copy code to clipboard" width="14" height="13">
&lt;span>Copy&lt;/span>
&lt;/button>
&lt;/span>
&lt;div class="lang-toolbar__border">&lt;/div>
&lt;/div>&lt;div class="code-snippet ">
&lt;pre data-expanded="false">&lt;code class="language-javascript">import {
AWSConfig,
S3Client,
} from &amp;#39;https://jslib.k6.io/aws/0.14.0/s3.js&amp;#39;;
const awsConfig = new AWSConfig({
region: __ENV.AWS_REGION,
accessKeyId: __ENV.AWS_ACCESS_KEY_ID,
secretAccessKey: __ENV.AWS_SECRET_ACCESS_KEY,
});
const s3 = new S3Client(awsConfig);
const testBucketName = &amp;#39;test-jslib-aws&amp;#39;;
const testFileKey = &amp;#39;bonjour.txt&amp;#39;;
const testFile = open(&amp;#39;./bonjour.txt&amp;#39;, &amp;#39;r&amp;#39;);
export default async function () {
// Let&amp;#39;s upload our test file to the bucket
const uploadResult = await s3.putObject(testBucketName, testFileKey, testFile, {
contentType: &amp;#39;text/plain&amp;#39;,
contentLength: testFile.length,
});
// Access the upload metadata
console.log(&amp;#39;Upload successful! ETag:&amp;#39;, uploadResult.eTag);
if (uploadResult.size) {
console.log(&amp;#39;Object size:&amp;#39;, uploadResult.size);
}
// Check if checksums are available
if (uploadResult.sha256) {
console.log(&amp;#39;SHA256 checksum:&amp;#39;, uploadResult.sha256);
}
// And let&amp;#39;s redownload it to verify it&amp;#39;s correct
const obj = await s3.getObject(testBucketName, testFileKey);
console.log(JSON.stringify(obj));
}&lt;/code>&lt;/pre>
&lt;/div>
&lt;/div>
&lt;p>&lt;em>A k6 script that will upload an object to a S3 bucket&lt;/em>&lt;/p></description></item><item><title>uploadPart</title><link>https://grafana.com/docs/k6/v2.3.x/javascript-api/jslib/aws/s3client/uploadpart/</link><pubDate>Mon, 21 Sep 2026 15:16:28 +0000</pubDate><guid>https://grafana.com/docs/k6/v2.3.x/javascript-api/jslib/aws/s3client/uploadpart/</guid><content><![CDATA[&lt;h1 id=&#34;uploadpart&#34;&gt;uploadPart&lt;/h1&gt;
&lt;p&gt;&lt;code&gt;S3Client.uploadPart&lt;/code&gt; uploads a part to multipart upload in a bucket.&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th style=&#34;text-align: left&#34;&gt;Parameter&lt;/th&gt;
              &lt;th style=&#34;text-align: left&#34;&gt;Type&lt;/th&gt;
              &lt;th style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;bucketName&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;string&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;Name of the bucket to upload the object to.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;objectKey&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;string&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;Name of the object to upload.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;uploadId&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;string&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;UploadId of the multipart upload.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;partNumber&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;number&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;The Part number of the Part to upload.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;data&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;string | ArrayBuffer&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;Content of the part to upload.&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;h3 id=&#34;returns&#34;&gt;Returns&lt;/h3&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th style=&#34;text-align: left&#34;&gt;Type&lt;/th&gt;
              &lt;th style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;Promise&amp;lt;
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/jslib/aws/s3client/s3part/&#34;&gt;S3Part&lt;/a&gt;&amp;gt;&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;A Promise that fulfills with a 
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/jslib/aws/s3client/s3part/&#34;&gt;S3Part&lt;/a&gt; representing a S3 Part Upload.&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;h3 id=&#34;example&#34;&gt;Example&lt;/h3&gt;
&lt;!-- md-k6:skip --&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;JavaScript&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-javascript&#34;&gt;import crypto from &amp;#39;k6/crypto&amp;#39;;
import exec from &amp;#39;k6/execution&amp;#39;;

import {
  AWSConfig,
  S3Client,
} from &amp;#39;https://jslib.k6.io/aws/0.14.0/s3.js&amp;#39;;

const awsConfig = new AWSConfig({
  region: __ENV.AWS_REGION,
  accessKeyId: __ENV.AWS_ACCESS_KEY_ID,
  secretAccessKey: __ENV.AWS_SECRET_ACCESS_KEY,
  sessionToken: __ENV.AWS_SESSION_TOKEN,
});

const s3 = new S3Client(awsConfig);

const testBucketName = &amp;#39;test-jslib-aws&amp;#39;;
const testFileKey = &amp;#39;multipart.txt&amp;#39;;

export default async function () {
  // Produce random bytes to upload of size ~12MB, that
  // we will upload in two 6MB parts. This is done as the
  // minimum part size supported by S3 is 5MB.
  const bigFile = crypto.randomBytes(12 * 1024 * 1024);

  // Initialize a multipart upload
  const multipartUpload = await s3.createMultipartUpload(testBucketName, testFileKey);

  // Upload the first part
  const firstPartData = bigFile.slice(0, 6 * 1024 * 1024);
  const firstPart = await s3.uploadPart(
    testBucketName,
    testFileKey,
    multipartUpload.uploadId,
    1,
    firstPartData
  );

  // Upload the second part
  const secondPartData = bigFile.slice(6 * 1024 * 1024, 12 * 1024 * 1024);
  const secondPart = await s3.uploadPart(
    testBucketName,
    testFileKey,
    multipartUpload.uploadId,
    2,
    secondPartData
  );

  // Complete the multipart upload
  await s3.completeMultipartUpload(testBucketName, testFileKey, multipartUpload.uploadId, [
    firstPart,
    secondPart,
  ]);

  // Let&amp;#39;s redownload it verify it&amp;#39;s correct, and delete it
  const obj = await s3.getObject(testBucketName, testFileKey);
  await s3.deleteObject(testBucketName, testFileKey);
}&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;em&gt;A k6 script that will upload a part in a multipart upload to an S3 bucket&lt;/em&gt;&lt;/p&gt;
]]></content><description>&lt;h1 id="uploadpart">uploadPart&lt;/h1>
&lt;p>&lt;code>S3Client.uploadPart&lt;/code> uploads a part to multipart upload in a bucket.&lt;/p>
&lt;section class="expand-table-wrapper">&lt;div class="button-div">
&lt;button class="expand-table-btn">Expand table&lt;/button>
&lt;/div>&lt;div class="responsive-table-wrapper">
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align: left">Parameter&lt;/th>
&lt;th style="text-align: left">Type&lt;/th>
&lt;th style="text-align: left">Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align: left">bucketName&lt;/td>
&lt;td style="text-align: left">string&lt;/td>
&lt;td style="text-align: left">Name of the bucket to upload the object to.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">objectKey&lt;/td>
&lt;td style="text-align: left">string&lt;/td>
&lt;td style="text-align: left">Name of the object to upload.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">uploadId&lt;/td>
&lt;td style="text-align: left">string&lt;/td>
&lt;td style="text-align: left">UploadId of the multipart upload.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">partNumber&lt;/td>
&lt;td style="text-align: left">number&lt;/td>
&lt;td style="text-align: left">The Part number of the Part to upload.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">data&lt;/td>
&lt;td style="text-align: left">string | ArrayBuffer&lt;/td>
&lt;td style="text-align: left">Content of the part to upload.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;/div>
&lt;/section>&lt;h3 id="returns">Returns&lt;/h3>
&lt;section class="expand-table-wrapper">&lt;div class="button-div">
&lt;button class="expand-table-btn">Expand table&lt;/button>
&lt;/div>&lt;div class="responsive-table-wrapper">
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align: left">Type&lt;/th>
&lt;th style="text-align: left">Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align: left">Promise&amp;lt;
&lt;a href="/docs/k6/v2.3.x/javascript-api/jslib/aws/s3client/s3part/">S3Part&lt;/a>&amp;gt;&lt;/td>
&lt;td style="text-align: left">A Promise that fulfills with a
&lt;a href="/docs/k6/v2.3.x/javascript-api/jslib/aws/s3client/s3part/">S3Part&lt;/a> representing a S3 Part Upload.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;/div>
&lt;/section>&lt;h3 id="example">Example&lt;/h3>
&lt;!-- md-k6:skip -->
&lt;div class="code-snippet ">&lt;div class="lang-toolbar">
&lt;span class="lang-toolbar__item lang-toolbar__item-active">JavaScript&lt;/span>
&lt;span class="code-clipboard">
&lt;button x-data="app_code_snippet()" x-init="init()" @click="copy()">
&lt;img class="code-clipboard__icon" src="/media/images/icons/icon-copy-small-2.svg" alt="Copy code to clipboard" width="14" height="13">
&lt;span>Copy&lt;/span>
&lt;/button>
&lt;/span>
&lt;div class="lang-toolbar__border">&lt;/div>
&lt;/div>&lt;div class="code-snippet ">
&lt;pre data-expanded="false">&lt;code class="language-javascript">import crypto from &amp;#39;k6/crypto&amp;#39;;
import exec from &amp;#39;k6/execution&amp;#39;;
import {
AWSConfig,
S3Client,
} from &amp;#39;https://jslib.k6.io/aws/0.14.0/s3.js&amp;#39;;
const awsConfig = new AWSConfig({
region: __ENV.AWS_REGION,
accessKeyId: __ENV.AWS_ACCESS_KEY_ID,
secretAccessKey: __ENV.AWS_SECRET_ACCESS_KEY,
sessionToken: __ENV.AWS_SESSION_TOKEN,
});
const s3 = new S3Client(awsConfig);
const testBucketName = &amp;#39;test-jslib-aws&amp;#39;;
const testFileKey = &amp;#39;multipart.txt&amp;#39;;
export default async function () {
// Produce random bytes to upload of size ~12MB, that
// we will upload in two 6MB parts. This is done as the
// minimum part size supported by S3 is 5MB.
const bigFile = crypto.randomBytes(12 * 1024 * 1024);
// Initialize a multipart upload
const multipartUpload = await s3.createMultipartUpload(testBucketName, testFileKey);
// Upload the first part
const firstPartData = bigFile.slice(0, 6 * 1024 * 1024);
const firstPart = await s3.uploadPart(
testBucketName,
testFileKey,
multipartUpload.uploadId,
1,
firstPartData
);
// Upload the second part
const secondPartData = bigFile.slice(6 * 1024 * 1024, 12 * 1024 * 1024);
const secondPart = await s3.uploadPart(
testBucketName,
testFileKey,
multipartUpload.uploadId,
2,
secondPartData
);
// Complete the multipart upload
await s3.completeMultipartUpload(testBucketName, testFileKey, multipartUpload.uploadId, [
firstPart,
secondPart,
]);
// Let&amp;#39;s redownload it verify it&amp;#39;s correct, and delete it
const obj = await s3.getObject(testBucketName, testFileKey);
await s3.deleteObject(testBucketName, testFileKey);
}&lt;/code>&lt;/pre>
&lt;/div>
&lt;/div>
&lt;p>&lt;em>A k6 script that will upload a part in a multipart upload to an S3 bucket&lt;/em>&lt;/p></description></item><item><title>Bucket</title><link>https://grafana.com/docs/k6/v2.3.x/javascript-api/jslib/aws/s3client/bucket/</link><pubDate>Mon, 21 Sep 2026 15:16:28 +0000</pubDate><guid>https://grafana.com/docs/k6/v2.3.x/javascript-api/jslib/aws/s3client/bucket/</guid><content><![CDATA[&lt;h1 id=&#34;bucket&#34;&gt;Bucket&lt;/h1&gt;
&lt;p&gt;Bucket is returned by the S3Client.* methods that query S3 buckets. Namely, &lt;code&gt;listBuckets()&lt;/code&gt; returns an array of Bucket objects. The Bucket object describes an Amazon S3 bucket.&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th style=&#34;text-align: left&#34;&gt;Name&lt;/th&gt;
              &lt;th style=&#34;text-align: left&#34;&gt;Type&lt;/th&gt;
              &lt;th style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;Bucket.name&lt;/code&gt;&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;string&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;The S3 bucket&amp;rsquo;s name&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;Bucket.creationDate&lt;/code&gt;&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;Date&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;The S3 bucket&amp;rsquo;s creationDate&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;h3 id=&#34;example&#34;&gt;Example&lt;/h3&gt;
&lt;!-- md-k6:skip --&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;JavaScript&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-javascript&#34;&gt;import {
  AWSConfig,
  S3Client,
} from &amp;#39;https://jslib.k6.io/aws/0.14.0/s3.js&amp;#39;;

const awsConfig = new AWSConfig({
  region: __ENV.AWS_REGION,
  accessKeyId: __ENV.AWS_ACCESS_KEY_ID,
  secretAccessKey: __ENV.AWS_SECRET_ACCESS_KEY,
});

const s3 = new S3Client(awsConfig);

export default async function () {
  // List the buckets the AWS authentication configuration
  // gives us access to.
  const buckets = await s3.listBuckets();
  console.log(JSON.stringify(buckets));
}&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;em&gt;A k6 script that will query the user&amp;rsquo;s S3 buckets and print all of their metadata&lt;/em&gt;&lt;/p&gt;
]]></content><description>&lt;h1 id="bucket">Bucket&lt;/h1>
&lt;p>Bucket is returned by the S3Client.* methods that query S3 buckets. Namely, &lt;code>listBuckets()&lt;/code> returns an array of Bucket objects. The Bucket object describes an Amazon S3 bucket.&lt;/p></description></item><item><title>Object</title><link>https://grafana.com/docs/k6/v2.3.x/javascript-api/jslib/aws/s3client/object/</link><pubDate>Mon, 21 Sep 2026 15:16:28 +0000</pubDate><guid>https://grafana.com/docs/k6/v2.3.x/javascript-api/jslib/aws/s3client/object/</guid><content><![CDATA[&lt;h1 id=&#34;object&#34;&gt;Object&lt;/h1&gt;
&lt;p&gt;Object is returned by the S3Client.* methods that query S3 buckets&amp;rsquo; objects. Namely, 
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/jslib/aws/s3client/listobjects/&#34;&gt;&lt;code&gt;listObjects&lt;/code&gt;&lt;/a&gt;, 
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/jslib/aws/s3client/getobject/&#34;&gt;&lt;code&gt;getObject&lt;/code&gt;&lt;/a&gt;, 
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/jslib/aws/s3client/putobject/&#34;&gt;&lt;code&gt;putObject&lt;/code&gt;&lt;/a&gt;,
and 
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/jslib/aws/s3client/deleteobject/&#34;&gt;&lt;code&gt;deleteObject&lt;/code&gt;&lt;/a&gt;. The Object construct describes an Amazon S3 object.&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th style=&#34;text-align: left&#34;&gt;Name&lt;/th&gt;
              &lt;th style=&#34;text-align: left&#34;&gt;Type&lt;/th&gt;
              &lt;th style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;Object.key&lt;/code&gt;&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;string&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;The S3 object&amp;rsquo;s name.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;Object.lastModified&lt;/code&gt;&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;number&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;The S3 object&amp;rsquo;s last modification date.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;Object.etag&lt;/code&gt;&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;string&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;The S3 object&amp;rsquo;s &lt;code&gt;etag&lt;/code&gt; is a hash of the object. The ETag reflects changes only to the contents of an object, not its metadata. The ETag may or may not be an MD5 digest of the object data.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;Object.size&lt;/code&gt;&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;size&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;The S3 object&amp;rsquo;s size in bytes.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;Object.storageClass&lt;/code&gt;&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;STANDARD&lt;/code&gt; | &lt;code&gt;REDUCED_REDUNDANCY&lt;/code&gt; | &lt;code&gt;GLACIER&lt;/code&gt; | &lt;code&gt;STANDARD_IA&lt;/code&gt; | &lt;code&gt;INTELLIGENT_TIERING&lt;/code&gt; | &lt;code&gt;DEEP_ARCHIVE&lt;/code&gt; | &lt;code&gt;OUTPOSTS&lt;/code&gt; | &lt;code&gt;GLACIER_IR&lt;/code&gt;&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;The S3 object&amp;rsquo;s class of storage used to store it.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;Object.data&lt;/code&gt;&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;string&lt;/code&gt; or &lt;code&gt;bytes&lt;/code&gt; or &lt;code&gt;null&lt;/code&gt;&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;The S3 object&amp;rsquo;s content.&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;h3 id=&#34;example&#34;&gt;Example&lt;/h3&gt;
&lt;!-- md-k6:skip --&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;JavaScript&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-javascript&#34;&gt;import exec from &amp;#39;k6/execution&amp;#39;;

import {
  // listBuckets,
  AWSConfig,
  S3Client,
} from &amp;#39;https://jslib.k6.io/aws/0.14.0/s3.js&amp;#39;;

const awsConfig = new AWSConfig({
  region: __ENV.AWS_REGION,
  accessKeyId: __ENV.AWS_ACCESS_KEY_ID,
  secretAccessKey: __ENV.AWS_SECRET_ACCESS_KEY,
});

const s3 = new S3Client(awsConfig);
const testBucketName = &amp;#39;test-jslib-aws&amp;#39;;
const testFileKey = &amp;#39;bonjour.txt&amp;#39;;

export default async function () {
  const objects = await s3.listObjects(testBucketName);

  // If our test object does not exist, abort the execution.
  if (objects.filter((o) =&amp;gt; o.key === testFileKey).length == 0) {
    exec.test.abort();
  }

  // Let&amp;#39;s download our test object and print its content
  const object = await s3.getObject(testBucketName, testFileKey);
  console.log(JSON.stringify(object));
}&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;em&gt;A k6 script that will query a S3 bucket&amp;rsquo;s objects and print its content and metadata&lt;/em&gt;&lt;/p&gt;
]]></content><description>&lt;h1 id="object">Object&lt;/h1>
&lt;p>Object is returned by the S3Client.* methods that query S3 buckets&amp;rsquo; objects. Namely,
&lt;a href="/docs/k6/v2.3.x/javascript-api/jslib/aws/s3client/listobjects/">&lt;code>listObjects&lt;/code>&lt;/a>,
&lt;a href="/docs/k6/v2.3.x/javascript-api/jslib/aws/s3client/getobject/">&lt;code>getObject&lt;/code>&lt;/a>,
&lt;a href="/docs/k6/v2.3.x/javascript-api/jslib/aws/s3client/putobject/">&lt;code>putObject&lt;/code>&lt;/a>,
and
&lt;a href="/docs/k6/v2.3.x/javascript-api/jslib/aws/s3client/deleteobject/">&lt;code>deleteObject&lt;/code>&lt;/a>. The Object construct describes an Amazon S3 object.&lt;/p>
&lt;section class="expand-table-wrapper">&lt;div class="button-div">
&lt;button class="expand-table-btn">Expand table&lt;/button>
&lt;/div>&lt;div class="responsive-table-wrapper">
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align: left">Name&lt;/th>
&lt;th style="text-align: left">Type&lt;/th>
&lt;th style="text-align: left">Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align: left">&lt;code>Object.key&lt;/code>&lt;/td>
&lt;td style="text-align: left">string&lt;/td>
&lt;td style="text-align: left">The S3 object&amp;rsquo;s name.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">&lt;code>Object.lastModified&lt;/code>&lt;/td>
&lt;td style="text-align: left">number&lt;/td>
&lt;td style="text-align: left">The S3 object&amp;rsquo;s last modification date.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">&lt;code>Object.etag&lt;/code>&lt;/td>
&lt;td style="text-align: left">string&lt;/td>
&lt;td style="text-align: left">The S3 object&amp;rsquo;s &lt;code>etag&lt;/code> is a hash of the object. The ETag reflects changes only to the contents of an object, not its metadata. The ETag may or may not be an MD5 digest of the object data.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">&lt;code>Object.size&lt;/code>&lt;/td>
&lt;td style="text-align: left">size&lt;/td>
&lt;td style="text-align: left">The S3 object&amp;rsquo;s size in bytes.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">&lt;code>Object.storageClass&lt;/code>&lt;/td>
&lt;td style="text-align: left">&lt;code>STANDARD&lt;/code> | &lt;code>REDUCED_REDUNDANCY&lt;/code> | &lt;code>GLACIER&lt;/code> | &lt;code>STANDARD_IA&lt;/code> | &lt;code>INTELLIGENT_TIERING&lt;/code> | &lt;code>DEEP_ARCHIVE&lt;/code> | &lt;code>OUTPOSTS&lt;/code> | &lt;code>GLACIER_IR&lt;/code>&lt;/td>
&lt;td style="text-align: left">The S3 object&amp;rsquo;s class of storage used to store it.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">&lt;code>Object.data&lt;/code>&lt;/td>
&lt;td style="text-align: left">&lt;code>string&lt;/code> or &lt;code>bytes&lt;/code> or &lt;code>null&lt;/code>&lt;/td>
&lt;td style="text-align: left">The S3 object&amp;rsquo;s content.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;/div>
&lt;/section>&lt;h3 id="example">Example&lt;/h3>
&lt;!-- md-k6:skip -->
&lt;div class="code-snippet ">&lt;div class="lang-toolbar">
&lt;span class="lang-toolbar__item lang-toolbar__item-active">JavaScript&lt;/span>
&lt;span class="code-clipboard">
&lt;button x-data="app_code_snippet()" x-init="init()" @click="copy()">
&lt;img class="code-clipboard__icon" src="/media/images/icons/icon-copy-small-2.svg" alt="Copy code to clipboard" width="14" height="13">
&lt;span>Copy&lt;/span>
&lt;/button>
&lt;/span>
&lt;div class="lang-toolbar__border">&lt;/div>
&lt;/div>&lt;div class="code-snippet ">
&lt;pre data-expanded="false">&lt;code class="language-javascript">import exec from &amp;#39;k6/execution&amp;#39;;
import {
// listBuckets,
AWSConfig,
S3Client,
} from &amp;#39;https://jslib.k6.io/aws/0.14.0/s3.js&amp;#39;;
const awsConfig = new AWSConfig({
region: __ENV.AWS_REGION,
accessKeyId: __ENV.AWS_ACCESS_KEY_ID,
secretAccessKey: __ENV.AWS_SECRET_ACCESS_KEY,
});
const s3 = new S3Client(awsConfig);
const testBucketName = &amp;#39;test-jslib-aws&amp;#39;;
const testFileKey = &amp;#39;bonjour.txt&amp;#39;;
export default async function () {
const objects = await s3.listObjects(testBucketName);
// If our test object does not exist, abort the execution.
if (objects.filter((o) =&amp;gt; o.key === testFileKey).length == 0) {
exec.test.abort();
}
// Let&amp;#39;s download our test object and print its content
const object = await s3.getObject(testBucketName, testFileKey);
console.log(JSON.stringify(object));
}&lt;/code>&lt;/pre>
&lt;/div>
&lt;/div>
&lt;p>&lt;em>A k6 script that will query a S3 bucket&amp;rsquo;s objects and print its content and metadata&lt;/em>&lt;/p></description></item><item><title>S3MultipartUpload</title><link>https://grafana.com/docs/k6/v2.3.x/javascript-api/jslib/aws/s3client/s3multipartupload/</link><pubDate>Mon, 21 Sep 2026 15:16:28 +0000</pubDate><guid>https://grafana.com/docs/k6/v2.3.x/javascript-api/jslib/aws/s3client/s3multipartupload/</guid><content><![CDATA[&lt;h1 id=&#34;s3multipartupload&#34;&gt;S3MultipartUpload&lt;/h1&gt;
&lt;p&gt;S3MultipartUpload is returned by the 
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/jslib/aws/s3client/createmultipartupload/&#34;&gt;&lt;code&gt;createMultipartUpload(bucketName, objectKey)&lt;/code&gt;&lt;/a&gt; method when creating a &lt;a href=&#34;https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;multipart upload&lt;/a&gt;.&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th style=&#34;text-align: left&#34;&gt;Name&lt;/th&gt;
              &lt;th style=&#34;text-align: left&#34;&gt;Type&lt;/th&gt;
              &lt;th style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;S3MultipartUpload.key&lt;/code&gt;&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;string&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;The S3 Multipart object&amp;rsquo;s key&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;S3MultipartUpload.uploadId&lt;/code&gt;&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;Date&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;The S3 Multipart upload Id&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;h3 id=&#34;example&#34;&gt;Example&lt;/h3&gt;
&lt;!-- md-k6:skip --&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;JavaScript&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-javascript&#34;&gt;import {
  AWSConfig,
  S3Client,
} from &amp;#39;https://jslib.k6.io/aws/0.14.0/s3.js&amp;#39;;

const awsConfig = new AWSConfig({
  region: __ENV.AWS_REGION,
  accessKeyId: __ENV.AWS_ACCESS_KEY_ID,
  secretAccessKey: __ENV.AWS_SECRET_ACCESS_KEY,
  sessionToken: __ENV.AWS_SESSION_TOKEN,
});

const s3 = new S3Client(awsConfig);

const testBucketName = &amp;#39;test-jslib-aws&amp;#39;;
const testFileKey = &amp;#39;multipart.txt&amp;#39;;

export default async function () {
  // Initialize a multipart upload
  const multipartUpload = await s3.createMultipartUpload(testBucketName, testFileKey);
  console.log(multipartUpload.uploadId);

  // Abort multipart upload
  await s3.abortMultipartUpload(testBucketName, testFileKey, multipartUpload.uploadId);
}&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;em&gt;A k6 script that will create a multipart upload and log the multipart &lt;code&gt;uploadId&lt;/code&gt; and abort the multipart upload&lt;/em&gt;&lt;/p&gt;
]]></content><description>&lt;h1 id="s3multipartupload">S3MultipartUpload&lt;/h1>
&lt;p>S3MultipartUpload is returned by the
&lt;a href="/docs/k6/v2.3.x/javascript-api/jslib/aws/s3client/createmultipartupload/">&lt;code>createMultipartUpload(bucketName, objectKey)&lt;/code>&lt;/a> method when creating a &lt;a href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html" target="_blank" rel="noopener noreferrer">multipart upload&lt;/a>.&lt;/p>
&lt;section class="expand-table-wrapper">&lt;div class="button-div">
&lt;button class="expand-table-btn">Expand table&lt;/button>
&lt;/div>&lt;div class="responsive-table-wrapper">
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align: left">Name&lt;/th>
&lt;th style="text-align: left">Type&lt;/th>
&lt;th style="text-align: left">Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align: left">&lt;code>S3MultipartUpload.key&lt;/code>&lt;/td>
&lt;td style="text-align: left">string&lt;/td>
&lt;td style="text-align: left">The S3 Multipart object&amp;rsquo;s key&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align: left">&lt;code>S3MultipartUpload.uploadId&lt;/code>&lt;/td>
&lt;td style="text-align: left">Date&lt;/td>
&lt;td style="text-align: left">The S3 Multipart upload Id&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;/div>
&lt;/section>&lt;h3 id="example">Example&lt;/h3>
&lt;!-- md-k6:skip -->
&lt;div class="code-snippet ">&lt;div class="lang-toolbar">
&lt;span class="lang-toolbar__item lang-toolbar__item-active">JavaScript&lt;/span>
&lt;span class="code-clipboard">
&lt;button x-data="app_code_snippet()" x-init="init()" @click="copy()">
&lt;img class="code-clipboard__icon" src="/media/images/icons/icon-copy-small-2.svg" alt="Copy code to clipboard" width="14" height="13">
&lt;span>Copy&lt;/span>
&lt;/button>
&lt;/span>
&lt;div class="lang-toolbar__border">&lt;/div>
&lt;/div>&lt;div class="code-snippet ">
&lt;pre data-expanded="false">&lt;code class="language-javascript">import {
AWSConfig,
S3Client,
} from &amp;#39;https://jslib.k6.io/aws/0.14.0/s3.js&amp;#39;;
const awsConfig = new AWSConfig({
region: __ENV.AWS_REGION,
accessKeyId: __ENV.AWS_ACCESS_KEY_ID,
secretAccessKey: __ENV.AWS_SECRET_ACCESS_KEY,
sessionToken: __ENV.AWS_SESSION_TOKEN,
});
const s3 = new S3Client(awsConfig);
const testBucketName = &amp;#39;test-jslib-aws&amp;#39;;
const testFileKey = &amp;#39;multipart.txt&amp;#39;;
export default async function () {
// Initialize a multipart upload
const multipartUpload = await s3.createMultipartUpload(testBucketName, testFileKey);
console.log(multipartUpload.uploadId);
// Abort multipart upload
await s3.abortMultipartUpload(testBucketName, testFileKey, multipartUpload.uploadId);
}&lt;/code>&lt;/pre>
&lt;/div>
&lt;/div>
&lt;p>&lt;em>A k6 script that will create a multipart upload and log the multipart &lt;code>uploadId&lt;/code> and abort the multipart upload&lt;/em>&lt;/p></description></item><item><title>S3Part</title><link>https://grafana.com/docs/k6/v2.3.x/javascript-api/jslib/aws/s3client/s3part/</link><pubDate>Mon, 21 Sep 2026 15:16:28 +0000</pubDate><guid>https://grafana.com/docs/k6/v2.3.x/javascript-api/jslib/aws/s3client/s3part/</guid><content><![CDATA[&lt;h1 id=&#34;s3part&#34;&gt;S3Part&lt;/h1&gt;
&lt;p&gt;S3Part is returned by the 
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/jslib/aws/s3client/uploadpart/&#34;&gt;&lt;code&gt;uploadPart(bucketName, objectKey, uploadId, partNumber, data)&lt;/code&gt;&lt;/a&gt; method when uploading a part to a multipart upload. The S3Part object describes an Amazon S3 Part.&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th style=&#34;text-align: left&#34;&gt;Name&lt;/th&gt;
              &lt;th style=&#34;text-align: left&#34;&gt;Type&lt;/th&gt;
              &lt;th style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;S3Part.partNumber&lt;/code&gt;&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;number&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;The S3 Part&amp;rsquo;number&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;S3Part.eTag        &lt;/code&gt;&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;String&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;The S3 Part&amp;rsquo;s etag&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;h3 id=&#34;example&#34;&gt;Example&lt;/h3&gt;
&lt;!-- md-k6:skip --&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;JavaScript&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-javascript&#34;&gt;import crypto from &amp;#39;k6/crypto&amp;#39;;
import exec from &amp;#39;k6/execution&amp;#39;;

import {
  AWSConfig,
  S3Client,
} from &amp;#39;https://jslib.k6.io/aws/0.14.0/s3.js&amp;#39;;

const awsConfig = new AWSConfig({
  region: __ENV.AWS_REGION,
  accessKeyId: __ENV.AWS_ACCESS_KEY_ID,
  secretAccessKey: __ENV.AWS_SECRET_ACCESS_KEY,
  sessionToken: __ENV.AWS_SESSION_TOKEN,
});

const s3 = new S3Client(awsConfig);

const testBucketName = &amp;#39;test-jslib-aws&amp;#39;;
const testFileKey = &amp;#39;multipart.txt&amp;#39;;

export default async function () {
  // Produce random bytes to upload of size ~12MB, that
  // we will upload in two 6MB parts. This is done as the
  // minimum part size supported by S3 is 5MB.
  const bigFile = crypto.randomBytes(12 * 1024 * 1024);

  // Initialize a multipart upload
  const multipartUpload = await s3.createMultipartUpload(testBucketName, testFileKey);

  // Upload the first part
  const firstPartData = bigFile.slice(0, 6 * 1024 * 1024);
  const firstPart = await s3.uploadPart(
    testBucketName,
    testFileKey,
    multipartUpload.uploadId,
    1,
    firstPartData
  );

  // Upload the second part
  const secondPartData = bigFile.slice(6 * 1024 * 1024, 12 * 1024 * 1024);
  const secondPart = await s3.uploadPart(
    testBucketName,
    testFileKey,
    multipartUpload.uploadId,
    2,
    secondPartData
  );

  // Complete the multipart upload
  await s3.completeMultipartUpload(testBucketName, testFileKey, multipartUpload.uploadId, [
    firstPart,
    secondPart,
  ]);

  // Let&amp;#39;s redownload it verify it&amp;#39;s correct, and delete it
  const obj = await s3.getObject(testBucketName, testFileKey);
  await s3.deleteObject(testBucketName, testFileKey);
}&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;em&gt;A k6 script that will upload a part in a multipart upload to an S3 bucket&lt;/em&gt;&lt;/p&gt;
]]></content><description>&lt;h1 id="s3part">S3Part&lt;/h1>
&lt;p>S3Part is returned by the
&lt;a href="/docs/k6/v2.3.x/javascript-api/jslib/aws/s3client/uploadpart/">&lt;code>uploadPart(bucketName, objectKey, uploadId, partNumber, data)&lt;/code>&lt;/a> method when uploading a part to a multipart upload. The S3Part object describes an Amazon S3 Part.&lt;/p></description></item><item><title>S3UploadedObject</title><link>https://grafana.com/docs/k6/v2.3.x/javascript-api/jslib/aws/s3client/s3uploadedobject/</link><pubDate>Mon, 21 Sep 2026 15:16:28 +0000</pubDate><guid>https://grafana.com/docs/k6/v2.3.x/javascript-api/jslib/aws/s3client/s3uploadedobject/</guid><content><![CDATA[&lt;h1 id=&#34;s3uploadedobject&#34;&gt;S3UploadedObject&lt;/h1&gt;
&lt;p&gt;&lt;code&gt;S3UploadedObject&lt;/code&gt; represents the response returned by S3 upload operations such as 
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/jslib/aws/s3client/putobject/&#34;&gt;&lt;code&gt;putObject&lt;/code&gt;&lt;/a&gt; and 
    &lt;a href=&#34;/docs/k6/v2.3.x/javascript-api/jslib/aws/s3client/completemultipartupload/&#34;&gt;&lt;code&gt;completeMultipartUpload&lt;/code&gt;&lt;/a&gt;. It contains metadata about the uploaded object, including checksums and upload verification information.&lt;/p&gt;
&lt;h2 id=&#34;properties&#34;&gt;Properties&lt;/h2&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;button-div&#34;&gt;
      &lt;button class=&#34;expand-table-btn&#34;&gt;Expand table&lt;/button&gt;
    &lt;/div&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th style=&#34;text-align: left&#34;&gt;Name&lt;/th&gt;
              &lt;th style=&#34;text-align: left&#34;&gt;Type&lt;/th&gt;
              &lt;th style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;eTag&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;string&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;The entity tag (ETag) of the uploaded object. This is a hash of the object that can be used to verify the integrity of the uploaded data.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;crc32&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;string (optional)&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;The base64-encoded CRC32 checksum of the uploaded object, if available.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;crc32c&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;string (optional)&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;The base64-encoded CRC32C checksum of the uploaded object, if available.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;crc64nvme&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;string (optional)&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;The base64-encoded CRC64NVME checksum of the uploaded object, if available.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;sha1&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;string (optional)&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;The base64-encoded SHA1 checksum of the uploaded object, if available.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;sha256&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;string (optional)&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;The base64-encoded SHA256 checksum of the uploaded object, if available.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;checksumType&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;string (optional)&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;The type of checksum algorithm used. Can be &amp;ldquo;COMPOSITE&amp;rdquo; for multipart uploads or &amp;ldquo;FULL_OBJECT&amp;rdquo; for single-part uploads.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;size&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;number (optional)&lt;/td&gt;
              &lt;td style=&#34;text-align: left&#34;&gt;The size of the uploaded object in bytes, if available.&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;h2 id=&#34;example&#34;&gt;Example&lt;/h2&gt;
&lt;!-- md-k6:skip --&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;JavaScript&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-javascript&#34;&gt;import {
  AWSConfig,
  S3Client,
} from &amp;#39;https://jslib.k6.io/aws/0.14.0/s3.js&amp;#39;;

const awsConfig = new AWSConfig({
  region: __ENV.AWS_REGION,
  accessKeyId: __ENV.AWS_ACCESS_KEY_ID,
  secretAccessKey: __ENV.AWS_SECRET_ACCESS_KEY,
});

const s3 = new S3Client(awsConfig);
const testBucketName = &amp;#39;test-jslib-aws&amp;#39;;
const testFileKey = &amp;#39;test-file.txt&amp;#39;;

export default async function () {
  const testData = &amp;#39;Hello, World!&amp;#39;;

  // Upload the object and get the upload response
  const uploadResult = await s3.putObject(testBucketName, testFileKey, testData);

  // Access the upload metadata
  console.log(&amp;#39;Upload ETag:&amp;#39;, uploadResult.eTag);
  console.log(&amp;#39;Object size:&amp;#39;, uploadResult.size);

  // Check if checksums are available
  if (uploadResult.sha256) {
    console.log(&amp;#39;SHA256 checksum:&amp;#39;, uploadResult.sha256);
  }

  if (uploadResult.checksumType) {
    console.log(&amp;#39;Checksum type:&amp;#39;, uploadResult.checksumType);
  }

  // Verify the upload was successful
  if (uploadResult.eTag) {
    console.log(&amp;#39;Upload successful, ETag received:&amp;#39;, uploadResult.eTag);
  }
}&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;usage-in-multipart-uploads&#34;&gt;Usage in Multipart Uploads&lt;/h2&gt;
&lt;p&gt;For multipart uploads, the &lt;code&gt;S3UploadedObject&lt;/code&gt; is returned by the &lt;code&gt;completeMultipartUpload&lt;/code&gt; method:&lt;/p&gt;
&lt;!-- md-k6:skip --&gt;

&lt;div class=&#34;code-snippet &#34;&gt;&lt;div class=&#34;lang-toolbar&#34;&gt;
    &lt;span class=&#34;lang-toolbar__item lang-toolbar__item-active&#34;&gt;JavaScript&lt;/span&gt;
    &lt;span class=&#34;code-clipboard&#34;&gt;
      &lt;button x-data=&#34;app_code_snippet()&#34; x-init=&#34;init()&#34; @click=&#34;copy()&#34;&gt;
        &lt;img class=&#34;code-clipboard__icon&#34; src=&#34;/media/images/icons/icon-copy-small-2.svg&#34; alt=&#34;Copy code to clipboard&#34; width=&#34;14&#34; height=&#34;13&#34;&gt;
        &lt;span&gt;Copy&lt;/span&gt;
      &lt;/button&gt;
    &lt;/span&gt;
    &lt;div class=&#34;lang-toolbar__border&#34;&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;div class=&#34;code-snippet &#34;&gt;
    &lt;pre data-expanded=&#34;false&#34;&gt;&lt;code class=&#34;language-javascript&#34;&gt;import crypto from &amp;#39;k6/crypto&amp;#39;;
import {
  AWSConfig,
  S3Client,
} from &amp;#39;https://jslib.k6.io/aws/0.14.0/s3.js&amp;#39;;

const awsConfig = new AWSConfig({
  region: __ENV.AWS_REGION,
  accessKeyId: __ENV.AWS_ACCESS_KEY_ID,
  secretAccessKey: __ENV.AWS_SECRET_ACCESS_KEY,
});

const s3 = new S3Client(awsConfig);

export default async function () {
  const testBucketName = &amp;#39;test-jslib-aws&amp;#39;;
  const testFileKey = &amp;#39;large-file.txt&amp;#39;;

  // Create large file data
  const bigFile = crypto.randomBytes(12 * 1024 * 1024); // 12MB

  // Initialize multipart upload
  const multipartUpload = await s3.createMultipartUpload(testBucketName, testFileKey);

  // Upload parts
  const firstPart = await s3.uploadPart(
    testBucketName,
    testFileKey,
    multipartUpload.uploadId,
    1,
    bigFile.slice(0, 6 * 1024 * 1024)
  );

  const secondPart = await s3.uploadPart(
    testBucketName,
    testFileKey,
    multipartUpload.uploadId,
    2,
    bigFile.slice(6 * 1024 * 1024)
  );

  // Complete the multipart upload and get the result
  const uploadResult = await s3.completeMultipartUpload(
    testBucketName,
    testFileKey,
    multipartUpload.uploadId,
    [firstPart, secondPart]
  );

  // Access the completed upload metadata
  console.log(&amp;#39;Multipart upload ETag:&amp;#39;, uploadResult.eTag);
  console.log(&amp;#39;Checksum type:&amp;#39;, uploadResult.checksumType); // Likely &amp;#34;COMPOSITE&amp;#34;

  if (uploadResult.size) {
    console.log(&amp;#39;Total object size:&amp;#39;, uploadResult.size);
  }
}&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;
]]></content><description>&lt;h1 id="s3uploadedobject">S3UploadedObject&lt;/h1>
&lt;p>&lt;code>S3UploadedObject&lt;/code> represents the response returned by S3 upload operations such as
&lt;a href="/docs/k6/v2.3.x/javascript-api/jslib/aws/s3client/putobject/">&lt;code>putObject&lt;/code>&lt;/a> and
&lt;a href="/docs/k6/v2.3.x/javascript-api/jslib/aws/s3client/completemultipartupload/">&lt;code>completeMultipartUpload&lt;/code>&lt;/a>. It contains metadata about the uploaded object, including checksums and upload verification information.&lt;/p></description></item></channel></rss>