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

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

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

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

データクレデンシャル(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>)をコピーします。

デプロイメント認証情報(クロスアカウントIAMロール)

デプロイメント認証情報により、VeloDBはあなたのAWSアカウント内でコンピュートリソースを起動できます。アクセスポリシーを持つクロスアカウントIAMロールを作成します。

前提条件

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

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

注意 VeloDBの作成ウィザードは、データ認証情報ステップを完了した後に、すぐに使用できるポリシーを表示します。手動で置き換えることなく、直接貼り付けることができます。以下のブロックは、参照用の完全なポリシーです。

  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. 次へをクリックし、ポリシーに名前を付け(例:AllowVeloDBCrossAccountAccess)、ポリシーの作成をクリックします。

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

  1. IAMで、ロール → ロールを作成に移動します。
  2. 信頼されたエンティティタイプ:AWSアカウント
  3. 別のAWSアカウントを選択します。
  4. アカウントID:VeloDBアカウントID 757278738533を入力します。
  5. 外部ID:VeloDBコンソールから外部IDを貼り付けます。
  6. 作成したポリシーをアタッチします。
  7. ロールに名前を付け(例:AllowVeloDBCrossAccountAccess)、作成します。
  8. VeloDBコンソール用にロールARNをコピーします。

VPCとサブネット

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

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

  1. 管理者としてAWS VPCコンソールにサインインします。

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

  3. 作成するリソースVPCなど

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

    フィールド
    名前タグ例:velodb-project
    IPv4 CIDRブロックお好みの開始IPとサイズ。
    アベイラビリティーゾーン数1
    パブリックサブネット数1
    プライベートサブネット数1
    NATゲートウェイ1 AZに配置
    VPCエンドポイントS3 Gateway(NAT料金を削減し、S3にプライベートアクセス)
  5. VPCを作成をクリックし、ワークフローが完了したらVPCを表示をクリックします。

create-vpc-overview

create-vpc-overview2

view-vpc

セキュリティグループ

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

EC2用

  1. VPCコンソールで、セキュリティグループ → セキュリティグループを作成に移動します。
  2. 名前を付け(例:velodb-server-sg)、VPCを選択します。
  3. インバウンドルールを追加します:
    • ルール1:タイプ すべてのTCP、ソース このセキュリティグループ
    • ルール2:タイプ カスタムTCP、ポート範囲 8000–10000、ソース ウェアハウスにアクセスする必要があるVPCのCIDR。
  4. アウトバウンドルールはデフォルトのままにします(すべてのアウトバウンドを許可)。
  5. ルールを保存をクリックし、VeloDBコンソール用にセキュリティグループIDをコピーします。

VPCエンドポイント用

  1. VPCコンソールで、セキュリティグループ → セキュリティグループを作成に移動します。
  2. 名前を付け(例:vpce-sg-for-velodb)、VPCを選択します。
  3. 上記と同じインバウンドルールを追加します:
    • ルール1:タイプ すべてのTCP、ソース このセキュリティグループ
    • ルール2:タイプ カスタムTCP、ポート範囲 8000–10000、ソース ウェアハウスにアクセスする必要があるVPCのCIDR。
  4. アウトバウンドルールはデフォルトのままにします。
  5. ルールを保存をクリックします。

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

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

  1. VPCコンソールで、エンドポイント → エンドポイントを作成に移動します。

  2. 以下を入力します:

    フィールド
    名前例:vpce-for-velodb
    サービスカテゴリPrivateLink Ready partner services
    サービス名以下のリージョン表から選択。サービスを検証をクリック — "Service name verified"と表示されるはずです。
    VPCエンドポイントを作成するVPC。
    サブネットエンドポイントENIが配置されるプライベートサブネット。
    セキュリティグループ上記で作成したVPCエンドポイントセキュリティグループ(例:vpce-sg-for-velodb)。
    ポリシーフルアクセス(一般的)。
  3. エンドポイントを作成をクリックします。

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コンソールで、エンドポイント → エンドポイントを作成に移動します。

  2. 以下を入力します:

    フィールド
    名前例:vpce-for-s3-gateway
    サービスカテゴリAWSサービス
    サービスS3を検索し、タイプがGatewaycom.amazonaws.{region}.s3を選択。
    VPCエンドポイントを作成するVPC。
    ルートテーブルプライベートサブネットに関連付けられたルートテーブル。
    ポリシーフルアクセスまたはカスタム
  3. エンドポイントを作成をクリックします。

クロスアカウントS3アクセス用IAMロール(Catalogs統合)

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

  1. 対象AWSアカウントで、IAM → ロール → ロールを作成を開きます。

    create iam role

  2. カスタム信頼ポリシーを選択し、<velodb-role-arn>をVeloDBウェアハウスのIAMロール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