質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

91.37%

  • AWS(Amazon Web Services)

    1300questions

    Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

AWS Lambdaでのmysqldump取得失敗

解決済

回答 2

投稿 2017/11/20 11:56 ・編集 2017/11/20 17:28

  • 評価
  • クリップ 1
  • VIEW 66

th0167

score 0

AWS にて mysqldump の取得を Lambda で自動化しています。
後述する関数コードで正常に取得できていましたが DB のデータ量が増えてから下記のメッセージが出て取得に失敗するようになってしまいました。
Lambda 関数設定画面よりメモリ設定を 1024MB → 1536MB に変更してみましたが、メッセージ内容は変わらず失敗。(後述のメッセージはメモリ値変更後のもの)

対処方法をご教授頂きたく思います。
環境情報を記載します。(足りない情報ありましたら追記致します)

例えばですが、mysqldump コマンドのオプション「--single-transaction」を指定出来れば…とも考えましたが、Node.js上でコマンドオプションの指定は可能なのでしょうか。

 
[Lambdaログ]
(Cloudwatchログに出力されたもの)

START RequestId: 19d4d7ed-cd4b-11e7-a42f-a13c00653d3a Version: $LATEST
END RequestId: 19d4d7ed-cd4b-11e7-a42f-a13c00653d3a
REPORT RequestId: 19d4d7ed-cd4b-11e7-a42f-a13c00653d3a    Duration: 9208.56 ms    Billed Duration: 9300 ms Memory Size: 1536 MB    Max Memory Used: 1536 MB    
RequestId: 19d4d7ed-cd4b-11e7-a42f-a13c00653d3a Process exited before completing request

START RequestId: 19d4d7ed-cd4b-11e7-a42f-a13c00653d3a Version: $LATEST
END RequestId: 19d4d7ed-cd4b-11e7-a42f-a13c00653d3a
REPORT RequestId: 19d4d7ed-cd4b-11e7-a42f-a13c00653d3a    Duration: 9429.58 ms    Billed Duration: 9500 ms Memory Size: 1536 MB    Max Memory Used: 1536 MB    
RequestId: 19d4d7ed-cd4b-11e7-a42f-a13c00653d3a Process exited before completing request

START RequestId: 19d4d7ed-cd4b-11e7-a42f-a13c00653d3a Version: $LATEST
END RequestId: 19d4d7ed-cd4b-11e7-a42f-a13c00653d3a
REPORT RequestId: 19d4d7ed-cd4b-11e7-a42f-a13c00653d3a    Duration: 9621.80 ms    Billed Duration: 9700 ms Memory Size: 1536 MB    Max Memory Used: 1536 MB    
RequestId: 19d4d7ed-cd4b-11e7-a42f-a13c00653d3a Process exited before completing request


 
[Lambda]
・関数コード設定 (ランタイム:Node.js 4.3)
mqldump コマンドで取得後、S3バケットに配置してます。

'use strict';

const AWS = require('aws-sdk');
const mysqlDump = require('mysqldump');
const fs = require('fs');
require('date-utils');

var date = new Date();
var timeStamp = date.toFormat('YYYYMMDDHH24MISS');
// dumpファイルのファイル名
const dumpFileName = 'dump_' + timeStamp + '.sql';
const dumpPath = '/tmp/' + dumpFileName;

// メインの処理
exports.handler = (event, context) => {

      // mysqldumpを実行
      mysqlDump({
        host: process.env.HOST,
        user: process.env.USER,
        password: process.env.PASSWORD,
        database: process.env.DBNAME,
        dest: dumpPath
      }, (err) => {
        // エラーが起こった場合、ログを出力
        if (err) {
          context.fail(err);
          console.log('mysqldump error:' + err);
        } else {
          console.log('mysqldump saved.');
          // mysqldumpの作成が成功した場合、S3へdumpファイルを送信する
          sendS3();
        }
      });

};

// S3へdumpファイルを送信する
function sendS3() {
  const s3 = new AWS.S3();

  var params = {
    Bucket: 'バケット名',
    Key: 'sqlbackup/' + dumpFileName,
    Body: fs.readFileSync(dumpPath)
  };

  // S3にmysqldumpを配置する
  s3.putObject(params, (err) => {
    if (err) {
      console.log('S3 PutObject error:', err);
    } else {
      console.log('mysqldump is uploaded to S3.');
    }
  });
}

・基本設定
メモリ   :1536MB(MAX)
タイムアウト:2分30秒
 
 
[RDS]
エンジン :MySQL 5.7.16
タイプ  :db.m4.2xlarge
ストレージ:30GB

DB 総容量:

mysql> select table_schema, sum(data_length+index_length) /1024 /1024 as MB from 
information_schema.tables where table_schema = database();
+--------------+-----------+
| table_schema | MB        |
+--------------+-----------+
| ***          | 15969.765 |   現在 約15GB
+--------------+-----------+
1 row in set (0.03 sec)
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • th0167

    2017/11/20 18:58

    処理が開始されて直ぐにメモリが一杯になってしまい、処理が落ちてしまって強制終了したのでは、とも考えています。

    キャンセル

  • TaichiYanagiya

    2017/11/21 00:11

    API Gateway から実行ですか? それとも CloudWatch イベントから? ネットで検索すると、API Gateway に 10秒の制限があった(今は 30秒)という Webサイトが見つかるので。

    キャンセル

  • th0167

    2017/11/21 10:17

    実行は Cloudwatch イベントからですね。

    キャンセル

回答 2

+1

JSは全然読めないんですが、

https://github.com/webcaetano/mysqldump/blob/master/index.js#L230

にあるようになんか処理の終了時に一括で取得したデータをファイルに書き込んでいる気がします。。。

なんかIssueも立ってますしこのライブラリは大きなデータベースのダンプには向かない気がします。

(気がします、気がします、ですいません)

投稿 2017/11/20 23:56

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/11/21 10:54

    回答ありがとうございます。
    すいません、私も Node.js は読めないんです・・・質問にある関数コードは別のヒトが作成して私が運用管理しています。

    >このライブラリは大きなデータベースのダンプには向かない気がします。
    自分なりに調べている内に、これは私も感じてきてます・・・

    キャンセル

check解決した方法

0

結局 Lambda での改善は見込めそうにない為、EC2 上で dump 取得コマンドをシェル実行する方向になりました。
Lambda は AWS 側の機能改善を気長に待ちたいと思います。

ご意見/ご回答頂いた皆様、ありがとうございました。
 
 
(12/11 追記)
上記の自己解決を記述して間もなくLambdaの使用メモリ上限が1.5GB→3GBに引き上げられた為、質問で書いたLambda関数コードが成功する様になりました。一旦はそれで解決していますが、今後DBが肥大化していく事を想定すると一時的な解決に過ぎない為、引き続き別の機能を使った解決方法を模索していく事にします。

投稿 2017/11/27 13:04

編集 2017/12/11 10:32

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

ただいまの回答率

91.37%

関連した質問

同じタグがついた質問を見る

  • AWS(Amazon Web Services)

    1300questions

    Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。