aws

TPAは、AWS EC2での本番クラスターのプロビジョニングを完全にサポートしています。

APIアクセス設定

AWS APIを使用するには、以下を行う必要があります。

たとえば、

[tpa]$ cat > ~/.aws/credentials
[default]
aws_access_key_id = AKIAIOSFODNN7EXAMPLE
aws_secret_access_key = wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

AMIユーザーには、tpaexecがそれを使用してec2リソースをプロビジョニングできるように、少なくとも次のアクセス許可セットが必要です。

ec2:AssociateRouteTable
ec2:AttachInternetGateway
ec2:AuthorizeSecurityGroupIngress
ec2:CreateInternetGateway
ec2:CreateRoute
ec2:CreateRouteTable
ec2:CreateSecurityGroup
ec2:CreateSubnet
ec2:CreateTags
ec2:CreateVpc
ec2:DeleteKeyPair
ec2:DeleteRouteTable
ec2:DeleteSecurityGroup
ec2:DeleteSubnet
ec2:DeleteVpc
ec2:DescribeImages
ec2:DescribeInstanceStatus
ec2:DescribeInstances
ec2:DescribeInternetGateways
ec2:DescribeKeyPairs
ec2:DescribeRouteTables
ec2:DescribeSecurityGroups
ec2:DescribeSubnets
ec2:DescribeTags
ec2:DescribeVolumes
ec2:DescribeVpcAttribute
ec2:DescribeVpcClassicLink
ec2:DescribeVpcClassicLinkDnsSupport
ec2:DescribeVpcs
ec2:DisassociateRouteTable
ec2:ImportKeyPair
ec2:ModifyVpcAttribute
ec2:RunInstances
ec2:TerminateInstances
iam:AddRoleToInstanceProfile
iam:CreateInstanceProfile
iam:CreateRole
iam:DeleteInstanceProfile
iam:DeleteRole
iam:DeleteRolePolicy
iam:GetInstanceProfile
iam:GetRole
iam:GetRolePolicy:
iam:ListGroups
iam:ListInstanceProfiles
iam:ListInstanceProfilesForRole
iam:ListRolePolicies
iam:ListRoles
iam:ListUsers
iam:PassRole
iam:PutRolePolicy
iam:RemoveRoleFromInstanceProfile
kms:CreateGrant
kms:GenerateDataKeyWithoutPlaintext
s3:GetObject
s3:ListAllMyBuckets
s3:ListBucket
s3:PutObject
s3:PutObjectAcl

はじめに

サービスは物理的に regions and availability zones に分割されます。アベイラビリティーゾーンは、リージョンコードとそれに続く単一の文字で表されます(例:eu-west-1a)(ただし、その名前は異なるAWSアカウントの異なる場所を参照する場合があり、アカウント間で解釈を調整する方法はありません)。

AWS リージョンは互いに完全に分離されており、リソースを共有しません。リージョン内のアベイラビリティーゾーンは物理的に分離され、論理的にはほとんど分離されていますが、低レイテンシーのリンクで接続されており、特定のネットワークリソースを共有できます。

ネットワーキング

AWSのすべてのネットワーク構成は、 Virtual Private Cloud

リージョン内。 VPC内で、 サブネット(オプション)

これは、インターネットゲートウェイ、ルーティングテーブルなどとともに、特定のアベイラビリティーゾーンに関連付けられています。

セキュリティグループ(オプション) はいくつでも作成できます

インスタンスに対して許可されるインバウンドおよびアウトバウンドトラフィックのルールを構成します(プロトコル、宛先ポート範囲、およびソースまたは宛先IPアドレス範囲に関して)。

インスタンス

AWS EC2はさまざまな instance types

さまざまな価格/パフォーマンスポイントでさまざまなハードウェア構成を使用できます。特定のアベイラビリティーゾーンのサブネット内で、

EC2 instances

AMI(必須) として知られる配布画像に基づいて、1つ以上の EBS volumes

インスタンスに永続ストレージを提供します。 SSH public key を登録することで、インスタンスにSSHできます。

