terraform-aws-eks-blueprints - 完全な EKS クラスターを構成してデプロイします。

(Configure and deploy complete EKS clusters.)

Created at: 2021-04-07 07:59:58
Language: HCL
License: Apache-2.0

Terraform 用の Amazon EKS ブループリント

e2e-terratest プラン例 事前コミット

Terraform の Amazon EKS ブループリントへようこそ!

このリポジトリには、お客様がAmazon EKSをより簡単かつ迅速に採用できるようにすることを目的とした Terraform モジュールのコレクションが含まれています。AWS のお客様、パートナー、社内の AWS チームが使用して、ワークロードのデプロイと運用に必要な運用ソフトウェアで完全にブートストラップされた完全な EKS クラスターを構成および管理できます。

このプロジェクトは、コミュニティの terraform-aws-eksモジュールを活用して、EKS クラスターをデプロイします。

入門

EKS ブループリントの使用を開始する最も簡単な方法は、入門ガイドに従うことです。

ドキュメンテーション

完全なプロジェクト ドキュメントについては、ドキュメント サイトを参照してください。

EKS ブループリントを活用する方法の例を表示するには、 examplesディレクトリを参照してください。

使用法

以下は、EKS ブループリントを活用して、EKS クラスター、マネージド ノード グループ、およびさまざまな Kubernetes アドオンをデプロイする方法を示しています。

module "eks_blueprints" {
  source = "github.com/aws-ia/terraform-aws-eks-blueprints?ref=v4.0.2"

  # EKS CLUSTER
  cluster_version           = "1.21"
  vpc_id                    = "<vpcid>"                                      # Enter VPC ID
  private_subnet_ids        = ["<subnet-a>", "<subnet-b>", "<subnet-c>"]     # Enter Private Subnet IDs

  # EKS MANAGED NODE GROUPS
  managed_node_groups = {
    mg_m5 = {
      node_group_name = "managed-ondemand"
      instance_types  = ["m5.large"]
      subnet_ids      = ["<subnet-a>", "<subnet-b>", "<subnet-c>"]
    }
  }
}

module "eks_blueprints_kubernetes_addons" {
  source = "github.com/aws-ia/terraform-aws-eks-blueprints//modules/kubernetes-addons?ref=v4.0.2"

  eks_cluster_id = module.eks_blueprints.eks_cluster_id

  # EKS Addons
  enable_amazon_eks_vpc_cni            = true
  enable_amazon_eks_coredns            = true
  enable_amazon_eks_kube_proxy         = true
  enable_amazon_eks_aws_ebs_csi_driver = true

  #K8s Add-ons
  enable_argocd                       = true
  enable_aws_for_fluentbit            = true
  enable_aws_load_balancer_controller = true
  enable_cluster_autoscaler           = true
  enable_metrics_server               = true
  enable_prometheus                   = true
}

上記のコードは、以下をプロビジョニングします。

  • 管理対象ノード グループを持つ新しい EKS クラスター。
  • Amazon EKS アドオン
    vpc-cni
    CoreDNS
    kube-proxy
    、および
    aws-ebs-csi-driver
    .
  • Cluster Autoscaler
    Metrics Server
    ワークロードをスケーリングするために。
  • Fluent Bit
    ルーティング ログ用。
  • AWS Load Balancer Controller
    トラフィックを分散するため。
  • Argocd
    Kubernetes 用の宣言型 GitOps CD 用。
  • Prometheus
    可観測性のために。

アドオン

EKS Blueprints を使用すると、幅広い一般的な Kubernetes アドオンを EKS クラスターに簡単にプロビジョニングできます。デフォルトでは、Terraform Helm プロバイダーは、公開されているHelm チャートを使用してアドオンをデプロイするために使用されます。EKS Blueprints は、自己ホスト型の Helm チャートを活用するためのサポートも提供します。

アドオンの展開に関する完全なドキュメントについては、アドオンのドキュメントを参照してください

サブモジュール

ルートモジュールは、Amazon EKS と連携して使用できる多数の外部 AWS サービスのデプロイと統合をサポートする複数のサブモジュールを呼び出します。これには、Amazon Managed Prometheus と EKS 上の EMR が含まれます。外部サービスの展開に関する完全なドキュメントについては、サブモジュールのドキュメントを参照してください。

動機

Kubernetes は、コンテナ化されたアプリケーションを大規模にデプロイおよび管理できる、強力で拡張可能なコンテナ オーケストレーション テクノロジーです。Kubernetes の拡張可能な性質により、Kubernetes クラスターで、一般にアドオンと呼ばれるさまざまな一般的なオープンソース ツールを使用することもできます。ただし、利用可能なツールと設計の選択肢が非常に多いため、アプリケーション固有のニーズを満たすように調整された EKS クラスターを構築するには、かなりの時間がかかる場合があります。これには、幅広いオープンソース ツールと AWS サービスの統合が含まれ、AWS と Kubernetes に関する深い専門知識が必要です。

