constructor()

in base/lib/base-stack.ts [7:73]


  constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    const clusterName = process.env.CLUSTER_NAME;
    if (clusterName == null) {
      throw new Error("Cluster Name is not defined.");
    }

    // The code that defines your stack goes here
    const vpc = new ec2.Vpc(
      this, "BaseVpc", { cidr: "10.0.0.0/16" }
    );
    cdk.Tags.of(vpc).add("Name", clusterName);

    const cluster = new eks.Cluster(this, "BaseCluster", {
      version: eks.KubernetesVersion.V1_19,
      clusterName,
      vpc,
      endpointAccess: eks.EndpointAccess.PUBLIC_AND_PRIVATE,
      defaultCapacity: 0
    });
    const userData = `MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="==MYBOUNDARY=="

--==MYBOUNDARY==
Content-Type: text/x-shellscript; charset="us-ascii"

#!/bin/bash
set -o xtrace
set -o pipefail
set -o nounset
yum install -y amazon-ssm-agent
systemctl enable amazon-ssm-agent
systemctl start amazon-ssm-agent

--==MYBOUNDARY==--\\
`;

    const lt = new ec2.CfnLaunchTemplate(this, "NodeLaunchTemplate", {
      launchTemplateData: {
        userData: cdk.Fn.base64(userData),
      },
    });

    const ssmNodeGroup = cluster.addNodegroupCapacity("OnDemandSSM", {
      instanceTypes: [new ec2.InstanceType("m5.large")],
      minSize: 2,
      launchTemplateSpec: {
        id: lt.ref,
        version: lt.attrLatestVersionNumber,
      },
    });
    ssmNodeGroup.role.addManagedPolicy(iam.ManagedPolicy.fromAwsManagedPolicyName("AmazonSSMManagedInstanceCore"));

    const exportNameClusterName = process.env.CFN_EXPORT_NAME_CLUSTER_NAME || ""
    const exportNameOidcProviderArn = process.env.CFN_EXPORT_NAME_OIDC_PROVIDER_ARN || ""
    const exportNameKubectlRoleArn = process.env.CFN_EXPORT_NAME_KUBECTL_ROLE_ARN || ""

    new cdk.CfnOutput(this, "ClusterName", { value: cluster.clusterName, exportName: exportNameClusterName });
    new cdk.CfnOutput(this, "OpenIdConnectProviderArn", {
      value: cluster.openIdConnectProvider.openIdConnectProviderArn, exportName: exportNameOidcProviderArn });
    const kubectlRole = cluster.kubectlRole;
    if (kubectlRole != null) {
      new cdk.CfnOutput(this, "KubectlRoleArn", {
        value: kubectlRole.roleArn, exportName: exportNameKubectlRoleArn });
    }
  }