この記事では、AWS Marketplace で提供されているMashuサーバーの利用開始手順について説明します。
この手順を実行すると、AWS環境でMashuサーバーを実行してRDSからメタデータを取得できるようになります。
AWS Marketplaceにアクセスして「製品を検出」メニューを選択してください。検索ボックスに「Mashu」と入力して検索して「Mashu Server for AWS」という製品を見つけてください。
「購入オプションを表示」ボタンから「Mashu Server for AWS」をサブスクライブします。「Mashu Server for AWS」自体の料金は無料です。ただし、デプロイしたAWSリソース(API Gateway, AWS Lambda, etc.)の利用料金がかかります。
以下のロールでECS版, Lambda版どちらのデプロイも実行可能です。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "CloudFormationPermissions",
"Effect": "Allow",
"Action": [
"cloudformation:CreateStack",
"cloudformation:UpdateStack",
"cloudformation:DeleteStack",
"cloudformation:DescribeStacks",
"cloudformation:DescribeStackEvents",
"cloudformation:DescribeStackResource",
"cloudformation:DescribeStackResources",
"cloudformation:GetTemplateSummary"
],
"Resource": "*"
},
{
"Sid": "IAMPermissions",
"Effect": "Allow",
"Action": [
"iam:CreateRole",
"iam:DeleteRole",
"iam:GetRole",
"iam:PassRole",
"iam:AttachRolePolicy",
"iam:DetachRolePolicy",
"iam:TagRole",
"iam:UntagRole",
"iam:UpdateAssumeRolePolicy",
"iam:ListAttachedRolePolicies",
"iam:ListRolePolicies"
],
"Resource": "arn:aws:iam::*:role/*"
},
{
"Sid": "EC2Permissions",
"Effect": "Allow",
"Action": [
"ec2:CreateSecurityGroup",
"ec2:DeleteSecurityGroup",
"ec2:DescribeSecurityGroups",
"ec2:AuthorizeSecurityGroupIngress",
"ec2:RevokeSecurityGroupIngress",
"ec2:AuthorizeSecurityGroupEgress",
"ec2:RevokeSecurityGroupEgress",
"ec2:DescribeSecurityGroupRules",
"ec2:DescribeVpcs",
"ec2:DescribeSubnets",
"ec2:CreateTags",
"ec2:DeleteTags",
"ec2:DescribeTags"
],
"Resource": "*"
},
{
"Sid": "LambdaPermissions",
"Effect": "Allow",
"Action": [
"lambda:CreateFunction",
"lambda:DeleteFunction",
"lambda:GetFunction",
"lambda:GetFunctionConfiguration",
"lambda:AddPermission",
"lambda:RemovePermission",
"lambda:UpdateFunctionCode",
"lambda:UpdateFunctionConfiguration",
"lambda:TagResource",
"lambda:UntagResource",
"lambda:ListTags"
],
"Resource": "*"
},
{
"Sid": "CloudWatchLogsPermissions",
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:DeleteLogGroup",
"logs:DescribeLogGroups",
"logs:PutRetentionPolicy",
"logs:ListTagsLogGroup",
"logs:TagLogGroup",
"logs:UntagLogGroup",
"logs:TagResource",
"logs:UntagResource",
"logs:ListTagsForResource"
],
"Resource": "*"
},
{
"Sid": "ApiGatewayPermissions",
"Effect": "Allow",
"Action": [
"apigateway:POST",
"apigateway:GET",
"apigateway:PUT",
"apigateway:PATCH",
"apigateway:DELETE",
"apigateway:UpdateRestApiPolicy"
],
"Resource": "arn:aws:apigateway:*::/*"
},
{
"Sid": "ECSExpressGatewayServicePermissions",
"Effect": "Allow",
"Action": [
"ecs:CreateCluster",
"ecs:DescribeClusters",
"ecs:RegisterTaskDefinition",
"ecs:DeregisterTaskDefinition",
"ecs:DescribeTaskDefinition",
"ecs:CreateExpressGatewayService",
"ecs:UpdateExpressGatewayService",
"ecs:DeleteExpressGatewayService",
"ecs:DescribeExpressGatewayService",
"ecs:DescribeServices",
"ecs:DescribeServiceRevisions",
"ecs:ListServiceDeployments",
"ecs:DescribeServiceDeployments",
"ecs:TagResource",
"ecs:UntagResource",
"ecs:ListTagsForResource"
],
"Resource": "*"
},
{
"Sid": "WAFv2Permissions",
"Effect": "Allow",
"Action": [
"wafv2:CreateIPSet",
"wafv2:GetIPSet",
"wafv2:UpdateIPSet",
"wafv2:DeleteIPSet",
"wafv2:TagResource",
"wafv2:UntagResource",
"wafv2:ListTagsForResource",
"wafv2:CreateWebACL",
"wafv2:GetWebACL",
"wafv2:UpdateWebACL",
"wafv2:DeleteWebACL",
"wafv2:AssociateWebACL",
"wafv2:DisassociateWebACL",
"wafv2:GetWebACLForResource",
"wafv2:ListResourcesForWebACL",
"elasticloadbalancing:SetWebACL",
"elasticloadbalancing:DescribeLoadBalancers"
],
"Resource": "*"
}
]
}
稼働時間によってECS, ALB, WAFなど、AWSリソースの使用料がかかります。
「ソフトウェアを起動する」ボタンをクリックするとデプロイに関するドキュメントが確認できます。
「デプロイテンプレート」の「Deploy to ECS」リンクをクリックするとCloudFormationのUIが表示されます。
作成ステップでは、変更せずそのまま「次へ」をクリックしてください。
詳細ステップでは、以下のパラメーターを設定します。
| パラメーター | 説明 |
| VpcId | RDSが稼働しているVPCのIDを指定します。 |
| ALBSubnetIds |
ロードバランサーを配置するパブリックサブネットのIDを指定します(複数指定可能) 。 |
| RdsSecurityGroupId | 既存のRDS用セキュリティグループのIDを指定します。 |
| ServiceName(任意) |
ECSのサービス名です。 |
| ContainerTag(任意) | RDSが稼働しているVPCのIDを指定します。 |
| RdsFromPort(任意) | RDSの開始ポート番号を指定します(PostgreSQLの場合は5432、MySQLの場合は3306)。 |
| RdsToPort(任意) | RDSの終了ポート番号を指定します。単一ポートの場合はRdsFromPortと同じ値を指定してください。 |
| AllowedIps(任意) | アクセスを許可するIPアドレス(CIDR形式)をカンマ区切りで指定します。設定しない場合は全許可となります。 |
| Cpu(任意) | ECSタスクが使用するCPUサイズ(デフォルト: 512MB)。 |
| Memory(任意) | ECSタスクが使用するメモリサイズ(デフォルト: 1024MB)。 |
| LogRetentionInDays(任意) | CloudWatch Logsのログ保持期間(デフォルト: 30日)。 |
| LogStreamPrefix(任意) | CloudWatch Logsのログのプレフィックス(デフォルト: ecs)。 |
「AWS CloudFormation によって IAM リソースがカスタム名で作成される場合があることを承認します」にチェックを入れて「次へ」をクリックしてください。
設定値に間違いがなければ「送信」ボタンをクリックしてデプロイしてください。
Lambda版でデプロイするとAWSリソースの使用料をECS版よりも少なく抑えることができます。
「ソフトウェアを起動する」ボタンをクリックするとデプロイに関するドキュメントが確認できます。
「デプロイテンプレート」の「Deploy to Lambda」リンクをクリックするとCloudFormationのUIが表示されます。
作成ステップでは、変更せずそのまま「次へ」をクリックしてください。
詳細ステップでは、以下のパラメーターを設定します。
| パラメーター | 説明 |
| ImageUri |
事前に登録した自アカウントのECRイメージURIを指定します 。 例: <AccountID>.dkr.ecr.ap-northeast-1.amazonaws.com/mashu:latest |
| VpcId | RDSが稼働しているVPCのIDを指定します。 |
| LambdaSubnetIds |
Lambdaを配置するプライベートサブネットのIDを指定します(複数指定可能) 。 |
| RdsSecurityGroupId | 既存のRDS用セキュリティグループのIDを指定します。Lambdaからのアクセスを許可するルールが自動で追加されます。 |
| RdsFromPort(任意) |
RDSの開始ポート番号を指定します(PostgreSQLの場合は5432、MySQLの場合は3306)。 |
| RdsToPort(任意) |
RDSの終了ポート番号を指定します。単一ポートの場合はRdsFromPortと同じ値を指定してください。 |
| AllowedIps(任意) | アクセスを許可するIPアドレス(CIDR形式)をカンマ区切りで指定します。設定しない場合は全て許可となります。 |
| LambdaMemorySize(任意) | Lambdaのメモリサイズ(デフォルト: 512MB)。 |
| LambdaTimeout(任意) | Lambdaのタイムアウト時間(デフォルト: 900秒)。 |
| LogRetentionInDays(任意) | CloudWatch Logsのログ保持期間(デフォルト: 30日)。 |
「AWS CloudFormation によって IAM リソースがカスタム名で作成される場合があることを承認します」にチェックを入れて「次へ」をクリックしてください。
設定値に間違いがなければ「送信」ボタンをクリックしてデプロイしてください。
先のステップでデプロイしたCloudFormationスタックの「出力」タブを開いて、「MashuServerEndpoint」に記載されているURLをコピーします。
Mashuの画面を開いてコピーしたURLを貼り付け、「接続する」をクリックしてください。接続が成功すれば設定完了です。
セットアップスクリプトの<VERSION>を更新先のバージョンで指定してスクリプトを実行してください。
$ ./setup.sh <ACCOUNT_ID> <REGION> <VERSION>
その後は Mashuサーバーをデプロイする(Lambda版) と同じ手順でデプロイするとMashuサーバーが更新できます。