AWS SDK for JavaScriptを実行可能なTypeScript環境をサクッと作る

2020.09.07

こんにちは、CX事業本部の若槻です。

今回は、AWS SDK for JavaScriptを実行可能なTypeScript環境をサクッと作り、tscコンパイルしたスクリプトをローカルで実行してAWSにアクセスしてみたいと思います。

環境

% node -v
v12.14.0
% npm -v
6.13.4

やってみる

環境の作成

まず、npm initを実行しディレクトリ内でnpmプロジェクトを初期化します。対話式でプロジェクトの設定を聞かれるので指定します。今回はすべてエンターキーを押して既定の設定としました。

% npm init
This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sensible defaults.

See `npm help json` for definitive documentation on these fields
and exactly what they do.

Use `npm install <pkg>` afterwards to install a package and
save it as a dependency in the package.json file.

Press ^C at any time to quit.
package name: (200907_ts_awssdk) 
version: (1.0.0) 
description: 
entry point: (index.js) 
test command: 
git repository: 
keywords: 
author: 
license: (ISC) 
About to write to /Users/wakatsuki.ryuta/works/200907_ts_awssdk/package.json:

{
  "name": "200907_ts_awssdk",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC"
}


Is this OK? (yes)

%

するとディレクトリ内にpackage.jsonが作成されました。

次に、npm installで次の3パッケージをインストールします。

  • typescript:TypeScript
  • aws-sdk:AWS SDK for JavaScript
  • @types/node:Nodeにおける型定義に使用
% npm install --save typescript aws-sdk @types/node
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN 200907_ts_awssdk@1.0.0 No description
npm WARN 200907_ts_awssdk@1.0.0 No repository field.

+ @types/node@14.6.4
+ aws-sdk@2.747.0
+ typescript@4.0.2
added 16 packages from 110 contributors and audited 16 packages in 2.397s
found 0 vulnerabilities

すると次のようにpackage.jsondependenciesにパッケージが追加されました。

package.json

{
  "name": "200907_ts_awssdk",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "@types/node": "^14.6.4",
    "aws-sdk": "^2.747.0",
    "typescript": "^4.0.2"
  }
}

また同ディレクトリ内に、パッケージの依存関係を示すpackage-lock.jsonと、パッケージの実体が保存されるnode_modulesディレクトリも作成されました。

AWS SDK for JavaScriptの実行

AWS SDK for JavaScriptを実行するスクリプトをTypeScriptで作成し、コンパイルして実際に実行してみます。

次のようなS3のバケット一覧を取得するTypeScriptスクリプトを作成します。

src/script.ts

import * as AWS from "aws-sdk";

const s3: AWS.S3 = new AWS.S3();

s3.listBuckets((err, data) => {
  if (err) throw err;
  console.log(data);
});

tscを使用してスクリプトをNodeで実行可能な形式にコンパイルします。

% npx tsc src/script.ts

src/script.jsが生成されました。

src/script.js

"use strict";
exports.__esModule = true;
var AWS = require("aws-sdk");
var s3 = new AWS.S3();
s3.listBuckets(function (err, data) {
    if (err)
        throw err;
    console.log(data);
});

環境変数にAWSの一時クレデンシャルの情報をセットしたら、生成されたスクリプトをNodeで実行します。

$ node src/script.js

{
  Buckets: [
    {
      Name: 'aaaaaaaaaa',
      CreationDate: 2020-05-26T02:52:35.000Z
    }
  ],
  Owner: {
    DisplayName: 'bbbbbbbbbb',
    ID: 'ccccccccccccccccccccccccccccc'
  }
}

AWS SDK for JavaScriptが実行され、S3のバケット一覧を取得できました。

おわりに

AWS SDK for JavaScriptを実行可能なTypeScript環境をサクッと作り、tscコンパイルしたスクリプトをローカルで実行してAWSにアクセスしてみました。

今までPythonしか使ってこなかった自分からしたら実行前にソースコードをコンパイルしないといけないというのは敷居が高いと感じていたのですが、やってみたらそこまで難しくなかったです。

参考

以上