DR Orchestrator Framework を使用してリージョン間のフェイルオーバーとフェイルバックを自動化する - AWS 規範ガイダンス

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

DR Orchestrator Framework を使用してリージョン間のフェイルオーバーとフェイルバックを自動化する

作成者: Jitendra Kumar (AWS)、Oliver Francis (AWS)、Pavithra Balasubramanian (AWS)

コードリポジトリ: aws-cross-region-dr-databases

環境:本稼働

テクノロジー: データベース、インフラストラクチャ、移行、モダナイゼーション

AWS サービス: Amazon Aurora、AWS CloudFormation、Amazon ElastiCache、AmazonRDS、AWSStep Functions

[概要]

このパターンでは、DR Orchestrator Framework を使用して、エラーが発生しやすい手動ステップをオーケストレーションおよび自動化して、Amazon Web Services (AWS) リージョン全体でディザスタリカバリを実行する方法について説明します。このパターンは、次のデータベースを対象としています。

  • Amazon Relational Database Service (Amazon RDS) for My SQL、Amazon RDS for Postgre SQL、または Amazon RDS for MariaDB

  • Amazon Aurora My SQL互換エディションまたは Amazon Aurora Postgre SQL互換エディション (一元化されたファイルを使用)

  • Amazon ElastiCache (Redis OSS)

DR Orchestrator Framework の機能を実証するには、2 つの DB インスタンスまたはクラスターを作成します。プライマリは にあり AWS リージョン us-east-1、セカンダリは にありますus-west-2。これらのリソースを作成するには、aws-cross-region-dr-databases GitHub リポジトリの App-Stackフォルダにある AWS CloudFormation テンプレートを使用します。

前提条件と制限

一般的な前提条件

エンジン固有の前提条件

  • Amazon Aurora – 2 つの で少なくとも 1 つの Aurora グローバルデータベースが使用可能である必要があります AWS リージョン。をプライマリリージョンus-east-1として使用し、 をセカンダリリージョンus-west-2として使用できます。

  • Amazon ElastiCache (Redis OSS) — ElastiCache グローバルデータストアは 2 つの で利用できる必要があります AWS リージョン。プライマリリージョンuse us-east-1として を使用し、セカンダリリージョンus-west-2として を使用できます。

Amazon RDS の制限事項

  • DR Orchestrator Framework は、フェイルオーバーまたはフェイルバックを実行する前にレプリケーションの遅延を確認しません。レプリケーションの遅延は手動でチェックする必要があります。

  • このソリューションは、1 つのリードレプリカを持つプライマリデータベースインスタンスを使用してテストされています。複数のリードレプリカを使用する場合は、本番環境に実装する前に、ソリューションを徹底的にテストしてください。

Aurora の制限

  • 機能の可用性とサポートは、各データベースエンジンの特定のバージョンと によって異なります AWS リージョン。クロスリージョンレプリケーションの機能およびリージョンの可用性の詳細については、「クロスリージョンリードレプリカ」を参照してください。

  • Aurora グローバルデータベースには、サポートされている Aurora DB インスタンスクラスと の最大数に関する特定の設定要件があります AWS リージョン。詳細については、「Amazon Aurora グローバルデータベースの設定要件」を参照してください。

  • このソリューションは、1 つのリードレプリカを持つプライマリデータベースインスタンスを使用してテストされています。複数のリードレプリカを使用する場合は、本番環境に実装する前に、ソリューションを徹底的にテストしてください。

ElastiCache 制限

  • グローバルデータストアのリージョンの可用性と ElastiCache 設定要件については、 ElastiCache ドキュメントの「前提条件と制限」を参照してください。

Amazon p roduct RDS バージョン

Amazon は、次のエンジンバージョンRDSをサポートしています。

  • MySQL – Amazon は、My SQL8.0 と MySQL SQL5.7 の次のバージョンを実行する DB インスタンスRDSをサポートしています。

  • PostgreSQL – Amazon RDS for Postgre のサポートされているバージョンについてはSQL、「利用可能な PostgreSQL データベースバージョン」を参照してください。

  • MariaDB – Amazon は、次のバージョンの MariaDBインスタンスRDSをサポートしています。

    • MariaDB 10.11

    • MariaDB 10.6

    • MariaDB 10.5

Aurora 製品バージョン

