📑
AWS Copilotを用いたOmeka Sデータの定期バックアップ
概要
先日、Omeka Sのデータをダウンロードするプログラムを作成しました。
今回は、AWS Copilotを使用して、上記のプログラムを定期的に実行してみます。
AWS Copilotのインストール
以下を参考にしてください。
ファイルの準備
任意の場所で、Dockerfile
、main.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 | - |
コミット用のメールアドレス | 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