見出し画像

Amplify+AWS BackupでDynamoDBのバックアップをとる

はじめに

GA technologies AI Strategy Center(AISC) Prototypingチームの丸山です!
今回は、AWS AmplifyのGraphQLバックエンドで使用しているDynamoDBのバックアップを、AWS Backupを用いて作成する方法について書きます。

※この記事では、AWS Amplify, AWS Backup, AWS CDKなどの詳しい説明は省いています。

AWS Amplifyについて

AWS Amplifyは、モバイルアプリケーションやWebアプリケーションを簡単に構築できるAWS上のプラットフォームです。
AISCでは実務側の業務改善の一環として、実験的な業務改善用のプロトタイプを素早く作成して、実務側と相談しながらそのプロトタイプを改善していくことが多くあります。
これらのプロトタイプはまだ使われることが未確定な状態であることが多いため、インフラ構築にあまり時間とコストをかけたくありません。
そこで、AWS Amplifyを活用して素早く低コストにインフラを構築し、できるだけプロトタイプの構築に集中できるようにしています。

今回は、AWS Amplifyの中でデータベースとして使用しているDynamoDBのバックアップをAWS Amplify CLIを使用してできるようにします。

AWS Backupについて

AWS Backupは様々なAWS上のサービスのバックアップを一元管理できるサービスです。AWS Backupについての詳しい説明は、クラスメソッド株式会社様の「AWS Backup によるバックアップ取得の全体像をやっぱり絵に描いて理解してみた」という記事がとてもわかりやすいので、こちらを参照していただけるといいと思います。

実際にやってみる

実際に、既存のAmplifyプロジェクトにAWS Backupを追加してみます。
この記事を作成するにあたり、AWS公式が公開している以下の記事を参考にしました。

1. 既存のAmplifyプロジェクトにカスタムリソースを追加する

まず、以下のコマンドで既存のプロジェクトにカスタムリソースを追加します

amplify add custom

この時「How do you want to define this custom resource」という質問には「AWS CDK」を選択するようにしてください。

2. 必要なパッケージをインストール

作成したカスタムリソースのディレクトリまで移動して、package.jsonのdependenciesを以下のように書き換える

{
  ...
  "dependencies": {
    "@aws-amplify/cli-extensibility-helper": "^2.0.0",
    "@aws-cdk/core": "~1.175.0",
    "@aws-cdk/aws-backup": "~1.175.0",
    "@aws-cdk/aws-kms": "~1.175.0",
    "@aws-cdk/aws-iam": "~1.175.0",
    "@aws-cdk/aws-events": "~1.175.0"
  },
  ...
}

ここのバージョンがずれていると、TypeScriptがエラーを出すことがあるので注意してください。

3. AWS CDKを使用してバックアップ用のリソースを作成

AWS公式が提供しているこちらのコードをコピペすれば動きます。
コード内のコメントにも書かれていますが、21行目の第3引数にはAmplifyのプロファイルに設定されているものと同じPrincipalである必要があります。

もし独自にバックアップの日付などを設定したい場合は、backupPlanRulesに以下のように書くことで設定ができます。
設定できる内容については、こちらを参照してください。

backupPlanRules: [
  new backup.BackupPlanRule({
    deleteAfter: Duration.days(7),
    // AWS形式のcron式
    // https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/events/ScheduledEvents.html#CronExpressions
    scheduleExpression: events.Schedule.cron({
      minute: "0",
      hour: "20",
      day: "*",
      month: "*",
      year: "*",
    }),
    ruleName: 'BackupEverydayAndRemoveAfter7Days'
  }),
  backup.BackupPlanRule.weekly(),
  backup.BackupPlanRule.monthly1Year(),
],

4.デプロイ

最後に、作成したカスタムリソースをデプロイします

amplify push

これで、既存のAmplifyプロジェクトにAWS Backupを追加できました

終わりに


AWS Amplifyは便利なサービスですが、データベースのバックアップ機能がデフォルトで存在しなかったため、データの消失に震える毎日でした。
今回初めてAWS CDKとAmplifyのカスタムリソースを使用してみましたが、思ったよりも簡単にAmplifyの外のリソースが追加できたので、今後も使っていこうと思います!


この記事が気に入ったらサポートをしてみませんか?