メインコンテンツまでスキップ

AWS上のBYOC: クラウドリソースの準備

このガイドは、VeloDB Cloud BYOCウェアハウス用のAWSリソースを準備するクラウド管理者向けのリファレンスです。これらのリソースのほとんどは、Template Modeで使用されるCloudFormationテンプレートによって作成できます。Wizard Modeを使用する場合や個別のリソースをより細かく制御する必要がある場合のみ、手動で作成してください。

エンドツーエンドのウェアハウス作成フローについては、Wizard Modeを使用したBYOCウェアハウスの作成を参照してください。

データクレデンシャル(S3バケット + IAMロール)

VeloDBはストレージとコンピュートを分離するアーキテクチャを使用し、データはS3に保存されます。データクレデンシャルは、VeloDBウェアハウスを実行するEC2インスタンスにそのバケットへの読み取り/書き込みアクセスを付与します。

1. S3バケットを作成する

注意 バケットはウェアハウスと同じAWSリージョンにある必要があります。

  1. 管理者としてAWS S3 Consoleにサインインし、Create bucketをクリックします。
  2. バケット名を入力し、対象リージョンを選択します。
  3. Bucket Versioningを有効にします(推奨)。
  4. Create bucketをクリックします。
  5. VeloDBコンソール用にバケット名をコピーします。

2. IAMポリシーを作成する

  1. AWS IAM Consoleを開き、Policies → Create policyに移動します。

  2. JSONタブに切り替え、以下のポリシーを貼り付けて、<your-bucket-name>を前の手順のバケット名に置き換えます。

    {
    "Version": "2012-10-17",
    "Statement": [
    {
    "Effect": "Allow",
    "Resource": "arn:aws:s3:::<your-bucket-name>",
    "Action": [
    "s3:GetBucketLocation",
    "s3:GetBucketVersioning",
    "s3:PutBucketCORS",
    "s3:ListBucket",
    "s3:ListBucketVersions",
    "s3:ListBucketMultipartUploads"
    ]
    },
    {
    "Effect": "Allow",
    "Resource": "arn:aws:s3:::<your-bucket-name>/*",
    "Action": [
    "s3:GetObject",
    "s3:GetObjectVersion",
    "s3:PutObject",
    "s3:DeleteObject",
    "s3:DeleteObjectVersion",
    "s3:AbortMultipartUpload",
    "s3:ListMultipartUploadParts"
    ]
    },
    {
    "Effect": "Allow",
    "Action": ["sts:AssumeRole"],
    "Resource": "*"
    }
    ]
    }
  3. Nextをクリックし、ポリシーに名前を付け(例:VeloDBDataStorageAccess)、Create policyをクリックします。

3. サービスIAMロールを作成する

  1. IAMで、Roles → Create roleに移動します。

  2. 信頼されたエンティティタイプとしてAWS serviceを選択し、ユースケースとしてEC2を選択します。

  3. 先ほど作成したポリシーをアタッチします。

  4. ロールに名前を付け(例:VeloDBDataStorageAccessRole)、作成します。

  5. ロールのTrust Relationshipsタブで、信頼ポリシーを以下に置き換えます。<your-aws-account-id><your-role-name>を置換してください:

    {
    "Version": "2012-10-17",
    "Statement": [
    {
    "Effect": "Allow",
    "Principal": {
    "Service": "ec2.amazonaws.com",
    "AWS": "arn:aws:iam::<your-aws-account-id>:role/<your-role-name>"
    },
    "Action": "sts:AssumeRole"
    }
    ]
    }
  6. VeloDBコンソール用にInstance Profile ARN(形式:arn:aws:iam::<your-aws-account-id>:instance-profile/<your-role-name>)をコピーします。

Deployment credential(クロスアカウントIAMロール)

Deployment CredentialによりVeloDBがあなたのAWSアカウント内でコンピュートリソースを起動できるようになります。アクセスポリシーを持つクロスアカウントIAMロールを作成します。

前提条件

上記のData Credentialセクションを完了してください。バケット名とサービスロール名が必要になります。

1. IAMポリシーの作成