AWS のお客様は、Kubernetes ツールのランドスケープを統合し、特定のアプリケーション要件を満たす完全で独自の EKS クラスターを簡単にプロビジョニングする方法を示す例を求めてきました。お客様は、EKS ブループリントを使用して、専用の EKS クラスターを構成およびデプロイし、数か月ではなく数日でワークロードのオンボーディングを開始できます。

サポートとフィードバック

Terraform の EKS ブループリントは、AWS ソリューション アーキテクトによって管理されています。これは AWS サービスの一部ではなく、サポートは EKS Blueprints コミュニティによって最善を尽くして提供されます。

フィードバックを投稿したり、機能のアイデアを送信したり、バグを報告したりするには、この GitHub リポジトリの問題セクションを使用してください。

アーキテクチャの詳細、段階的な手順、およびカスタマイズ オプションについては、ドキュメント サイトを参照してください。

EKS ブループリントへの貢献に関心がある場合は、貢献ガイドを参照してください。


要件

名前 バージョン
テラフォーム >= 1.0.0
aws >= 3.72
>= 2.4.1
http 2.4.1
kubectl >= 1.14
kubernetes >= 2.10
ローカル >= 2.1
ヌル >= 3.1

プロバイダ

名前 バージョン
aws >= 3.72
http 2.4.1
kubernetes >= 2.10

モジュール

名前 ソース バージョン
aws_eks terraform-aws-modules/eks/aws v18.26.6
aws_eks_fargate_profiles ./modules/aws-eks-fargate-profiles なし
aws_eks_managed_node_groups ./modules/aws-eks-managed-node-groups なし
aws_eks_self_managed_node_groups ./modules/aws-eks-self-managed-node-groups なし
aws_eks_teams ./modules/aws-eks-teams なし
emr_on_eks ./modules/emr-on-eks なし
kms ./modules/aws-kms なし

資力

名前 タイプ
kubernetes_config_map.amazon_vpc_cni 資源
kubernetes_config_map.aws_auth 資源
aws_caller_identity.current 情報源
aws_eks_cluster.cluster 情報源
aws_iam_policy_document.eks_key 情報源
aws_iam_session_context.current 情報源
aws_partition.current 情報源
aws_region.current 情報源
http_http.eks_cluster_readiness 情報源

入力

