aws#

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

APIアクセス設定#

AWS APIを使用するには、次のことを行う必要があります。

例

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

tpaexecがそれを使用してec2リソースをプロビジョニングできるように、IAMユーザーは少なくとも次の権限セットを持っている必要があります。

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:RevokeSecurityGroupIngress
ec2:RunInstances
ec2:TerminateInstances
iam:AddRoleToInstanceProfile
iam:CreateInstanceProfile
iam:CreateRole
iam:DeleteInstanceProfile
iam:DeleteRole
iam:DeleteRolePolicy
iam:GetInstanceProfile
iam:GetRole
iam:GetRolePolicy
iam:ListAttachedRolePolicies
iam:ListGroups
iam:ListInstanceProfiles
iam:ListInstanceProfilesForRole
iam:ListRolePolicies
iam:ListRoles
iam:ListUsers
iam:PassRole
iam:PutRolePolicy
iam:RemoveRoleFromInstanceProfile
kms:CreateGrant
kms:GenerateDataKeyWithoutPlaintext
s3:CreateBucket
s3:GetBucketVersioning
s3:GetObject
s3:GetObjectTagging
s3:ListAllMyBuckets
s3:ListBucket
s3:ListBucketVersions
s3:PutBucketOwnershipControls
s3:PutObject
s3:PutObjectAcl

はじめに#

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

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

ネットワーキング#

AWSのすべてのネットワーク構成は、 Virtual Private Cloud のコンテキストで発生します

リージョン内で。 VPC内で、 subnets を作成できます

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

Security Groups は、いくつでも作成できます

インスタンスに許可されるインバウンドおよびアウトバウンドトラフィックのルール、プロトコル、宛先ポートレンジ、およびソースまたは宛先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 はクラスターオブジェクトです。

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

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

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

  • TPAはcluster_rules の下で基本的なルールを使用してセキュリティグループを作成します。これらは、各subnet cidrのec2_vpc cidrと一致するように更新する必要があります。詳細については、 セキュリティグループオプショナル を参照してください。

  • tpaexec deploy の前にVPCピアリングを手動で設定する必要があります。 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を作成する前によく考えてください。

より詳細なマッチングが必要な場合、またはさまざまなリージョンでさまざまな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 を選択します。

サブネットオプショナル#

すべてのインスタンスは、そのサブネットを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への読み取り専用アクセスをインスタンスに提供します。

Elastic IPアドレス#

Elastic IPアドレスを使用するには、 config.ymlでassign_elastic_ip をtrue に設定します。クラスター内のすべてのインスタンスに影響を与えるようにinstance_defaults で、または必要に応じて別のインスタンスに個別に。デフォルトでは、これにより、新しいElastic IPアドレスが割り当てられ、新しいインスタンスに割り当てられます。割り当て済みだがまだ割り当てられていないElastic IPアドレスを使用するには、 elastic_ip: 34.252.55.252 を使用して、割り当てられたアドレスに置き換えます。

インスタンスプロファイルオプショナル#

#  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