ElastiCache (Redis OSS) 製品バージョン

Amazon ElastiCache (Redis OSS) は、以下の Redis バージョンをサポートしています。

  • Redis 7.1 (拡張)

  • Redis 7.0 (拡張)

  • Redis 6.2 (拡張)

  • Redis 6.0 (拡張)

  • Redis 5.0.6 (拡張)

詳細については、「サポートされている ElastiCache (Redis OSS) バージョン」を参照してください。

アーキテクチャ

Amazon RDSアーキテクチャ

Amazon RDSアーキテクチャには、次のリソースが含まれています。

  • クライアントの読み取り/書き込みアクセスを持つプライマリリージョン (us-east-1) で作成されたプライマリ Amazon RDS DB インスタンス

  • クライアントの読み取り専用アクセスを持つセカンダリリージョン (us-west-2) RDS で作成された Amazon リードレプリカ

  • プライマリリージョンとセカンダリリージョンの両方にデプロイされた DR Orchestrator Framework

1 つの AWS アカウントの 2 リージョンRDSアーキテクチャの図。

図に示す内容は以下のとおりです。

  1. プライマリインスタンスとセカンダリインスタンス間の非同期レプリケーション

  2. プライマリリージョンのクライアントの読み取り/書き込みアクセス

  3. セカンダリリージョンのクライアントに対する読み取り専用アクセス

Aurora アーキテクチャ

Amazon Aurora アーキテクチャには、次のリソースが含まれています。

  • アクティブライターエンドポイントを使用してプライマリリージョン (us-east-1) で作成されたプライマリ Aurora DB クラスター

  • 非アクティブライターエンドポイントを使用してセカンダリリージョン (us-west-2) で作成された Aurora DB クラスター

  • プライマリリージョンとセカンダリリージョンの両方にデプロイされた DR Orchestrator Framework

1 つの AWS アカウントでの 2 つのリージョンの Aurora デプロイの図。

図に示す内容は以下のとおりです。

  1. プライマリクラスターとセカンダリクラスター間の非同期レプリケーション

  2. アクティブライターエンドポイントを持つプライマリ DB クラスター

  3. 非アクティブライターエンドポイントを持つセカンダリ DB クラスター

ElastiCache (Redis OSS) アーキテクチャ