注意 VeloDB作成ウィザードはData Credentialステップを完了すると使用可能なポリシーを表示し、手動での置換なしに直接貼り付けることができます。以下のブロックは参考用の完全なポリシーです。

  1. IAMコンソールで、Policies → Create policyに移動します。

  2. JSONタブで、以下のポリシーを貼り付け、<your-aws-account-id><your-bucket-name><your-role-name>を置き換えます。

    {
    "Version": "2012-10-17",
    "Statement": [
    {
    "Effect": "Allow",
    "Action": [
    "ec2:TerminateInstances",
    "ec2:StopInstances",
    "ec2:StartInstances",
    "ec2:RebootInstances",
    "ec2:ModifyInstanceAttribute",
    "ec2:ModifyVolume"
    ],
    "Resource": [
    "arn:aws:ec2:*:*:volume/*",
    "arn:aws:ec2:*:*:instance/*"
    ],
    "Condition": {
    "StringEquals": {
    "aws:ResourceTag/resource-created-by": "velodb"
    }
    }
    },
    {
    "Effect": "Allow",
    "Action": [
    "ec2:DescribeVpcs",
    "ec2:DescribeSubnets",
    "ec2:DescribeAccountAttributes",
    "ec2:DescribeAddresses",
    "ec2:DescribeNatGateways",
    "ec2:DescribeInternetGateways",
    "ec2:DescribeInstances",
    "ec2:DescribeSecurityGroups",
    "ec2:DescribeSecurityGroupRules",
    "ec2:DescribeAvailabilityZones",
    "ec2:DescribeInstanceTypes",
    "ec2:ModifyInstanceAttribute",
    "ec2:DescribeVolumes",
    "ec2:DescribeImages",
    "ec2:DescribeVpcEndpoints",
    "ec2:DescribePrefixLists",
    "ec2:DescribeRouteTables",
    "ec2:DescribeTags",
    "elasticloadbalancing:DescribeLoadBalancers",
    "elasticloadbalancing:DescribeListeners",
    "elasticloadbalancing:DescribeLoadBalancerAttributes",
    "elasticloadbalancing:DescribeTargetGroupAttributes",
    "elasticloadbalancing:DescribeTags",
    "elasticloadbalancing:DescribeTargetHealth",
    "elasticloadbalancing:DescribeTargetGroups",
    "iam:GetPolicy",
    "iam:GetPolicyVersion"
    ],
    "Resource": ["*"]
    },
    {
    "Effect": "Allow",
    "Action": ["ec2:RunInstances", "ec2:CreateTags"],
    "Resource": [
    "arn:aws:ec2:*:*:volume/*",
    "arn:aws:ec2:*:*:instance/*",
    "arn:aws:ec2:*:*:network-interface/*"
    ],
    "Condition": {
    "StringEquals": {
    "aws:RequestTag/resource-created-by": "velodb"
    }
    }
    },
    {
    "Effect": "Allow",
    "Action": ["ec2:RunInstances"],
    "Resource": [
    "arn:aws:ec2:*:*:image/*",
    "arn:aws:ec2:*:*:security-group/*",
    "arn:aws:ec2:*:*:subnet/*"
    ]
    },
    {
    "Effect": "Allow",
    "Action": ["ec2:CreateTags", "ec2:DeleteTags"],
    "Resource": [
    "arn:aws:ec2:*:*:instance/*",
    "arn:aws:ec2:*:*:volume/*",
    "arn:aws:ec2:*:*:network-interface/*"
    ],
    "Condition": {
    "StringEquals": {
    "ec2:ResourceTag/resource-created-by": "velodb"
    }
    }
    },
    {
    "Effect": "Allow",
    "Action": [
    "elasticloadbalancing:CreateListener",
    "elasticloadbalancing:CreateLoadBalancer",
    "elasticloadbalancing:CreateTargetGroup"
    ],
    "Resource": [
    "arn:aws:elasticloadbalancing:*:*:targetgroup/*",
    "arn:aws:elasticloadbalancing:*:*:loadbalancer/*",
    "arn:aws:elasticloadbalancing:*:*:listener/*"
    ],
    "Condition": {
    "StringEquals": {
    "aws:RequestTag/resource-created-by": "velodb"
    }
    }
    },
    {
    "Effect": "Allow",
    "Action": [
    "elasticloadbalancing:RegisterTargets",
    "elasticloadbalancing:DeleteLoadBalancer",
    "elasticloadbalancing:ModifyTargetGroupAttributes",
    "elasticloadbalancing:DeregisterTargets",
    "elasticloadbalancing:DeleteTargetGroup",
    "elasticloadbalancing:ModifyLoadBalancerAttributes",
    "elasticloadbalancing:DeleteListener"
    ],
    "Resource": [
    "arn:aws:elasticloadbalancing:*:*:targetgroup/*",
    "arn:aws:elasticloadbalancing:*:*:loadbalancer/*",
    "arn:aws:elasticloadbalancing:*:*:listener/*"
    ],
    "Condition": {
    "StringEquals": {
    "elasticloadbalancing:ResourceTag/resource-created-by": "velodb"
    }
    }
    },
    {
    "Effect": "Allow",
    "Action": [
    "elasticloadbalancing:AddTags",
    "elasticloadbalancing:RemoveTags"
    ],
    "Resource": ["arn:aws:elasticloadbalancing:*:*:*"],
    "Condition": {
    "StringEquals": {
    "elasticloadbalancing:ResourceTag/resource-created-by": "velodb"
    }
    }
    },
    {
    "Effect": "Allow",
    "Action": [
    "s3:GetBucketLocation",
    "s3:GetBucketVersioning",
    "s3:GetBucketPublicAccessBlock",
    "s3:GetLifecycleConfiguration",
    "s3:PutLifecycleConfiguration",
    "s3:ListBucket"
    ],
    "Resource": ["arn:aws:s3:::<your-bucket-name>"]
    },
    {
    "Effect": "Allow",
    "Action": [
    "iam:GetInstanceProfile",
    "iam:GetRole",
    "iam:GetRolePolicy",
    "iam:ListRolePolicies",
    "iam:ListAttachedRolePolicies"
    ],
    "Resource": [
    "arn:aws:iam::<your-aws-account-id>:instance-profile/<your-role-name>",
    "arn:aws:iam::<your-aws-account-id>:role/<your-role-name>"
    ]
    },
    {
    "Effect": "Allow",
    "Action": ["iam:PassRole"],
    "Resource": [
    "arn:aws:iam::<your-aws-account-id>:role/<your-role-name>"
    ],
    "Condition": {
    "StringEquals": {
    "iam:PassedToService": "ec2.amazonaws.com"
    }
    }
    },
    {
    "Effect": "Allow",
    "Action": ["iam:CreateServiceLinkedRole"],
    "Resource": [
    "arn:aws:iam::*:role/aws-service-role/elasticloadbalancing.amazonaws.com/AWSServiceRoleForElasticLoadBalancing"
    ],
    "Condition": {
    "StringEquals": {
    "iam:AWSServiceName": "elasticloadbalancing.amazonaws.com"
    }
    }
    }
    ]
    }
  3. Nextをクリックし、ポリシーに名前を付け(例:AllowVeloDBCrossAccountAccess)、Create policyをクリックします。

