📑

AWS Copilotを用いたOmeka Sデータの定期バックアップ

2022/06/24に公開

概要

先日、Omeka Sのデータをダウンロードするプログラムを作成しました。

https://zenn.dev/nakamura196/articles/c36dc0f4fc8fb8

今回は、AWS Copilotを使用して、上記のプログラムを定期的に実行してみます。

AWS Copilotのインストール

以下を参考にしてください。

https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/AWS_Copilot.html

ファイルの準備

任意の場所で、Dockerfilemain.sh.envの3ファイルを作成します。

Dockerfile

FROM python:3

COPY *.sh .

CMD sh main.sh

main.sh

set -e

export output_dir=../docs
# Omeka Sからデータをダウンロードするプログラム
export repo_tool=https://github.com/nakamura196/omekas_backup.git

dir_tool=tool
dir_dataset=dataset

# フォルダが存在したら
if [ -d $dir_tool ]; then
  rm -rf $dir_tool
  rm -rf $dir_dataset
fi

# clone
git clone --depth 1 $repo_tool $dir_tool
git clone --depth 1 $repo_dataset $dir_dataset

# requirements.txt
cd $dir_tool
pip install --upgrade pip
pip install -r requirements.txt

# 実行
cd src
sh main.sh

# copy
odir=../../$dir_dataset/$subdir
mkdir -p $odir
cd $odir
cp -r ../../$dir_tool/data .
cp -r ../../$dir_tool/docs .

# git
git status
git add .
git config user.email "$email"
git config user.name "$name"
git commit -m "update"
git push

# 後処理
cd ../../
rm -rf $dir_tool
rm -rf $dir_dataset

.env

api_url=https://dev.omeka.org/omeka-s-sandbox/api
github_url=https://<個人アクセストークン>@github.com/<ユーザ名>/<リポジトリ名>.git
username=nakamura
email=nakamura@example.org
dirname=dev

以下、説明です。

項目 説明 値の例 備考
api_url 対象とするOmeka SのAPIのURL https://dev.omeka.org/omeka-s-sandbox/api -
github_url 保存先のgithubリポジトリのurl https://<個人アクセストークン>@github.com/<ユーザ名>/<リポジトリ名>.git Personal access tokenを含めることで、本プログラムの実行結果を当該のGitHubリポジトリに反映することができます。
username コミット用のユーザ名 nakamura -
mail コミット用のメールアドレス nakamura@example.org -
dirname 保存先のgithubリポジトリに作成するディレクトリ dev -

AWS Copilotの実行

以下のようにcopilot initを実行します。いくつかの質問に回答する必要がありますが、これだけでAmazon ECSへのデプロイが可能です。

% ls
Dockerfile	main.sh
% copilot init
Welcome to the Copilot CLI! We're going to walk you through some questions
to help you get set up with a containerized application on AWS. An application is a collection of
containerized services that operate together.

Use existing application: No
Application name: omekas-backup
Workload type: Scheduled Job
Job name: omekas-backup-job
Dockerfile: ./Dockerfile
Schedule type: Rate
Rate: 1h
Ok great, we'll set up a Scheduled Job named omekas-backup-job in application omekas-backup running on the schedule @every 1h.

✔ Created the infrastructure to manage services and jobs under application omekas-backup.

✔ The directory copilot will hold service manifests for application omekas-backup.

Note: Architecture type arm64 has been detected. We will set platform 'linux/x86_64' instead. If you'd rather build and run as architecture type arm64, please change the 'platform' field in your workload manifest to 'linux/arm64'.
✔ Wrote the manifest for job omekas-backup-job at copilot/omekas-backup-job/manifest.yml
Your manifest contains configurations like your container size and job schedule (@every 1h).

✔ Created ECR repositories for job omekas-backup-job.

All right, you're all set for local development.
Deploy: No

上記を実行後、copilot/{service name}/manifest.ymlの末尾などに以下を追加します。環境変数を追加します。

# The manifest for the "omekas-backup-job" job.
# Read the full specification for the "Scheduled Job" type at:
#  https://aws.github.io/copilot-cli/docs/manifest/scheduled-job/

# Your job name will be used in naming your resources like log groups, ECS Tasks, etc.
name: omekas-backup-job
type: Scheduled Job

...

# 以下を追加
env_file: .env

その後、以下のコマンドにより、デプロイが可能です。ファイルなどを修正した際にも、以下のコマンドで更新することができます。

% copilot deploy

まとめ

Amazon ECSを用いて、Omeka Sのデータを定期的にバックアップする方法を紹介しました。Omeka Sのデータバックアップなどの参考になりましたら幸いです。

Discussion