AWS Lambda関数からAWS Key Management Service(KMS)を使用していくつかの環境変数を解読し、解読された資格情報を使用してツイートを投稿しようとしています。しかし、Twitterオブジェクトを利用する前に、環境変数の暗号化が解除されていません。これにより、認証が失敗する原因となります。Node.jsを使用して非同期オブジェクトを構築する
メンバ関数を呼び出す前に、Twitterオブジェクトが完全にインスタンス化され/初期化されていることを確認するにはどうすればよいですか?代わりに私は約束を使用すべきですか?
var AWS = require('aws-sdk');
var Twitter = require('twitter');
var s3 = new AWS.S3();
var kms = new AWS.KMS();
function DecryptEnvironmentVariable(creds, varname) {
console.log(`Decrypting environment variable named ${varname}`);
console.log(process.env[varname]);
params = {
CiphertextBlob: process.env[varname]
}
kms.decrypt(params, function (err, data) {
if (err) {
console.log(err);
}
else {
console.log("Successfully decrypted envrionment variable.");
return data.Plaintext;
}
});
}
exports.tweet = function (event, context) {
// Instantiate the Twitter object
var twitterclient = new Twitter({
consumer_key: DecryptEnvironmentVariable('TWITTER_CONSUMER_KEY'),
consumer_secret: DecryptEnvironmentVariable('TWITTER_CONSUMER_SECRET'),
access_token_key: DecryptEnvironmentVariable('TWITTER_ACCESS_TOKEN_KEY'),
access_token_secret: DecryptEnvironmentVariable('TWITTER_ACCESS_TOKEN_SECRET'),
})
// Post a new tweet
twitterclient.post('statuses/update', { status: "messagegoeshere" })
.then(function(tweet) {
console.log("Tweet was successfully posted!");
})
.catch(function(error) {
console.log("Error occurred while posting tweet. :(");
console.log(error);
});
}
FYI AWS SDKは約束をサポートしているので、新しいPromiseですべてをラップするのではなく、 'DecryptEnvironmentVariable'関数で' return kms.decrypt(params).promise() 'のようなことをするだけです。 – idbehold
ニース、私はドキュメントをチェックしたときにそれを見ていませんでしたが、もう一度私はあまりにもハードに見えませんでした – rossipedia
ドキュメントは少し隠されています。基本的に、['KMS.decrypt()'](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/KMS.html#decrypt-property)は、[AWS.Request'](https: //docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Request.html)インスタンスには['promise()'メソッドがあります(https://docs.aws.amazon.com/AWSJavaScriptSDK/latest /AWS/Request.html#promise-property)。 – idbehold