名前 説明 タイプ デフォルト 必須
application_teams 作成するアプリケーション チームのマップのマップ
any
{}
番号
aws_auth_additional_labels aws-auth ConfigMap に適用される追加の kubernetes ラベル
map(string)
{}
番号
cloudwatch_log_group_kms_key_id KMS キー ARN が設定されている場合、このキーは対応するログ グループの暗号化に使用されます。KMS キーに適切なキー ポリシーがあることを確認してください ( https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/encrypt-log-data-kms.html )
string
null
番号
cloudwatch_log_group_retention_in_days ログ イベントを保持する日数。デフォルトの保持期間 - 90 日
number
90
番号
cluster_additional_security_group_ids クラスタ コントロール プレーンにアタッチする、外部で作成された追加のセキュリティ グループ ID のリスト
list(string)
[]
番号
cluster_enabled_log_types 有効にする目的のコントロール プレーン ロギングのリスト
list(string)
[
"api",
"audit",
"authenticator",
"controllerManager",
"scheduler"
]
番号
cluster_encryption_config クラスターの暗号化構成を含む構成ブロック
list(object({
provider_key_arn = string
resources = list(string)
}))
[]
番号
cluster_endpoint_private_access EKS プライベート API サーバー エンドポイントが有効かどうかを示します。デフォルトは EKS リソースで、false です
bool
false
番号
cluster_endpoint_public_access EKS パブリック API サーバー エンドポイントが有効かどうかを示します。デフォルトは EKS リソースであり、true です
bool
true
番号
cluster_endpoint_public_access_cidrs Amazon EKS パブリック API サーバー エンドポイントにアクセスできる CIDR ブロックのリスト
list(string)
[
"0.0.0.0/0"
]
番号
cluster_identity_providers クラスターで有効にするクラスター ID プロバイダー構成のマップ。注 - これは IRSA とは異なります。
any
{}
番号
cluster_ip_family Kubernetes ポッドとサービス アドレスの割り当てに使用される IP ファミリ。有効な値は
ipv4
(デフォルト) と
ipv6
です。クラスターを作成するときにのみ IP ファミリを指定できます。この値を変更すると、新しいクラスターが強制的に作成されます。
string
"ipv4"
番号
cluster_kms_key_additional_admin_arns KMS キーポリシーでフルアクセス (kms:*) を持つ必要がある追加の IAM ARN のリスト
list(string)
[]
番号
cluster_kms_key_arn Kubernetes シークレットを暗号化するための有効な EKS クラスター KMS キー ARN
string
null
番号
cluster_kms_key_deletion_window_in_days 日数 (7 - 30) で指定された待機期間。待機期間が終了すると、AWS KMS は KMS キーを削除します
number
30
番号
cluster_name EKS クラスター名
string
""
番号
cluster_security_group_additional_rules 作成されたクラスター セキュリティ グループに追加する追加のセキュリティ グループ ルールのリスト。をソースとして設定
source_node_security_group = true
する内部ルールを設定します
node_security_group
any
{}
番号
cluster_security_group_id クラスター セキュリティ グループの作成がオフになっている場合に使用されるセキュリティ グループ
string
""
番号
cluster_security_group_tags 作成されたクラスター セキュリティ グループに追加する追加タグのマップ
map(string)
{}
番号
cluster_service_ipv4_cidr Kubernetes サービスの IP アドレスを割り当てる CIDR ブロック。ブロックを指定しない場合、Kubernetes は 10.100.0.0/16 または 172.20.0.0/16 CIDR ブロックからアドレスを割り当てます
string
null
番号
cluster_service_ipv6_cidr Kubernetes サービス IP アドレスを割り当てるための IPV6 サービス CIDR ブロック
string
null
番号
cluster_timeouts クラスターのタイムアウト構成の作成、更新、および削除
map(string)
{}
番号
cluster_version
<major>.<minor>
EKS クラスターに使用するKubernetesのバージョン (例:
1.22
)
string
"1.22"
番号
control_plane_subnet_ids EKS クラスター コントロール プレーン (ENI) がプロビジョニングされるサブネット ID のリスト。EKS コントロール プレーンを交換せずに、ノード/ノード グループによって使用されるサブネットのプールを拡張するために使用されます
list(string)
[]
番号
create_cloudwatch_log_group このモジュールによってクラスター ログ用のログ グループが作成されるかどうかを決定します。そうでない場合、ロギングが有効になっていれば AWS が自動的に作成します。
bool
false
番号
create_cluster_security_group クラスタ セキュリティ グループの作成または割り当てに切り替えます
bool
true
番号
create_eks EKS クラスターを作成する
bool
true
番号
create_iam_role IAM ロールを作成するか、既存の IAM ロールを使用するかを決定します
bool
true
番号
create_node_security_group ノード グループのセキュリティ グループを作成するか、既存のセキュリティ グループを使用するかを決定します。
node_security_group_id
bool
true
番号
custom_oidc_拇印 OpenID Connect (OIDC) ID プロバイダーのサーバー証明書のサーバー証明書拇印の追加リスト
list(string)
[]
番号
eks_readiness_timeout EKS API サーバー エンドポイントが正常になるまで待機する最大時間 (秒単位)
number
"600"
番号
emr_on_eks_teams EKS Teams 構成の EMR
any
{}
番号
enable_emr_on_eks EKS で EMR を有効にする
bool
false
番号
enable_irsa IRSA を有効にするために EKS 用の OpenID Connect プロバイダーを作成するかどうかを決定します
bool
true
番号
enable_windows_support Windows サポートを有効にする
bool
false
番号
fargate_profiles Fargate プロファイル構成
any
{}
番号
iam_role_additional_policies IAM ロールに追加される追加のポリシー
list(string)
[]
番号
iam_role_arn クラスターの既存の IAM ロール ARN。
create_iam_role
に設定されている場合は必須
false
string
null
番号
iam_role_name 作成された IAM ロールで使用する名前
string
null
番号
iam_role_path クラスター IAM ロール パス
string
null
番号
iam_role_permissions_boundary IAM ロールのアクセス許可の境界を設定するために使用されるポリシーの ARN
string
null
番号
managed_node_groups 管理対象ノード グループの構成
any
{}
番号
map_accounts aws-auth ConfigMap に追加する追加の AWS アカウント番号
list(string)
[]
番号
map_roles aws-auth ConfigMap に追加する追加の IAM ロール
list(object({
rolearn = string
username = string
groups = list(string)
}))
[]
番号
map_users aws-auth ConfigMap に追加する追加の IAM ユーザー
list(object({
userarn = string
username = string
groups = list(string)
}))
[]
番号
node_security_group_additional_rules 作成されたノード セキュリティ グループに追加する追加のセキュリティ グループ ルールのリスト。をソースとして設定
source_cluster_security_group = true
する内部ルールを設定します
cluster_security_group
any
{}
番号
node_security_group_tags 作成されたノード セキュリティ グループに追加する追加タグのマップ
map(string)
{}
番号
openid_connect_audiences IRSA プロバイダーに追加する OpenID Connect オーディエンス クライアント ID のリスト
list(string)
[]
番号
platform_teams 作成するプラットフォーム チームのマップのマップ
any
{}
番号
private_subnet_ids クラスターとワーカーノードのプライベートサブネット ID のリスト
list(string)
[]
番号
public_subnet_ids ワーカー ノードのパブリック サブネット ID のリスト
list(string)
[]
番号
self_managed_node_groups セルフマネージド ノード グループの構成
any
{}
番号
タグ 追加のタグ (例:
map('BusinessUnit
XYZ
)
map(string)
{}
番号
vpc_id VPC ID
string
なし はい
worker_additional_security_group_ids ワーカー インスタンスにアタッチする追加のセキュリティ グループ ID のリスト
list(string)
[]
番号

出力

名前 説明
cluster_primary_security_group_id クラスター用に Amazon EKS によって作成されたクラスター セキュリティ グループ。管理対象ノード グループは、このセキュリティ グループを使用して、コントロール プレーンからデータ プレーンへの通信を行います。EKS コンソールでは「クラスター セキュリティ グループ」と呼ばれます
cluster_security_group_arn クラスター セキュリティ グループの Amazon リソースネーム (ARN)
cluster_security_group_id EKS コントロール プレーン セキュリティ グループ ID
configure_kubectl kubectl の構成: 正しい AWS プロファイルでログインしていることを確認し、次のコマンドを実行して kubeconfig を更新します。
eks_cluster_arn Amazon EKS クラスター名
eks_cluster_certificate_authority_data クラスターとの通信に必要な Base64 でエンコードされた証明書データ
eks_cluster_endpoint Kubernetes API サーバーのエンドポイント
eks_cluster_id Amazon EKS クラスター名
eks_cluster_status Amazon EKS クラスターのステータス
eks_cluster_version クラスターの Kubernetes バージョン
eks_oidc_issuer_url EKS クラスターの URL OIDC 発行者
eks_oidc_provider_arn の場合、OIDC プロバイダーの ARN
enable_irsa = true
emr_on_eks_role_arn EKS 上の EMR の IAM 実行ロール ARN
emr_on_eks_role_id EKS 上の EMR の IAM 実行ロール ID
fargate_profiles EKS Fargate プロファイル グループからの出力
fargate_profiles_aws_auth_config_map Fargate プロファイル AWS 認証マップ
fargate_profiles_iam_role_arns Fargate プロファイルの IAM ロール arn
managed_node_group_arn 管理対象ノード グループ arn
managed_node_group_aws_auth_config_map 管理対象ノード グループ AWS 認証マップ
managed_node_group_iam_instance_profile_arns 管理対象ノード グループの IAM インスタンス プロファイル arn
managed_node_group_iam_instance_profile_id 管理対象ノード グループの IAM インスタンス プロファイル ID
managed_node_group_iam_role_arns 管理対象ノード グループの IAM ロール arn
managed_node_group_iam_role_names 管理対象ノードグループの IAM ロール名
managed_node_groups EKS マネージド ノード グループからの出力
managed_node_groups_id EKS 管理対象ノード グループ ID
managed_node_groups_status EKS 管理対象ノード グループのステータス
oidc_プロバイダー OpenID Connect ID プロバイダー (先頭の のない発行者 URL
https://
)
self_managed_node_group_autoscaling_groups セルフマネージド ノード グループのグループ名の自動スケーリング
self_managed_node_group_aws_auth_config_map 自己管理ノード グループ AWS 認証マップ
self_managed_node_group_iam_instance_profile_id 管理対象ノード グループの IAM インスタンス プロファイル ID
self_managed_node_group_iam_role_arns 自己管理ノード グループの IAM ロール arn
self_managed_node_groups EKS セルフマネージド ノード グループからの出力
チーム EKS Fargate プロファイル グループからの出力
windows_node_group_aws_auth_config_map Windows ノード グループ AWS 認証マップ
worker_node_security_group_arn ワーカーノード共有セキュリティグループの Amazon リソースネーム (ARN)
worker_node_security_group_id ワーカー ノード共有セキュリティ グループの ID

安全

詳細については、貢献を参照してください。

ライセンス

Apache-2.0 ライセンス。ライセンスを参照してください。