2. クロスアカウントIAMロールの作成

  1. IAMで、Roles → Create roleに移動します。
  2. Trusted Entity Type: AWS account
  3. Another AWS accountを選択します。
  4. Account ID: VeloDBアカウントID 757278738533を入力します。
  5. External ID: VeloDBコンソールからexternal IDを貼り付けます。
  6. 作成したポリシーをアタッチします。
  7. ロールに名前を付け(例:AllowVeloDBCrossAccountAccess)、作成します。
  8. VeloDBコンソール用にRole ARNをコピーします。

VPCとサブネット

VeloDBのネットワーク要件に適合するVPCは、BYOCウェアハウスの前提条件です。

注意 VeloDBウェアハウスは現在シングルAZデプロイメントをサポートしています。パブリックサブネット1つとプライベートサブネット1つの計2つのサブネットを推奨します。VeloDBはプライベートサブネットにデプロイされます。

  1. 管理者としてAWS VPC Consoleにサインインします。

  2. 対象リージョンを選択し、Create VPCをクリックします。

  3. Resources to create: VPC and more

  4. これらのフィールドを調整します(その他はデフォルトのまま):

    FieldValue
    Name tag例:velodb-project
    IPv4 CIDR blockお好みの開始IPとサイズ。
    Number of Availability Zones1
    Number of public subnets1
    Number of private subnets1
    NAT gatewaysIn 1 AZ
    VPC EndpointsS3 Gateway(NAT料金を削減し、S3にプライベートアクセス)
  5. Create VPCをクリックし、ワークフローが完了したらView VPCをクリックします。

create-vpc-overview

create-vpc-overview2

view-vpc

セキュリティグループ

セキュリティグループは、関連するAWSリソースへのトラフィックを制御する仮想ファイアウォールです。BYOCには通常2つのセキュリティグループが必要で、1つはVeloDB EC2インスタンス用、もう1つはVPCインターフェースエンドポイント用です。

EC2用

  1. VPC Consoleで、Security groups → Create security groupに移動します。
  2. 名前を付け(例:velodb-server-sg)、VPCを選択します。
  3. インバウンドルールを追加します:
    • Rule 1: Type All TCP、Source this security group
    • Rule 2: Type Custom TCP、Port range 8000-10000、Sourceはウェアハウスに到達する必要があるVPCのCIDR。
  4. アウトバウンドルールはデフォルトのまま(すべてのアウトバウンドを許可)にします。
  5. Save rulesをクリックし、VeloDBコンソール用にSecurity group IDをコピーします。