Amazon ElastiCache (Redis OSS) アーキテクチャには、次のリソースが含まれています。

  • 2 つのクラスターで作成された ElastiCache (Redis OSS) グローバルデータストア:

    1. プライマリリージョンのプライマリクラスター (us-east-1

    2. セカンダリリージョンのセカンダリクラスター (us-west-2

  • 2 つのクラスター間の 1.2 TLS 暗号化による Amazon クロスリージョンリンク

  • プライマリリージョンとセカンダリリージョンの両方でデプロイされた DR Orchestrator Framework

Amazon クロスリージョンリンクを使用した 2 リージョン ElastiCache デプロイの図。

自動化とスケール

DR Orchestrator Framework はスケーラブルで、複数の AWS データベースのフェイルオーバーまたはフェイルバックを並行してサポートします。

次のペイロードコードを使用して、アカウント内の複数の AWS データベースをフェイルオーバーできます。この例では、3 つの AWS データベース (Aurora My SQL互換または Aurora Postgre SQL互換などの 2 つのグローバルデータベース、および 1 つの Amazon RDS for MySQL インスタンス) が DR リージョンにフェイルオーバーします。

{ "StatePayload": [ { "layer": 1, "resources": [ { "resourceType": "PlannedFailoverAurora", "resourceName": "Switchover (planned failover) of Amazon Aurora global databases (MySQL)", "parameters": { "GlobalClusterIdentifier": "!Import dr-globaldb-cluster-mysql-global-identifier", "DBClusterIdentifier": "!Import dr-globaldb-cluster-mysql-cluster-identifier" } }, { "resourceType": "PlannedFailoverAurora", "resourceName": "Switchover (planned failover) of Amazon Aurora global databases (PostgreSQL)", "parameters": { "GlobalClusterIdentifier": "!Import dr-globaldb-cluster-postgres-global-identifier", "DBClusterIdentifier": "!Import dr-globaldb-cluster-postgres-cluster-identifier" } }, { "resourceType": "PromoteRDSReadReplica", "resourceName": "Promote RDS for MySQL Read Replica", "parameters": { "RDSInstanceIdentifier": "!Import rds-mysql-instance-identifier", "TargetClusterIdentifier": "!Import rds-mysql-instance-global-arn" } } ] } ] }

ツール

AWS サービス

  • Amazon Aurora は、クラウド用に構築され、MySQL および Postgre と互換性があるフルマネージドリレーショナルデータベースエンジンですSQL。

  • Amazon ElastiCache は、 で分散インメモリキャッシュ環境を設定、管理、スケーリングするのに役立ちます AWS クラウド。このパターンは Amazon ElastiCache (Redis ) を使用しますOSS。

  • AWS Lambda は、サーバーのプロビジョニングや管理を行うことなくコードを実行できるコンピューティングサービスです。必要に応じてコードを実行し、自動的にスケーリングするため、課金は実際に使用したコンピューティング時間に対してのみ発生します。このパターンでは、Lambda 関数が AWS Step Functions によってステップの実行に使用されます。

  • Amazon Relational Database Service (Amazon RDS) は、 でリレーショナルデータベースを設定、運用、スケーリングするのに役立ちます AWS クラウド。このパターンは、Amazon RDS for My SQL、Amazon RDS for Postgre SQL、および Amazon RDS for MariaDB をサポートしています。

  • AWS SDK for Python (Boto3) は、Python アプリケーション、ライブラリ、またはスクリプトを と統合するのに役立ちます AWS のサービス。このパターンでは、Boto3 APIs はデータベースインスタンスまたはグローバルデータベースとの通信に使用されます。

  • AWS Step Functions は、 AWS Lambda 関数やその他の を組み合わせてビジネスクリティカルなアプリケーション AWS のサービス を構築するのに役立つサーバーレスオーケストレーションサービスです。このパターンでは、Step Functions ステートマシンを使用して、データベースインスタンスまたはグローバルデータベースのクロスリージョンフェイルオーバーとフェイルバックをオーケストし、実行します。

コードリポジトリ

このパターンのコードは、 の aws-cross-region-dr-databases リポジトリで使用できます GitHub。

エピック

タスク説明必要なスキル

GitHub リポジトリをクローンします。

リポジトリのクローンを作成するには、次のコマンドを実行します。

git clone https://github.com/aws-samples/aws-cross-region-dr-databases.git
AWS DevOps、AWS管理者

Lambda 関数コードを .zip ファイルアーカイブにパッケージ化します。

Lambda 関数のアーカイブファイルを作成して、DR Orchestrator Framework の依存関係を含めます。

cd <YOUR-LOCAL-GIT-FOLDER>/DR-Orchestration-artifacts bash scripts/deploy-orchestrator-sh.sh
AWS 管理者

S3 バケットを作成します。

DR Orchestrator Framework を最新の設定とともに保存するには、S3 バケットが必要です。2 つの S3 バケットを作成します。1 つはプライマリリージョン (us-east-1)、もう 1 つはセカンダリリージョン () ですus-west-2

  • dr-orchestrator-xxxxxx-us-east-1

  • dr-orchestrator-xxxxxx-us-west-2

をランダムな値xxxxxxに置き換えて、バケット名を一意にします。

AWS 管理者

サブネットとセキュリティグループを作成します。

プライマリリージョン (us-east-1) とセカンダリリージョン () の両方でus-west-2、 に Lambda 関数のデプロイ用に 2 つのサブネットと 1 つのセキュリティグループを作成しますVPC。

  • subnet-XXXXXXX

  • subnet-YYYYYYY

  • sg-XXXXXXXXXXXX

AWS 管理者

DR Orchestrator パラメータファイルを更新します。

<YOUR-LOCAL-GIT-FOLDER>/DR-Orchestration-artifacts/cloudformation フォルダで、次の DR Orchestrator パラメータファイルを更新します。

  • Orchestrator-Deployer-parameters-us-east-1.json

  • Orchestrator-Deployer-parameters-us-west-2.json

x および をリソースの名前yに置き換えて、次のパラメータ値を使用します。

[ { "ParameterKey": "TemplateStoreS3BucketName", "ParameterValue": "dr-orchestrator-xxxxxx-us-east-1" }, { "ParameterKey": "TemplateVPCId", "ParameterValue": "vpc-xxxxxx" }, { "ParameterKey": "TemplateLambdaSubnetID1", "ParameterValue": "subnet-xxxxxx" }, { "ParameterKey": "TemplateLambdaSubnetID2", "ParameterValue": "subnet-yyyyyy" }, { "ParameterKey": "TemplateLambdaSecurityGroupID", "ParameterValue": "sg-xxxxxxxxxx" } ]
AWS 管理者

DR Orchestrator Framework コードを S3 バケットにアップロードします。

コードは、ローカルディレクトリよりも S3 バケットの方が安全です。すべてのファイルとサブフォルダを含むDR-Orchestration-artifactsディレクトリを S3 バケットにアップロードします。

コードをアップロードするには、以下を実行します。

  1. AWS Management Consoleにサインインします。

  2. Amazon S3 コンソールに移動します。

  3. dr-orchestrator-xxxxxx-us-east-1 bucket を選択します。

  4. アップロード を選択し、フォルダの追加 を選択します。

  5. DR-Orchestration-artifacts フォルダを選択します。

  6. [アップロード] を選択します。

  7. dr-orchestrator-xxxxxx-us-west-2 バケットを選択します。

  8. ステップ 4~7 を繰り返します。

AWS 管理者

DR Orchestrator Framework をプライマリリージョンにデプロイします。

DR Orchestrator Framework をプライマリリージョン (us-east-1) にデプロイするには、次のコマンドを実行します。

cd <YOUR-LOCAL-GIT-FOLDER>/DR-Orchestration-artifacts/cloudformation aws cloudformation deploy \ --region us-east-1 \ --stack-name dr-orchestrator \ --template-file Orchestrator-Deployer.yaml \ --parameter-overrides file://Orchestrator-Deployer-parameters-us-east-1.json \ --capabilities CAPABILITY_AUTO_EXPAND CAPABILITY_NAMED_IAM CAPABILITY_IAM \ --disable-rollback
AWS 管理者

DR Orchestrator Framework をセカンダリリージョンにデプロイします。

セカンダリリージョン (us-west-2) で、次のコマンドを実行します。

cd <YOUR-LOCAL-GIT-FOLDER>/DR-Orchestration-artifacts/cloudformation aws cloudformation deploy \ --region us-west-2 \ --stack-name dr-orchestrator \ --template-file Orchestrator-Deployer.yaml \ --parameter-overrides file://Orchestrator-Deployer-parameters-us-west-2.json \ --capabilities CAPABILITY_AUTO_EXPAND CAPABILITY_NAMED_IAM CAPABILITY_IAM \ --disable-rollback
AWS 管理者

デプロイメントを確認する

AWS CloudFormation コマンドが正常に実行されると、次の出力が返されます。

Successfully created/updated stack - dr-orchestrator

または、 AWS CloudFormation コンソールに移動してdr-orchestratorスタックのステータスを確認できます。

AWS 管理者
タスク説明必要なスキル

データベースサブネットとセキュリティグループを作成します。

でVPC、プライマリ (us-east-1) リージョンとセカンダリ () リージョンの両方で、DB インスタンスまたはグローバルデータベース用に 2 つのサブネットと 1 us-west-2つのセキュリティグループを作成します。

  • subnet-XXXXXX

  • subnet-XXXXXX

  • sg-XXXXXXXXXX

AWS 管理者

プライマリ DB インスタンスまたはクラスターのパラメータファイルを更新します。

<YOUR LOCAL GIT FOLDER>/App-Stack フォルダで、プライマリリージョンのパラメータファイルを更新します。

Amazon RDS

RDS-MySQL-parameter-us-east-1.json ファイルで、作成したリソースの名前DBSecurityGroupSubnetIdsと を更新します。

{ "Parameters": { "SubnetIds": "subnet-xxxxxx,subnet-xxxxxx", "DBSecurityGroup": "sg-xxxxxxxxxx", "MySqlGlobalIdentifier":"rds-mysql-instance", "InitialDatabaseName": "mysqldb", "DBPortNumber": "3789", "PrimaryRegion": "us-east-1", "SecondaryRegion": "us-west-2", "KMSKeyAliasName": "rds/rds-mysql-instance-KmsKeyId" } }

Amazon Aurora

Aurora-MySQL-parameter-us-east-1.json ファイルで、作成したリソースの名前DBSecurityGroupSubnetIdsと を更新します。

{ "Parameters": { "SubnetIds": "subnet1-xxxxxx,subnet2-xxxxxx", "DBSecurityGroup": "sg-xxxxxxxxxx", "GlobalClusterIdentifier":"dr-globaldb-cluster-mysql", "DBClusterName":"dbcluster-01", "SourceDBClusterName":"dbcluster-02", "DBPortNumber": "3787", "DBInstanceClass":"db.r5.large", "InitialDatabaseName": "sampledb", "PrimaryRegion": "us-east-1", "SecondaryRegion": "us-west-2", "KMSKeyAliasName": "rds/dr-globaldb-cluster-mysql-KmsKeyId" } }

Amazon ElastiCache (Redis OSS)

ElastiCache-parameter-us-east-1.json ファイルで、作成したリソースの名前DBSecurityGroupSubnetIdsと を更新します。

{ "Parameters": { "CacheNodeType": "cache.m5.large", "DBSecurityGroup": "sg-xxxxxxxxxx", "SubnetIds": "subnet-xxxxxx,subnet-xxxxxx", "EngineVersion": "5.0.6", "GlobalReplicationGroupIdSuffix": "demo-redis-global-datastore", "NumReplicas": "1", "NumShards": "1", "ReplicationGroupId": "demo-redis-cluster", "DBPortNumber": "3788", "TransitEncryption": "true", "KMSKeyAliasName": "elasticache/demo-redis-global-datastore-KmsKeyId", "PrimaryRegion": "us-east-1", "SecondaryRegion": "us-west-2" } }
AWS 管理者

DB インスタンスまたはクラスターをプライマリリージョンにデプロイします。

インスタンスまたはクラスターをプライマリリージョン (us-east-1) にデプロイするには、データベースエンジンに基づいて次のコマンドを実行します。

Amazon RDS

cd <YOUR-LOCAL-GIT-FOLDER>/App-Stack aws cloudformation deploy \ --region us-east-1 \ --stack-name rds-mysql-app-stack \ --template-file RDS-MySQL-Primary.yaml \ --parameter-overrides file://RDS-MySQL-parameter-us-east-1.json \ --capabilities CAPABILITY_AUTO_EXPAND CAPABILITY_NAMED_IAM CAPABILITY_IAM \ --disable-rollback

Amazon Aurora

cd <YOUR-LOCAL-GIT-FOLDER>/App-Stack aws cloudformation deploy \ --region us-east-1 \ --stack-name aurora-mysql-app-stack \ --template-file Aurora-MySQL-Primary.yaml \ --parameter-overrides file://Aurora-MySQL-parameter-us-east-1.json \ --capabilities CAPABILITY_AUTO_EXPAND CAPABILITY_NAMED_IAM CAPABILITY_IAM \ --disable-rollback

Amazon ElastiCache (Redis OSS)

cd <YOUR-LOCAL-GIT-FOLDER>/App-Stack aws cloudformation deploy \ --region us-east-1 --stack-name elasticache-ds-app-stack \ --template-file ElastiCache-Primary.yaml \ --parameter-overrides file://ElastiCache-parameter-us-east-1.json \ --capabilities CAPABILITY_AUTO_EXPAND CAPABILITY_NAMED_IAM CAPABILITY_IAM \ --disable-rollback

AWS CloudFormation リソースが正常にデプロイされたことを確認します。

AWS 管理者

セカンダリ DB インスタンスまたはクラスターのパラメータファイルを更新します。

<YOUR LOCAL GIT FOLDER>/App-Stack フォルダで、セカンダリリージョンのパラメータファイルを更新します。

Amazon RDS

RDS-MySQL-parameter-us-west-2.json ファイルで、作成したリソースの名前DBSecurityGroupSubnetIDsと を更新します。プライマリ DB インスタンスの AWS CloudFormation スタックの Outputs セクションからMySQLKmsKeyId取得した の値PrimaryRegionKMSKeyArnで を更新します。

{ "Parameters": { "SubnetIds": "subnet-aaaaaaaaa,subnet-bbbbbbbbb", "DBSecurityGroup": "sg-cccccccccc", "MySqlGlobalIdentifier":"rds-mysql-instance", "InitialDatabaseName": "mysqldb", "DBPortNumber": "3789", "PrimaryRegion": "us-east-1", "SecondaryRegion": "us-west-2", "KMSKeyAliasName": "rds/rds-mysql-instance-KmsKeyId", "PrimaryRegionKMSKeyArn":"arn:aws:kms:us-east-1:xxxxxxxxx:key/mrk-xxxxxxxxxxxxxxxxxxxxx" } }

Amazon Aurora

Aurora-MySQL-parameter-us-west-2.json ファイルで、作成したリソースの名前DBSecurityGroupSubnetIDsと を更新します。プライマリ DB インスタンスの AWS CloudFormation スタックの Outputs セクションからAuroraKmsKeyId取得した の値PrimaryRegionKMSKeyArnで を更新します。

{ "Parameters": { "SubnetIds": "subnet1-aaaaaaaaa,subnet2-bbbbbbbbb", "DBSecurityGroup": "sg-cccccccccc", "GlobalClusterIdentifier":"dr-globaldb-cluster-mysql", "DBClusterName":"dbcluster-01", "SourceDBClusterName":"dbcluster-02", "DBPortNumber": "3787", "DBInstanceClass":"db.r5.large", "InitialDatabaseName": "sampledb", "PrimaryRegion": "us-east-1", "SecondaryRegion": "us-west-2", "KMSKeyAliasName": "rds/dr-globaldb-cluster-mysql-KmsKeyId" } }

Amazon ElastiCache (Redis OSS)

ElastiCache-parameter-us-west-2.json ファイルで、作成したリソースの名前DBSecurityGroupSubnetIDsと を更新します。プライマリ DB インスタンスの AWS CloudFormation スタックの Outputs セクションからElastiCacheKmsKeyId取得した の値PrimaryRegionKMSKeyArnで を更新します。

{ "Parameters": { "CacheNodeType": "cache.m5.large", "DBSecurityGroup": "sg-cccccccccc", "SubnetIds": "subnet-aaaaaaaaa,subnet-bbbbbbbbb", "EngineVersion": "5.0.6", "GlobalReplicationGroupIdSuffix": "demo-redis-global-datastore", "NumReplicas": "1", "NumShards": "1", "ReplicationGroupId": "demo-redis-cluster", "DBPortNumber": "3788", "TransitEncryption": "true", "KMSKeyAliasName": "elasticache/demo-redis-global-datastore-KmsKeyId", "PrimaryRegion": "us-east-1", "SecondaryRegion": "us-west-2" } }
AWS 管理者

DB インスタンスまたはクラスターをセカンダリリージョンにデプロイします。

データベースエンジンに基づいて、次のコマンドを実行します。

Amazon RDS

cd <YOUR-LOCAL-GIT-FOLDER>/App-Stack aws cloudformation deploy \ --region us-west-2 \ --stack-name rds-mysql-app-stack \ --template-file RDS-MySQL-DR.yaml \ --parameter-overrides file://RDS-MySQL-parameter-us-west-2.json \ --capabilities CAPABILITY_AUTO_EXPAND CAPABILITY_NAMED_IAM CAPABILITY_IAM \ --disable-rollback

Amazon Aurora

cd <YOUR-LOCAL-GIT-FOLDER>/App-Stack aws cloudformation deploy \ --region us-west-2 \ --stack-name aurora-mysql-app-stack \ --template-file Aurora-MySQL-DR.yaml \ --parameter-overrides file://Aurora-MySQL-parameter-us-west-2.json \ --capabilities CAPABILITY_AUTO_EXPAND CAPABILITY_NAMED_IAM CAPABILITY_IAM \ --disable-rollback

Amazon ElastiCache (Redis OSS)

cd <YOUR-LOCAL-GIT-FOLDER>/App-Stack aws cloudformation deploy \ --region us-west-2 \ --stack-name elasticache-ds-app-stack \ --template-file ElastiCache-DR.yaml \ --parameter-overrides file://ElastiCache-parameter-us-west-2.json \ --capabilities CAPABILITY_AUTO_EXPAND CAPABILITY_NAMED_IAM CAPABILITY_IAM \ --disable-rollback

AWS CloudFormation リソースが正常にデプロイされたことを確認します。

AWS 管理者

関連リソース