インスタンスには、常にサブネット内のプライベートIPアドレスが割り当てられます。サブネット構成によっては、

ephemeral public IP address

(インスタンスがシャットダウンされると失われ、再度起動すると別のエフェメラルIPが割り当てられます)。代わりに、

Elastic IP と呼ばれる静的リージョン固有のルーティング可能なIPアドレスを割り当てることができます

任意のインスタンスに。

インスタンスが外部から到達可能であるには、ルーティング可能なIPアドレスがあるだけでなく、VPCのネットワーキング構成(インターネットゲートウェイ、ルーティングテーブル、セキュリティグループ)もアクセスを許可するように調整されている必要があります。

構成

tpaexec configure を介して指定するか、 config.ymlで直接定義できるAWS固有の設定の簡単な説明です。

リージョン

--region または--regions で使用するクラスターの1つ以上の領域を指定できます。 TPAは、それぞれに関連付けられた必要なvpcエントリを生成し、可能な限り異なるアベイラビリティーゾーンを使用してこれらのリージョンに場所を均等に分散します。

regions はlocations とは異なり、各場所はリージョン(およびこのリージョン内のアベイラビリティーゾーン)に属します。 regions はAWS固有のオブジェクトであり、 locations はクラスターオブジェクトです。

注:複数のリージョンを指定する場合、ネットワーク構成を手動で編集する必要があります。

  • AWS vpcピアリングの使用を許可するには、ec2_vpc エントリにオーバーラップのcidrネットワークが必要です。デフォルトでは、TPAはすべてのcidrを10.33.0.0/16 に設定します。詳細については、 VPC(必須) を参照してください。

  • 各location は、それらが属するec2_vpc cidr と一致するsubnet で更新する必要があります。詳細については、 サブネット(オプション) を参照してください。

  • TPAはcluster_rules の下に基本的なルールを持つセキュリティグループを作成します。それらは、各subnet cidrに合わせて更新する必要があります。詳細については、 セキュリティグループ(オプション) を参照してください。

  • VPCピアリングはtpaexec deploy の前に手動で設定する必要があります。 tpaexec configure を実行し、 config.ymlでvpc-id を使用する前に、VPCと必要なVPCピアリングを作成することをお勧めします。詳細については、 VPC(必須) を参照してください。

VPC(必須)

使用するVPCを指定する必要があります。

ec2_vpc:
  Name: Test
  cidr: 10.33.0.0/16

これはデフォルトの設定で、指定されたCIDRでTestという名前のVPCが存在しない場合は作成し、それ以外の場合は既存のVPCを使用します。

VPCを作成するには、名前とcidrの両方を指定する必要があります。 VPC名のみを指定した場合、一致するVPCが存在しないとTPAは失敗します。

