Help us understand the problem. What is going on with this article?

Windows で AWS-CLI + node.js 実行環境を構築する

More than 3 years have passed since last update.

目的

aws を cli で操作できる環境と、node.js でスクリプトを動かせる環境を構築しました。
その記録です。
image

環境

Windows 10 / 64bit
※32bit でもインストーラーを読み替えて実施できます。

前提資料

こちらを見ながら進めました。

実施内容

aws-cli導入

コマンドプロンプトから AWS を操作する aws-cli を導入します。
image
( 画像引用元:https://github.com/donnemartin/dev-setup )

インストーラー取得

https://aws.amazon.com/jp/cli/
AWSCLI64.msi
※インストール手順は省略

プロキシ設定

社内環境などでプロキシがある場合、コマンドプロンプト上で認証プロキシの設定を行います。

console
set HTTP_PROXY=http://USERNAME:PASSWORD@proxyserver.example.com:8080
set HTTPS_PROXY=http://USERNAME:PASSWORD@proxyserver.example.com:8080

IAM設定

AWS コンソールから、ユーザとグループの作成を行います。ここで取得したキーはソースに記載したり、git に上げたりしないよう注意しましょう。

IAM > ユーザー > 新規ユーザの作成

任意のユーザを作成、「ユーザーごとにアクセスキーを生成」にチェックをし、ユーザのアクセスキー情報(CSV形式)を保存します。

IAM > グループ > 新規グループの作成

任意のグループを作成、ロールに AdministratorAccess を割り当て、先ほど作成したユーザを追加します。

aws-cli 初期設定

バージョン確認しておきます。

console
>aws --version
aws-cli/1.10.36 Python/2.7.9 Windows/7 botocore/1.4.26

先ほどダウンロードした CSV を開き「Access Key Id」「Secret Access Key」列を確認して、aws-cli に認証キー設定を行います。

console
>aws configure
AWS Access Key ID [none]:XXXXXXXXXXXXXXXXXXXX
AWS Secret Access Key [none]:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Default region name [none]:ap-northeast-1
Default output format [none]:json

※東京リージョンを選択しました
※output format は json, text, table があるようです
※複数 profile を使用したい場合は、--profile USERNAME2 オプションを毎回つけることでで別ユーザとして configure, コマンド実行 ができます

設定確認

ユーザの .aws フォルダに認証情報が保存されているので、いちおう確認します。

console
>dir C:\users\USERNAME\.aws\
 ドライブ C のボリューム ラベルがありません。
 ボリューム シリアル番号は A0D4-4C61 です

 C:\users\USERNAME\.aws のディレクトリ

2016/06/21  11:42    <DIR>          .
2016/06/21  11:42    <DIR>          ..
2016/08/12  16:31                51 config
2016/08/12  16:31               119 credentials

>type C:\users\USERNAME\.aws\config
[default]
region = ap-northeast-1
output = json

>type C:\users\USERNAME\.aws\credentials
[default]
aws_access_key_id = XXXXXXXXXXXXXXXXXXXX
aws_secret_access_key = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

コマンド実行

実際にコマンド実行してみて、認証キーが正しく設定されているか確認します、ためしに EC2 のセキュリティグループ一覧を表示してみます。先ほど設定したとおり json 形式で結果が取得できました。

console
>aws ec2 describe-security-groups
{
    "SecurityGroups": [
        {
            (省略)
        }
    ]
}

node.js導入

image

https://nodejs.org/en/download/
node-v4.4.7-x64.msi
※インストール手順は省略

バージョン確認

node、npm 両方入っていました。

console
>npm -v
2.15.8

>node -v
v4.4.7

aws-sdkインストール

AWS の Getting Started with the SDK in Node.js ページを見ると npm コマンドが書かれているので、そのとおり実施します。

console
>npm install aws-sdk
aws-sdk@2.5.0 node_modules\aws-sdk
├── sax@1.1.5
├── xml2js@0.4.15
├── jmespath@0.15.0
└── xmlbuilder@2.6.2 (lodash@3.5.0)

※カレントディレクトリの「node_modules」フォルダに sdk がインストールされます。

サンプル実行

今度は S3 の TESTBUCKET から一覧を取得するスクリプトを作成して、実行してみます。

lists3sample.js
var AWS = require("aws-sdk");
AWS.config.region = 'ap-northeast-1'
var params = {
    Bucket: 'TESTBUCKET'
};
var s3 = new AWS.S3();
s3.listObjects(params, function(err, data) {
    if(err) console.log(err, err.stack);
    else    console.log(data);
});

Visual Studio Code も導入しました

もののついでに、メモ帳で json, node.js を書くのに限界を感じたので、Visual Studio Code をインストールしました1。.NETer には使いやすいです。
https://www.visualstudio.com/ja-jp/products/code-vs.aspx
VSCodeSetup-stable.exe
※インストール手順は省略

初期設定

また PROXY 設定をする必要がありました。VSCode の設定ファイルは男らしい json 形式になっているので、編集します。OS の環境変数に追記してもいいみたいです。

ファイル > 基本設定 > ユーザ設定 より ウィンドウ右側を編集

settings.json
// 既定の設定を上書きするには、このファイル内に設定を挿入します
{
        "http.proxy": "http://USERNAME:PASSWORD@proxyserver.example.com:8080"
}

※編集後、VSCode 再起動します

拡張機能 導入

VSCode Market Place より、人気の拡張機能が確認できます。
https://marketplace.visualstudio.com/vscode/All%20categories?sortBy=Downloads
好きなものを入れればいいんですが、個人的にjavascript,json関連を入れたかったのでこちらを入れてみました。

  • JavaScript (ES6) code snippets
  • Prettify JSON

導入方法

上記リンクからではなく、Visual Studio Code を開いて拡張機能のマークから検索・インストールするのがお手軽です。
image

開いてみる

Visual Studio Code は拡張子から言語判定するので、.js や .json を開いてみて、なんかいい感じになっていることを確認します2
image

(以上、おつかれさまでした)

おまけのエラー集

Proxy 忘れたときのエラー

awc-cli のキー設定をしたあと、認証プロキシの設定をせずに実行したところエラーになりました。

console
aws ec2 describe-security-groups
HTTPSConnectionPool(host='ec2.ap-northeast-1.amazonaws.com', port=443): Max retr
ies exceeded with url: / (Caused by ProxyError('Cannot connect to proxy.', error
('Tunnel connection failed: 403 Forbidden',)))
nodist導入失敗

Windows での node.js のバージョン管理には nodist を入れるのが一般的なようですが、私の環境では nodist update でエラーが起きたり、npm install aws-sdk が反応しなかったりしたので導入を諦めました。

console
>nodist -v
0.8.4

>nodist add 4.4.7

>nodist 4.4.7
4.4.7

>nodist ls
  (x64)
> 4.4.7  (global: 4.4.7)
  6.3.1

> nodist update
update
Installing undefined
C:\Program Files (x86)\Nodist\lib\nodist.js:89
  var major = parseInt(version.split('.')[0])
                              ^

TypeError: Cannot read property 'split' of undefined
    at Function.nodist.isIojs (C:\Program Files (x86)\Nodist\lib\nodist.js:89:31)
    at nodist.getSourceUrlPrefix (C:\Program Files (x86)\Nodist\lib\nodist.js:190:13)
    at nodist.getUrlToExe (C:\Program Files (x86)\Nodist\lib\nodist.js:206:18)
    at nodist.fetch (C:\Program Files (x86)\Nodist\lib\nodist.js:581:18)
    at C:\Program Files (x86)\Nodist\lib\nodist.js:491:10
    at C:\Program Files (x86)\Nodist\lib\nodist.js:416:7
    at _combinedTickCallback (internal/process/next_tick.js:67:7)
    at process._tickCallback (internal/process/next_tick.js:98:9)

> npm install aws-sdk
(反応なし、インストールされない)

>node lists3sample.js
module.js:327
    throw err;
    ^

Error: Cannot find module 'aws-sdk'
    at Function.Module._resolveFilename (module.js:325:15)
    at Function.Module._load (module.js:276:25)
    at Module.require (module.js:353:17)
    at require (internal/module.js:12:17)
    at Object.<anonymous> (D:\Dropbox\3-1-2_uploadobject.txt.js:1:73)
    at Module._compile (module.js:409:26)
    at Object.Module._extensions..js (module.js:416:10)
    at Module.load (module.js:343:32)
    at Function.Module._load (module.js:300:12)
    at Function.Module.runMain (module.js:441:10)

参考リンク

(お世話になりました)


  1. IntelliJ-IDEA でも Eclipse でも秀丸 notepad++ でも Vim でもお好みでどうぞ。 

  2. 現時点ではエディタとして利用していてデバッグは使用していないので、後日記事を書くかもしれません。 

saitotak
羊なので毎日ふわふわしています
infra-workshop
インフラ技術を勉強したい人たちのためのオンライン勉強会です
https://wp.infra-workshop.tech/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした