AWS SDK for JavaScript(Version 3) と TypeScript を用いて S3 バケットの一覧を取得するサンプルコードを試してみた

AWS SDK for JavaScript(Version 3)と TypeScript を用いた検証記事です。
2022.12.29

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、アノテーションの及川です。

AWS SDK for JavaScript(Version 3)と TypeScript を用いて、自分が所有している S3 バケットの一覧を取得するサンプルコードを試していきたいと思います。

環境構築

Node.js のインストール

本検証ではローカルの PC(Mac) から行います。

検証には、Node.js の環境が必要になるため、まだインストールされていなければ、こちらから、インストールを行ってください。

% node -v
v16.13.1

% npm -v
8.1.2

作業用ディレクトリの作成

プログラムを作成/実行する作業用ディレクトリを作成します。

コードエディターは Visual Studio Code を使用します。

そのため、作成した作業用ディレクトリに移動したら、下記のように code .コマンドを入力して、Visual Studio Code で作業用ディレクトリを開いてください。

% mkdir work
% cd work
% code .

code .コマンドを入力して、zsh: command not found: code と表示されたら、コマンドパレットを開いて、「シェル コマンド: PATH 内に 'code' コマンドをインストールします」をクリックします。

そうすると、code . のコマンドが実行できるかと思います。

下記ショートカットキーでも「コマンドパレット」を開くことができます。

Mac: Cmd + Shift + P

Windows: Ctrl + Shift + P

必要なパッケージのインストール

% npm init -y

% npm i --save-dev @aws-sdk/client-s3 @aws-sdk/credential-providers @types/node typescript

package.json 

  • npm init -y により自動的に作成されます。
  • インストールしたパッケージ名やバージョンの情報が記録(管理)されます。
{
  "name": "work",
  "version": "1.0.0",
  "description": "",
  "main": "main.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "@aws-sdk/client-s3": "^3.150.0",
    "@aws-sdk/credential-providers": "^3.150.0",
    "@types/node": "^18.7.6",
    "typescript": "^4.7.4"
  }
}

複数の TypeScript ファイルを tsc コマンドにて、JavaScript ファイルにコンパイルするための設定

% tsc --init

tsconfig.json

  • tsc --init により、自動的に作成されます。
  • ./src ディレクトリ配下のTypeScriptファイルをJavaScriptファイルにコンパイルして、./dist ディレクトリ配下に JavaScript ファイルを配置する等の設定をしています。
  • 設定ファイルの詳細については、こちらをご参照ください。
{
  "compilerOptions": {
    "target": "ES6" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */,
    "module": "commonjs" /* Specify what module code is generated. */,
    "rootDir": "./src" /* Specify the root folder within your source files. */,
    "outDir": "./dist" /* Specify an output folder for all emitted files. */,
    "esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */,
    "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */,
    "strict": true /* Enable all strict type-checking options. */,
    "skipLibCheck": true /* Skip type checking all .d.ts files. */
  }
}

tsconfig.json を編集したら、src ディレクトリを作成します。

% mkdir src

プログラミング

Source Code

src ディレクトリ配下で、下記 2 つの TypeScript ファイル を作成します。

なお、下記ソースコードは AWS 公式ドキュメントのサンプルコード(List buckets)を使用して作成しています。

  • s3Client.ts
// Create service client module using ES6 syntax.
import { S3Client } from '@aws-sdk/client-s3';
import { fromIni } from '@aws-sdk/credential-providers';

const s3Client = new S3Client({
  credentials: fromIni({ profile: '<Your Profile>' }),
});
export { s3Client };
  • main.ts
import { ListBucketsCommand } from '@aws-sdk/client-s3';
import { s3Client } from './s3Client'; // Helper function that creates an Amazon S3 service client module.

export const run = async () => {
  try {
    const data = await s3Client.send(new ListBucketsCommand({}));
    console.log('Success', data.Buckets);
    return data; // For unit tests.
  } catch (err) {
    console.log('Error', err);
  }
};
run();

s3Client.ts の Your Profile 部分には、JavaScript(TypeScript)プログラムから、AWS リソースにアクセスするための プロファイルを指定ください。

指定方法に関する内容はこちらになります。

【注意】

ACCESS_KEY_ID や YOUR_SECRET_ACCESS_KEY 等の credentials 情報が公開されるリスクを避けるため、これらの機密情報に関しては、ソースコードに直接記述(ハードコード)しないことをお勧めします。

詳細についてはこちらをご参照ください。

TypeScript ファイルのコンパイル

下記コマンドにより、main.tss3Client.ts に対する JavaScript ファイルが ./dist ディレクトリ配下に生成されます。

% tsc

% ls ~/work/dist 
main.js     s3Client.js

実行結果

main.js を実行することで、自分が所有している S3 バケットの一覧を取得することができました。

% node main.js
Success [
  {
    Name: 'test1',
    CreationDate: 2022-02-15T03:19:45.000Z
  },
  {
    Name: 'test2',
    CreationDate: 2022-05-09T04:19:10.000Z
  },
  {
    Name: 'test3',
    CreationDate: 2022-06-09T05:19:10.000Z
  }
]

まとめ

この記事が少しでも誰かのお役にたてば幸いです。

参考資料

アノテーション株式会社について

アノテーション株式会社は、クラスメソッド社のグループ企業として「オペレーション・エクセレンス」を担える企業を目指してチャレンジを続けています。「らしく働く、らしく生きる」のスローガンを掲げ、様々な背景をもつ多様なメンバーが自由度の高い働き方を通してお客様へサービスを提供し続けてきました。現在当社では一緒に会社を盛り上げていただけるメンバーを募集中です。少しでもご興味あれば、アノテーション株式会社 WEB サイトをご覧ください。