AWS CLIによるAWS MGN初期化の方法

AWS CLIを利用してAWS Application Migration Serviceを初期化します。
2022.06.17

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

大家好、AWS事業本部の西野です。

AWS Application Migration Service (AWS MGN) のコンソールに初めてアクセスすると、まず始めにReplication Settingsのテンプレート作成が求められます。 このテンプレートを作成したタイミングでAWS MGNがその動作に必要なIAMロールを自動的に作成してくれます。これがAWS MGNの初期化(Initializing)です。

必要な作業をすべてサービス(マネジメントコンソール)が実行してくれるので便利である一方、自動化には不向きです。 そこで、AWS CLIによるAWS MGNの初期化を試してみました。

前提条件

AWS CLI 2.7.7を使用しました。

作業の流れ

  • IAMロールの作成
  • IAMロールへのIAMポリシーアタッチ
  • InitializeServiceの実行
  • Replication Settingsテンプレートの作成

やってみた

IAMロールの作成

必要なIAMロールは下記の6つです。1

IAM Role Path Trusted Entity
AWSApplicationMigrationReplicationServerRole /service-role/ ec2.amazonaws.com
AWSApplicationMigrationConversionServerRole /service-role/ ec2.amazonaws.com
AWSApplicationMigrationMGHRole /service-role/ mgn.amazonaws.com
AWSApplicationMigrationLaunchInstanceWithDrsRole /service-role/ ec2.amazonaws.com
AWSApplicationMigrationLaunchInstanceWithSsmRole /service-role/ ec2.amazonaws.com
AWSApplicationMigrationAgentRole /service-role/ mgn.amazonaws.com

以下のコマンドを実行してIAMロールを作成します。

# AWSApplicationMigrationReplicationServerRole
$ aws iam create-role --path "/service-role/" --role-name AWSApplicationMigrationReplicationServerRole --assume-role-policy-document '{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal": {"Service":"ec2.amazonaws.com"},"Action":"sts:AssumeRole"}]}'

# AWSApplicationMigrationConversionServerRole
$ aws iam create-role --path "/service-role/" --role-name AWSApplicationMigrationConversionServerRole --assume-role-policy-document '{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal": {"Service":"ec2.amazonaws.com"},"Action":"sts:AssumeRole"}]}'

# AWSApplicationMigrationMGHRole
$ aws iam create-role --path "/service-role/" --role-name AWSApplicationMigrationMGHRole --assume-role-policy-document '{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal": {"Service":"mgn.amazonaws.com"},"Action":"sts:AssumeRole"}]}'

# AWSApplicationMigrationLaunchInstanceWithDrsRole
$ aws iam create-role --path "/service-role/" --role-name AWSApplicationMigrationLaunchInstanceWithDrsRole --assume-role-policy-document '{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal": {"Service":"ec2.amazonaws.com"},"Action":"sts:AssumeRole"}]}'

# AWSApplicationMigrationLaunchInstanceWithSsmRole
$ aws iam create-role --path "/service-role/" --role-name AWSApplicationMigrationLaunchInstanceWithSsmRole --assume-role-policy-document '{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal": {"Service":"ec2.amazonaws.com"},"Action":"sts:AssumeRole"}]}'

# AWSApplicationMigrationAgentRole
$ aws iam create-role --path "/service-role/" --role-name AWSApplicationMigrationAgentRole --assume-role-policy-document '{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal": {"Service":"mgn.amazonaws.com"},"Action":"sts:AssumeRole"}]}'

IAMロールへのIAMポリシーアタッチ

IAMロールへのアタッチが必要なIAMポリシーは下表のとおりです。
すべてAWS管理ポリシーであるため、新規にIAMポリシーを作成する必要はありません。

IAM Role IAM Policy
AWSApplicationMigrationReplicationServerRole AWSApplicationMigrationReplicationServerPolicy
AWSApplicationMigrationConversionServerRole AWSApplicationMigrationConversionServerPolicy
AWSApplicationMigrationMGHRole AWSApplicationMigrationMGHAccess
AWSApplicationMigrationLaunchInstanceWithDrsRole AmazonSSMManagedInstanceCore
AWSElasticDisasterRecoveryEc2InstancePolicy
AWSApplicationMigrationLaunchInstanceWithSsmRole AmazonSSMManagedInstanceCore
AWSApplicationMigrationAgentRole AWSApplicationMigrationAgentPolicy_v2

以下のコマンドを実行してIAMロールにIAMポリシーをアタッチします

# AWSApplicationMigrationReplicationServerRole
$ aws iam attach-role-policy --role-name AWSApplicationMigrationReplicationServerRole --policy-arn arn:aws:iam::aws:policy/service-role/AWSApplicationMigrationReplicationServerPolicy

# AWSApplicationMigrationConversionServerRole
$ aws iam attach-role-policy --role-name AWSApplicationMigrationConversionServerRole --policy-arn arn:aws:iam::aws:policy/service-role/AWSApplicationMigrationConversionServerPolicy

# AWSApplicationMigrationMGHRole
$ aws iam attach-role-policy --role-name AWSApplicationMigrationMGHRole --policy-arn arn:aws:iam::aws:policy/service-role/AWSApplicationMigrationMGHAccess

# AWSApplicationMigrationLaunchInstanceWithDrsRole
$ aws iam attach-role-policy --role-name AWSApplicationMigrationLaunchInstanceWithDrsRole --policy-arn arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore
$ aws iam attach-role-policy --role-name AWSApplicationMigrationLaunchInstanceWithDrsRole --policy-arn arn:aws:iam::aws:policy/service-role/AWSElasticDisasterRecoveryEc2InstancePolicy

# AWSApplicationMigrationLaunchInstanceWithSsmRole
$ aws iam attach-role-policy --role-name AWSApplicationMigrationLaunchInstanceWithSsmRole --policy-arn arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore

# AWSApplicationMigrationAgentRole
$ aws iam attach-role-policy --role-name AWSApplicationMigrationAgentRole --policy-arn arn:aws:iam::aws:policy/service-role/AWSApplicationMigrationAgentPolicy_v2

InitializeServiceの実行

以下のコマンドを実行します。

$ aws mgn initialize-service

このコマンドの実行によりAWS MGNのサービスロール(AWSServiceRoleForApplicationMigrationService)が作成されます。

Replication Settingsテンプレートの作成

最後に、以下のコマンドを実行しReplication Settingsのテンプレートを作成します。
必要なパラメータについては下記のドキュメントなどを参照してください。

create-replication-configuration-template

$ aws mgn create-replication-configuration-template \
--associate-default-security-group \
--bandwidth-throttling 0 \
--create-public-ip \
--data-plane-routing PUBLIC_IP \
--default-large-staging-disk-type GP3 \
--ebs-encryption DEFAULT \
--replication-server-instance-type t3.small \
--replication-servers-security-groups-ids '[]' \
--staging-area-subnet-id subnet-01010101abcd0101 \
--staging-area-tags Name=ReplicationServer \
--no-use-dedicated-replication-server

参考

Manually initializing Application Migration Service - Application Migration Service

終わりに

このブログがほんの少しでも世界を良くできれば嬉しいです。
AWS事業本部の西野 (@xiyegen) がお送りしました。


  1. 2022年6月17日現在、公式ドキュメントには必要なIAMロールが網羅されていません。そのため、別アカウントでマネジメントコンソール経由の初期化を実施し必要なIAMロールおよびIAMポリシーを洗い出しています。(2022年7月5日追記: 公式ドキュメントに更新があったためそちらにあわせて手順を修正しました。)