Open9

AWS EKS Blueprint for CDK で EKS on Fargate なクラスタをつくる

@iktakahiro / Takahiro Ikeuchi@iktakahiro / Takahiro Ikeuchi

〜 ここまでのあらすじ 〜

CDK 書いて頑張ろうとしたけどスタックが無限に終了せず詰んだと思っていたところ Bluepring に辿り着き、これをもちいたところ EKS on Fargate を秒(誇張表現)で立ち上げることができたのでアール

@iktakahiro / Takahiro Ikeuchi@iktakahiro / Takahiro Ikeuchi

立ちあがったのは立ちあがったんだけど、書き方が 通常の CDK のそれと結構ことなっており、Blueprint がつくってくれた VPC 情報が CDK 内で 他のスタックに渡せないという課題が発生している。

@iktakahiro / Takahiro Ikeuchi@iktakahiro / Takahiro Ikeuchi

コードはこんな感じ

import "source-map-support/register";
import * as eks from "aws-cdk-lib/aws-eks";
import * as blueprints from "@aws-quickstart/eks-blueprints";
import { Construct } from "constructs";
import { StackProps } from "aws-cdk-lib";

const account = 'xxxxxxxx';
const region = 'us-east-1';

export class EKSBlueprintConstruct {
  build(scope: Construct, id: string, props?: StackProps) {
    const addOns: Array<blueprints.ClusterAddOn> = [
      new blueprints.addons.SecretsStoreAddOn(),
      new blueprints.addons.ArgoCDAddOn(),
      new blueprints.addons.MetricsServerAddOn(),
      new blueprints.addons.AwsLoadBalancerControllerAddOn(),
      new blueprints.addons.VpcCniAddOn(),
      new blueprints.addons.CoreDnsAddOn(),
      new blueprints.addons.KubeProxyAddOn(),
    ];

    const fargateProfiles: Map<string, eks.FargateProfileOptions> = new Map([
      [
        "eks-blueprint2",
        {
          selectors: [{ namespace: "argocd" }, { namespace: "eks-blueprint2" },  { namespace: "game-2048" }],
        },
      ],
    ]);

    const clusterProvider = new blueprints.FargateClusterProvider({
      version: eks.KubernetesVersion.V1_21,
      clusterName: "eks-blueprint2",
      outputClusterName: true,
      fargateProfiles: fargateProfiles,
    });

    blueprints.EksBlueprint.builder()
      .clusterProvider(clusterProvider)
      .account(account)
      .region(region)
      .addOns(...addOns)
      .build(scope, "eks-blueprint2");
  }
}
@iktakahiro / Takahiro Ikeuchi@iktakahiro / Takahiro Ikeuchi

解決したいこと

  • blueprint が作成した VPC 情報の取得の方法がわからない
    • そもそも検索方法とかをちゃんと理解したほうがいいのかもしれない、命名規則は自明なのでそれで探す?
  • 同じ理由で subnet の情報の取得方法がわからない
    • 先に subnet つくっておいて subnet 情報を blueprint に渡すということはできそう、ただ blueprint のよしなに力がかなり高いので委ねたい気持ちもある
  • セキュリティグループとかはパラメータとしても渡せないのでひとまず作成をお任せする感じっぽい? つくられた SG の情報も取得をしたい。
@iktakahiro / Takahiro Ikeuchi@iktakahiro / Takahiro Ikeuchi

VPC のほうは全然問題なくとれました。

    const vpcSubnets = vpc.selectSubnets({ subnetType: ec2.SubnetType.PRIVATE_WITH_NAT })

サブネットはこれでとれる??

@iktakahiro / Takahiro Ikeuchi@iktakahiro / Takahiro Ikeuchi

VPC と Subnets はまったく問題なかった。あとは EKS の クラスターに割り当てられるセキュリティーグループを取得したいが、ID が確定できないので lookup できない感じがする。