AWSの学習でAWS Technical Essentialsを進めています。Amazon DynamoDBのデモンストレーションでも1か所動かないところがあったのでその対応について解説します。
動かないポイント
動作確認のアプリケーションが動きません。
原因
【AWS Technical Essentials】S3デモンストレーションの攻略法でリージョンの表示がおかしいと指摘していました。S3のデモンストレーションはリージョンの設定が正しくなくても動くのですが、DynamoDBのデモンストレーションではリージョンを正しく設定していないと動きませんでした。
EC2インスタンスに接続してアプリケーションのプログラムを確認したところ /var/app/api/common/constants.js でリージョンの設定を行っていることが分かります。
// Load .env (Only for non-production environments)
if (process.env.NODE_ENV && process.env.NODE_ENV === 'development') {
require('dotenv').config();
}
exports.NODE_ENV = process.env.NODE_ENV || 'production';
exports.PORT = process.env.PORT || 80;
exports.AWS_PROFILE = process.env.AWS_PROFILE || 'default';
exports.PHOTOS_BUCKET = process.env.PHOTOS_BUCKET || '';
exports.DEFAULT_AWS_REGION = process.env.DEFAULT_AWS_REGION || '';
exports.SHOW_WARNINGS = process.env.SHOW_WARNINGS || 1;
exports.SHOW_ADMIN_TOOLS = process.env.SHOW_ADMIN_TOOLS || 0;
exports.TABLE_NAME = 'Employees';
環境変数DEFAULT_AWS_REGION
を参照していますが、環境変数が設定されていないため動きません。
対応
リージョンを正しく設定する必要があります。環境変数を設定すれば動きます。
環境変数を設定する方法
以下のコマンドで環境変数を設定することができます。この方法だとログアウトすると消えてしまうのでログアウトした場合は再度設定が必要です。
export DEFAULT_AWS_REGION=ap-northeast-1
起動時のスクリプトで環境変数を設定する方法
~/.bashrc ファイルに以下を追加することでサーバ起動時に環境変数が設定されます。source ~/.bashrc
でサーバを再起動することなく環境変数に反映することができます。
# 環境変数の設定
export AWS_REGION=ap-northeast-1
aws configを設定する方法
環境変数とは違いますが、今回のプログラムはAWS SDKで動いています。AWS SDKではconfigでリージョンを設定することができます。aws configure
と入力すると以下のように入力を求められます。
AWS Access Key ID [None]: your_access_key_id
AWS Secret Access Key [None]: your_secret_access_key
Default region name [None]: your_default_region
Default output format [None]: json
入力が終わると ~/.aws/config が作成されます。このファイルを編集することでSDKの動きを制御することができます。
[default]
region = ap-northeast-1
output = json
config の内容は aws configure list
で確認することができます。
Name Value Type Location
---- ----- ---- --------
profile <not set> None None
access_key ****************EYOU iam-role
secret_key ****************LNzo iam-role
region ap-northeast-1 config-file ~/.aws/config
aws configを作成しただけでは使用されません。export AWS_SDK_LOAD_CONFIG=1
で環境変数AWS_SDK_LOAD_CONFIGを設定することで AWS SDKで config が使用されます。
動作確認
正常にデータを登録することができました。
まとめ
今回はデモンストレーションが動かなかったことで、AWS SDKのプログラムでリージョンを設定する方法を学ぶことができました。この記事を書くにあたり sudo
コマンドで失敗しました。そのあたりも今度書きたいと思います。AWS Technical Essentialsも終盤です。あと少し頑張っていきましょう!
コメント