メインコンテンツまでスキップ
バージョン: 26.x

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

この付録は、VeloDB CloudのBYOCウェアハウス用にAWSリソースを準備するクラウド管理者向けの参考資料です。これらのリソースの大部分は、Template Modeで使用するCloudFormationテンプレートによって作成できます。Wizard Modeを使用する場合や、個々のリソースをより厳密に制御する必要がある場合のみ、手動で作成してください。

エンドツーエンドのウェアハウス作成フローについては、Warehouse Managementを参照してください。

データ認証情報(S3バケット + IAMロール)

VeloDBはストレージとコンピュートを分離したアーキテクチャを使用しており、データはS3に保存されます。Data Credentialは、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デプロイメントをサポートしています。2つのサブネット(1つはパブリック、1つはプライベート)を推奨します。VeloDBはプライベートサブネットにデプロイされます。

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

  2. ターゲットリージョンを選択し、Create VPCをクリックします。

  3. Resources to createVPC and more

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

    フィールド
    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. 以下を入力します:

    フィールド
    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)。
    Policyフルアクセス(一般的)。
  3. Create endpointをクリックします。

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

AWSリージョンサービス名
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. 以下を入力します:

    フィールド
    Name例:vpce-for-s3-gateway
    Service categoryAWS services
    ServicesS3を検索し、type 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