【お手軽】AWS EC2をOracle Cloud Computeに移行してみた

## はじめに
AWS EC2はクラウドサービスの中で最も代表的なサービスで利用ユーザも多いですが、IaaSの引っ越しという観点でOracle CloudのComputeサービスに移行する手順を備忘録として記載します。

## 前提条件

#### ●移行対象インスタンス情報
基盤：AWS EC2→Oracle Cloud Compute
台数：1台
OS：Ubuntu 20.04.6 LTS
DB：PostgreSQL 12.16
AP： Apache 2.4.41
ソフトウェア：Redmine 4.0

#### ●その他
AWS VPC、OCI VCNは事前に作成済み
AWS VPCのセキュリティグループ、OCI VCNのセキュリティリストは事前設定済み(ポート20と80開放)
httpのみでの通信
IPアドレスは変更となる

## 移行手順イメージ
以下画像のイメージで移行を実施します。
①AWS EC2にてRedmine Serverの構築
②Redmine ServerのサーバイメージをAWS S3にExport
③AWS S3にあるサーバイメージをOCI Object Storageに格納
④OCI Object Storageに格納したサーバイメージからOCI Computeでサーバを作成

※③は手動でS3からダウンロード実施し、手動でObject Storageに格納します

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2471135/082409bb-06da-3239-fba7-acbda8b06865.png)

## 移行手順
## ①AWS EC2にてRedmine Serverの構築
Redmine ServerをEC2で構築します。
今回は以下のスペックで作成を実施しました。
※余談ですが、t2.microだとRedmineのインストールが全く進まなかったのでスペックを向上させました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2471135/4fa9dff3-9296-7a6f-4821-ed5cd2aa2c92.png)

EC2の起動後、Redmineの構築を実施します。
今回はRedmineの構築はメインではないので割愛させていただきます。


参考までに[この手順](https://blog.redmine.jp/articles/4_2/install/ubuntu/)で構築を実施しています。

Redmine構築後、移行確認用にプロジェクトの作成といくつかダミーチケットを発行しておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2471135/55ffe677-ace9-26a3-aa2a-9447cc7d6dd1.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2471135/f563fdfb-5dbb-66b4-1dd2-8173b3ae33ef.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2471135/25e02c04-5f58-8fa5-9f7f-b15be8ef66d4.png)

作業完了後はインスタンスの停止を実施します。
※S3にExportするためにはインスタンスが停止されていることが前提となります

## ②Redmine ServerのサーバイメージをAWS S3にExport
S3にExportするにはインスタンスの停止が前提となるので、停止しているかどうか確認しておきます。

サーバのイメージをS3にExportするためにバケットの作成を実施します。
作成後、アクセス許可設定をしないとExportエラーが発生するため以下を実施します。
①"アクセス許可"タブより"オブジェクト所有者"の編集をクリック
②ACLの有効化に変更
③ACLの編集を実施し、"他のAWSアカウントのアクセス"を追加しオブジェクトに書き込み権限、バケットACLに読み込み権限を付与

※③に関して、被付与者IDは利用リージョンによって異なりますが、参考までに以下が東京/大阪リージョンのIDとなります。
東京リージョン："c4d8eabf8db69dbe46bfe0e517100c554f01200b104d59cd408e777ba442a322"
大阪リージョン："40f22ffd22d6db3b71544ed6cd00c8952d8b0a63a87d58d5b074ec60397db8c9"

