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

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

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

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 サイトをご覧ください。