この記事は公開されてから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.ts と s3Client.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
}
]
まとめ
この記事が少しでも誰かのお役にたてば幸いです。
参考資料
- Loading credentials in Node.js from the shared credentials file - AWS SDK for JavaScript
-
Amazon S3 examples using SDK for JavaScript V3 - AWS SDK for JavaScript
アノテーション株式会社について
アノテーション株式会社は、クラスメソッド社のグループ企業として「オペレーション・エクセレンス」を担える企業を目指してチャレンジを続けています。「らしく働く、らしく生きる」のスローガンを掲げ、様々な背景をもつ多様なメンバーが自由度の高い働き方を通してお客様へサービスを提供し続けてきました。現在当社では一緒に会社を盛り上げていただけるメンバーを募集中です。少しでもご興味あれば、アノテーション株式会社 WEB サイトをご覧ください。