TPAがVPCを作成する場合、 tpaexec deprovision はそれを削除しようとしますが、既存のVPCはそのままにします。 (AWS にはアカウントごとの VPC の数に 1 桁の制限があるため、新しい VPC を作成する前に 2 度考えてください。

より詳細なマッチングが必要な場合、または異なるリージョンで異なるVPCを指定する場合は、展開されたフォームを使用できます。

ec2_vpc:
  eu-west-1:
    Name: Test
    cidr: 172.16.0.0/16
  us-east-1:
    filters:
      vpc-id: vpc-nnn
  us-east-2:
    Name: Example
    filters:
      [filter expressions]

AMI(必須)

使用するAMIを指定する必要があります。

ec2_ami:
  Name: xxx
  Owner: self

より正確なマッチングのためにフィルター仕様を追加できます。

ec2_ami:
  Name: xxx
  Owner: self
  filters:
    architecture: x86_64
    [more key/value filters]

(デフォルトでは、 tpaexec configure は --distribution 引数に基づいて適切なec2_ami を選択します。)

このプラットフォームは、Debian 9(stretch)、RedHat Enterprise Linux 7、Rocky 8、およびUbuntu 16.04(Xenial)をサポートしています。

サブネット(オプション)

すべてのインスタンスはそのサブネットを指定する必要があります( CIDR形式、またはsubnet-xxx idとして)。オプションで、作成するサブネットごとに名前とアベイラビリティーゾーンを指定できます。

ec2_vpc_subnets:
  us-east-1:
    192.0.2.0/27:
      az: us-east-1b
      Name: example1
    192.0.2.100/27:
      az: us-east-1b
      Name: example2

セキュリティグループ(オプション)

デフォルトでは、クラスターのセキュリティグループを作成します。 1つ以上の既存のセキュリティグループを使用するには、次を設定します。

ec2_groups:
  us-east-1:
    group-name:
      - foo

デフォルトのセキュリティグループのルールをカスタマイズする場合は、 cluster_rules を設定します。

cluster_rules:

- cidr_ip: 0.0.0.0/0
  from_port: 22
  proto: tcp
  to_port: 22

- cidr_ip: 192.0.2.0/27
  from_port: 0
  proto: tcp
  to_port: 65535

- cidr_ip: 192.0.2.100/27
  from_port: 0
  proto: tcp
  to_port: 65535

この例では、任意のアドレスからのssh(ポート22)と、特定のIP範囲からの任意のポートでのTCP接続を許可します。 (注:from_portとto_portは、ソースと宛先ではなく、ポートの数値範囲を定義します。)

カスタムルールを設定するか、既存のセキュリティグループを使用する場合、クラスター内のインスタンスが必要に応じて相互に通信できることを確認する必要があります(たとえば、Postgresのtcp/5432を許可します)。

インターネットゲートウェイ(オプション)

デフォルトでは、以下を設定しない限り、すべてのVPCにインターネットゲートウェイを作成します。

ec2_instance_reachability: private

よりきめ細かな制御を行うには、次のように設定します。

ec2_vpc_igw:
  eu-west-1: yes
  eu-central-1: yes
  us-east-1: no

SSHキー(オプション)

#  Set this to change the name under which we register our SSH key.

#  ec2_key_name: tpa_cluster_name

#
#  Set this to use an already-registered key.

#  ec2_instance_key: xxx

S3バケット(オプション)

TPAでは、AWSクラスターをプロビジョニングするためにS3バケットへのアクセスが必要です。このバケットは、SSHホストキーなどのファイルを一時的に保存するために使用されますが、他のクラスターデータ(バックアップなど)にも使用される場合があります。

デフォルトでは、TPAはプロビジョニングするクラスターにedb-tpa-<aws-account-user-id> という名前のS3バケットを使用します。 (バケットが存在しない場合は、TPAで作成するかどうかを確認するように求められます。)

代わりに既存のS3バケットを使用するには、設定します

cluster_bucket: name-of-bucket

(確認プロンプトなしでデフォルトのバケット名を受け入れるように cluster_bucket: auto を設定することもできます。)

クラスターのプロビジョニングを解除しても、TPAはS3バケットを削除しません。バケットを自分で削除するには、次を実行します。

aws s3 rb s3://<bucket> --force

インスタンスのプロビジョニングに使用しているIAMユーザーには、このバケットへの読み取りと書き込みアクセスが必要です。プロビジョニング中に、tpaexecはインスタンスプロファイルを介してcluster_bucketへの読み取り専用アクセスを提供します。

インスタンスプロファイル(オプション)

#  Set this to change the name of the instance profile role we create.

#  cluster_profile: cluster_name_profile

#
#  Set this to use an existing instance profile (which must have all the

#  required permissions assigned to it).

#  instance_profile_name: xxx

インスタンスロケール

一部のec2イメージと環境では、地域と言語設定を変更することが望ましい場合があります。デフォルトはen_US.UTF-8 です。サポートされているロケールを見つけるには、RedHatまたはRocky Linuxで次のコマンドの出力を参照してください。

localectl list-locales

または、DebianまたはUbuntuの/etc/locales.defsファイルの内容。

config.ymlで目的のロケールを設定します。

user_locale: en_GB.UTF-8