[詳細はこちら](https://docs.aws.amazon.com/vm-import/latest/userguide/vmexport.html#vmexport-prerequisites)をご確認ください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2471135/03fc4844-eb7b-e10b-a061-1b77f25585ae.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2471135/0547c1b0-c804-e4cb-cb68-afc8fea320ee.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2471135/9a6daf52-a9e6-22fe-7709-569e74e76efb.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2471135/f194ec60-9901-1ea7-1cae-04517cd2e239.png)


バケットの設定完了後、Redmine ServerのサーバイメージをAWS S3にExportするためにAWS CLIを起動し、以下コマンドを実行します。
```
aws ec2 create-instance-export-task --description '<任意>' --instance-id <instance_id> --target-environment vmware --export-to-s3-task DiskImageFormat=vmdk,ContainerFormat=ova,S3Bucket=<bucket_name>
```

```
[cloudshell-user@ip-10-4-89-97 ~]$ aws ec2 create-instance-export-task --description 'EC2 Migration' --instance-id i-013b006c084e85efd --target-environment vmware --export-to-s3-task DiskImageFormat=vmdk,ContainerFormat=ova,S3Bucket=oci--migration
{
    "ExportTask": {
        "Description": "AWS-To-OCI",
        "ExportTaskId": "export-i-019bcb82b315b3805",
        "ExportToS3Task": {
            "ContainerFormat": "ova",
            "DiskImageFormat": "vmdk",
            "S3Bucket": "oci--migration",
            "S3Key": "export-i-019bcb82b315b3805.ova"
        },
        "InstanceExportDetails": {
            "InstanceId": "i-013b006c084e85efd",
            "TargetEnvironment": "vmware"
        },
        "State": "active"
    }
}

```

問題なくコマンドが完了すればS3のコンソール画面からイメージファイルの確認ができます。
export-<instance ID>.ovaファイルをダウンロードを実施しておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2471135/39b40a97-fe26-e0e4-dd46-6626ca8c5ed6.png)

## ③AWS S3にあるサーバイメージをOCI Object Storageに格納
Object Storageの作成を実施します。なお、すべてデフォルト設定で問題ありません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2471135/0a01752d-9e60-98b8-2e1d-3327ad4efc58.png)

S3からダウンロードしたovaファイルをObject Storageにアップロードします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2471135/a58bb62b-ffa8-6012-51cd-d3590c8f53dd.png)

## ④OCI Object Storageに格納したサーバイメージからOCI Computeでサーバを作成
Computeサービス欄"カスタム・イメージ"にて、"イメージのインポートをクリックします"
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2471135/11a9d68a-2faa-29f9-45a5-8f52c27efd2b.png)

格納したObject Storage及び、ovaファイルを指定して、イメージをインポートします。
　イメージタイプ：VMDK
　起動モード：準仮想化モード
　※デフォルト設定のままとしておきます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2471135/16232652-7101-876e-43be-7681787eca7a.png)


しばらくするとインポートが完了します。
"イメージの作成"をクリックし、OCI Computeの作成を実施します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2471135/9c9f078d-0b0f-abb2-06ca-8b21d43d0747.png)

"イメージとシェイプ"でイメージが今回作成したイメージ名となっていることを確認します。
なお、Shapeの画面にてマシンスペックの調整が可能です。
その他の設定も含めて今回はすべてデフォルト設定のままとしました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2471135/ca49134b-c2a2-f1b0-d37b-c804ea3f51f2.png)

Compute作成完了後、新しく付与されたパブリックIPにてRedmineのアクセスを実施してみます。
無事にログインでき、AWS EC2上で作成したプロジェクトとチケットが確認できました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2471135/00c41ebd-133b-6eb5-a0a3-75f1c4f73a50.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2471135/8c86df77-5220-bd8e-17d6-4156f1a8ad83.png)

## 最後に
今回はEC2からComputeのIaaS領域の移行を実施してみました。
作業自体はすごく簡易的で時間もかからず実施できたので他システムと連携のないような小規模システムであれば即移行も現実的かなと思える内容です。
実際、小規模だろうと本番稼働中のものを移行するとなるとなんやらかんやらを考慮する必要はありますが...

近年、FinOpsと呼ばれる、パブリッククラウドの支出（投資、コスト）に関して最適化を目指す活動いう単語を耳にしました。
システム最適化を目指す上でマルチクラウド化が進んでいく中でいざ別クラウドを採用しようとしても移行手順がネット上に豊富にないのが実情ですので、気になったものや試してみたいものは随時やっていこうかなと思いました。