VPCエンドポイント用

  1. VPC Consoleで、Security groups → Create security groupに移動します。
  2. 名前を付け(例:vpce-sg-for-velodb)、VPCを選択します。
  3. 上記と同じインバウンドルールを追加します:
    • Rule 1: Type All TCP、Source this security group
    • Rule 2: Type Custom TCP、Port range 8000-10000、Sourceはウェアハウスに到達する必要があるVPCのCIDR。
  4. アウトバウンドルールはデフォルトのままにします。
  5. Save rulesをクリックします。

VeloDBへのプライベートエンドポイント

BYOCトラフィックをAWSバックボーン上で維持するために、ウェアハウスがパブリックインターネットではなくPrivateLinkを介してVeloDB Cloudサービスと通信できるようプライベートエンドポイントを作成します。

  1. VPC Consoleで、Endpoints → Create endpointに移動します。

  2. 以下を入力します:

    FieldValue
    Name例:vpce-for-velodb
    Service categoryPrivateLink Ready partner services
    Service name以下のリージョン表から。Verify serviceをクリック:「Service name verified」と表示されるはずです。
    VPCエンドポイントを作成するVPC。
    SubnetsエンドポイントENIが存在すべきプライベートサブネット。
    Security group上記で作成したVPCエンドポイント用セキュリティグループ(例:vpce-sg-for-velodb)。
    PolicyFull access(一般的)。
  3. Create endpointをクリックします。

VeloDBプライベートエンドポイントサービス名

AWS RegionService Name
us-east-1com.amazonaws.vpce.us-east-1.vpce-svc-0fb96af7d8cd84d4d
us-west-2com.amazonaws.vpce.us-west-2.vpce-svc-0709eceab1c84431a
eu-west-1com.amazonaws.vpce.eu-west-1.vpce-svc-027fb01a146da1e29
ap-southeast-1com.amazonaws.vpce.ap-southeast-1.vpce-svc-06e619c006c767a35
ap-east-1com.amazonaws.vpce.ap-east-1.vpce-svc-07c3dac48f26cc10a
me-south-1com.amazonaws.vpce.me-south-1.vpce-svc-0f51549e7949898ca
eu-central-1com.amazonaws.vpce.eu-central-1.vpce-svc-0b44881fddef6b599
ap-southeast-7com.amazonaws.vpce.ap-southeast-7.vpce-svc-0378cb9082f6839fd
me-central-1com.amazonaws.vpce.me-central-1.vpce-svc-01bb92d635d16039f

S3ゲートウェイエンドポイント

S3ゲートウェイエンドポイントは、VPC内のインスタンスにS3へのプライベート接続を提供し、パブリックインターネットを回避してNATゲートウェイ料金を削減します。

  1. VPC Consoleで、Endpoints → Create endpointに移動します。

  2. 以下を入力します:

    FieldValue
    Name例:vpce-for-s3-gateway
    Service categoryAWS services
    ServicesS3を検索し、タイプがGatewaycom.amazonaws.{region}.s3を選択。
    VPCエンドポイントを作成するVPC。
    Route tablesプライベートサブネットに関連するルートテーブル。
    PolicyFull accessまたはCustom
  3. Create endpointをクリックします。

クロスアカウントS3アクセス用IAMロール(Catalogsインテグレーション)

異なるアカウントのS3バケットから読み取るためにCatalogsインテグレーションを使用する予定がある場合、対象アカウントでIAMロールを作成し、VeloDBがそれを引き受ける権限を付与します。

  1. 対象のAWSアカウントで、IAM → Roles → Create roleを開きます。

    create iam role

  2. Custom trust policyを選択し、<velodb-role-arn>をVeloDBウェアハウスのIAM Role ARNに置き換えます:

    trust entity

    {
    "Version": "2012-10-17",
    "Statement": [
    {
    "Effect": "Allow",
    "Principal": {
    "AWS": "<velodb-role-arn>"
    },
    "Action": "sts:AssumeRole"
    }
    ]
    }
  3. ロールに付与したい権限ポリシーをアタッチし、Nextをクリックします。

    permission policies

  4. ロールに名前を付けて、Create roleをクリックします。

    iam create role

  5. ロールを開き、サマリーからARNをコピーして、統合を設定する際にVeloDB Cloudに貼り付けます。

    iam role detail