はじめに
こんにちは、クラウド事業部の山路です。
今回もAWS Application Migration Service (以降AWS MGN) の機能を紹介します。
AWS MGNは既存のサーバーを主にRehost形式でAWSに移行するのをサポートするサービスですが、移行に合わせてサーバーを更新したい、AWS上での運用に向けて設定変更したい、というケースもあるかと思います。
今回はそういったときに利用できる機能として、Post-launch actionを紹介します。
Post-launch actionとは
Post-launch actionは、AWS MGNのソースサーバーからテスト・カットオーバーサーバーを起動したのちに、特定の処理を自動的に実行する機能です。
Post-launch actionはAWS Systems Managerの機能を利用して実行されます。そのため、Post-launch actionはSystems Manager Agent (SSM Agent) の利用が前提となり、この機能を有効化すると自動的にSSM AgentのインストールがActionとして設定されます。
また、Post-launch actionは、AWSによってあらかじめ用意されたアクション (Predefined post-launch action) と、利用者が設定するアクション (Custom post-launch action) の2種類があります。
Predefined post-launch action
Predefined post-launch actionは、現在19種類の処理から選択できます。ただしそのうちのSSM Agentのインストール処理は、Post-launch actionを有効化すると自動的についてくる処理です。
ここではPredefined actionからいくつかの例を紹介します。
- OSやライセンスの更新:
Windows upgrade
というActionは、ソースサーバーがWindowsの場合、指定のバージョンにWindowsをアップデートする処理を実行します。これに似た処理に、ソースサーバーのOSがCentOsの場合、Rocky Linuxに変換するCentOS to Rocky
というActionもあります。 - サーバーへのインストール・設定変更:
CloudWatch agent installation
というActionを使用すると、テスト・カットオーバーサーバーにCloudWatch agentのインストールと設定を実行します。 - 起動後の状態確認:
EC2 connectivity check
は、サーバー起動後、あらかじめ設定したIPアドレス・ポートに対して、ネットワーク疎通を確認します。似たようなものに、起動後のプロセス確認をするProcess status validation
というActionもあります。
Custom post-launch action
Custom post-launch actionは、Systems Managerドキュメントから利用するものを選択します。Custom post-launch actionの設定項目はPredefined actionと共通していますが、ここで一部紹介します。
このアクションをアクティブ化する
: 作成したActionを有効化するか否か指定します。Systems Managerドキュメント名
: Actionで使用するSystems Managerドキュメントを選択します。順序
: 各Actionは実行順序をもち、番号の若いほど先に実行されます。Predeined Actionは1 - 1,000
、Custom Actionは1,001 - 10,000
の中で選択します。オペレーションシステム
: 対象のサーバーのOSを指定します。Windows
Linux
もしくは両方を指定できます。アクションパラメータ
: 選択したSystems Managerドキュメントによっては、追加の設定項目が表示されます。
※詳細な設定項目は AWSドキュメント を参照してください。
Post-launch Actionを利用する
ここからは実際にpost-launch actionを動かします。今回はPredefined / Custom actionの両方を設定し、それぞれ以下のActionを利用しました
- Predeined:
CloudWatch agent installation
- Custom:
AWS-HelloWorld
ドキュメントを使用
事前準備: IAMロール・SSMパラメータストアの作成
ソースサーバーを用意する前に、いくつか事前準備を済ませます。まずはIAMロール・SSMパラメータストアの作成を行います。
今回はPredefined post-launch actionでCloudWatch Agentのインストールと設定を実行します。このActionでは、CloudWatch Agentに設定する情報を、SSM Parameter Storeから取得します。そのため、まずはSSM Parameter Storeに値を登録する必要があります。また、AWS MGNで起動したテストサーバーがCloudWatchにアクセスできるよう、IAMロールを付与する必要もあります。
今回は以下のCloudFormationテンプレートから必要なリソースを作成しています。
CloudFormationテンプレート
AWSTemplateFormatVersion: "2010-09-09" Parameters: EnvName: Type: String Default: mgn-example Resources: EC2IAMRole: Type: AWS::IAM::Role Properties: RoleName: !Sub ${EnvName}-role AssumeRolePolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Principal: Service: - ec2.amazonaws.com Action: - sts:AssumeRole Path: / ManagedPolicyArns: - arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore - arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy EC2InstanceProfile: Type: AWS::IAM::InstanceProfile Properties: Path: / Roles: - Ref: EC2IAMRole InstanceProfileName: !Sub ${EnvName}-EC2InstanceProfile CloudWatchConfigParemeter: Type: AWS::SSM::Parameter Properties: Name: AmazonCloudWatch-mgn-config Type: String Value: !Sub | { "agent": { "metrics_collection_interval": 60, "run_as_user": "root" }, "logs": { "logs_collected": { "files": { "collect_list": [ { "file_path": "/var/log/messages", "log_group_name": "messages", "log_stream_name": "{instance_id}", "retention_in_days": 1 } ] } } }, "metrics": { "aggregation_dimensions": [ [ "InstanceId" ] ], "append_dimensions": { "AutoScalingGroupName": "${!aws:AutoScalingGroupName}", "ImageId": "${!aws:ImageId}", "InstanceId": "${!aws:InstanceId}", "InstanceType": "${!aws:InstanceType}" }, "metrics_collected": { "disk": { "measurement": [ "used_percent" ], "metrics_collection_interval": 60, "resources": [ "*" ] }, "mem": { "measurement": [ "mem_used_percent" ], "metrics_collection_interval": 60 }, "statsd": { "metrics_aggregation_interval": 60, "metrics_collection_interval": 60, "service_address": ":8125" } } } }
また、AWS MGNで起動するサーバーが必要なIAM権限を持つよう、Launch templateを一部修正します。上記CloudFormationテンプレートで作成したEC2 InstanceProfileを指定し、起動後のサーバーが適切なIAMポリシーを付与されるようにします。
事前準備: Post-launch actionの設定
続いてPost-launch actionを設定します。Post-launch actionの設定は、設定後に登録されたソースサーバーに対して有効となります。そのため、まずはPost-launch actionを定義する必要があります。
Post-launch actionを始めて利用する場合、まずは機能を有効化する必要があります。Post-launch actionの設定画面に移動すると以下のような画面が表示されるので、「編集」を選択します。
編集画面では、SSM Agentのインストールの有効化、Post-launch actionの実行対象のサーバーを選択します。ここでは テストインスタンスのみ
を選択しました。
Post-launch actionを有効化したので、まずはPredefined actionの設定をします。Post-launch actionを有効化するとPredefined actionのリストが表示されるので、その中から CloudWatch agent installation
を選択し、「編集」ボタンを選択します。
編集画面ではまず このアクションを有効化する
を選択します。またアクションパラメータの parameterStoreName
に、先ほど作成したSSM Parameter Store中のパラメータ名を入力します。
続いてCustom post-launch actionの設定をします。Post-launch actionの画面から アクションの作成
を選択します。
設定画面では、以下のようにパラメータ等を指定しました。
- アクション名 :
aws-helloworld
- Systems Managerドキュメント名 :
AWS-HelloWorld
- 順序 :
1001
- オペレーティングシステム :
WindowsおよびLinux
テストサーバーの作成
事前準備を完了したので、ソースサーバーを追加し、テストサーバーの作成を行います。
Post-launch actionを設定していると、テストサーバーを作成後、Actionの実行状況をAWS MGNの画面から確認できます。
動作確認
Post-launch actionが完了したら、それぞれ動作確認をします。
今回のCloudWatch agentの設定では、メトリクス・ログの設定をしています。まずメトリクス画面を見ると、設定したメトリクスが取得できていることを確認できます。
次にログのほうですが、今回はテストサーバーに一度ログインし、/var/log/messages
ファイルを作成、テスト用のメッセージを入力しました。その結果CloudWatchにも同様のメッセージを確認できます。
次にCustom actionのほうですが、 AWS-HelloWorld
はサーバーに設定変更などを行うものではなく、Systems Managerからの操作を確認するためのものです。Custom actionの実行ログを確認すると、問題なく実行されたことを確認できました。
最後に
弊社はAWSアドバンスドティアサービスパートナー認定を受けております。また以下のようにAWSの活用を支援するサービスも行っているので、何かご相談したいことがあればお気軽にご連絡ください。