#🔷 現象
CloudWatch logsのログを、S3のバケットにエクスポートする処理を用意。
'use strict';
const aws = require('aws-sdk');
aws.config.update({region: 'ap-northeast-1'}); // リージョン指定
/**
* メイン処理
* @param event : 呼び出し元サービスから渡される値
* @param context : AWS側の各種情報
* @param callback : 呼び出し元サービスへ返す値
*
*/
exports.handler = (event, context, callback) => {
const cloudwatchlogs = new aws.CloudWatchLogs();
let params;
/*
"destination"で設定したS3バケットに、"destinationPrefix"で設定したフォルダを作り、
"logGroupName"で設定したCludWatchのロググループのlogをexportする。
exportするlogの範囲は、"from"から"to"で設定した範囲。
*/
params = {
'destination': 'hoge',
'from': 1546905600000,
'to': 1546992000000,
'logGroupName': '/aws/apigateway/piyo',
'destinationPrefix': 'fuga',
'taskName': 'testTask'
};
/* logのexport処理 */
cloudwatchlogs.createExportTask(params, (err, data) => {
let response;
if (err) {
console.log(err, err.stack);
response = err.stack;
} else {
console.log(data);
response = data;
}
callback(null, response);
});
};
これを実行したところ、以下のようなエラーが発生。
ResourceNotFoundException: The specified log group does not exist.
(訳 : 指定されたロググループは存在しません。)
ロググループ名の不備かと思ったが問題なし。
一応、バケット名や権限周りも確認したが、問題なし。
#🔷 原因
結局、原因はリージョンの設定不備。
ソースの4行目で東京リージョンを指定しているが、本Lambdaはバージニア北部リージョン。
よって、以下のようにリージョンを修正したら、無事に動きました。
// aws.config.update({region: 'ap-northeast-1'}); // リージョン指定
aws.config.update({region: 'us-east-1'}); // リージョン指定
地味にハマったので、ソースを使い回す時とかは、リージョン設定は要注意です。