AWSTemplateFormatVersion: '2010-09-09' Description: "Amazon EKS PreWork pattern Blog" Parameters: AccessCIDR: Default: 0.0.0.0/0 Type: String KeyPairName: Description: Name of an existing key pair, which allows you to securely connect to your bastion instance after it launches. Leave empty to proceed without a key pair. You would need to use AWS Systems Manager Session Manager to connect to the provisioned EC2 instances. Type: String Default: "" JobName: Type: String Default: 'job-example' AvailabilityZones: Description: List of Availability Zones to use for the subnets in the VPC. Three Availability Zones are used for this deployment. Type: List AvailabilityZones: NumberOfAZs: Type: String AllowedValues: ["2", "3"] Default: "2" Description: Number of Availability Zones to use in the VPC. This must match the value entered for the AvailabilityZones parameter. PreworkScriptBucket: Type: String Default: 'aws-quickstart' PreworkScriptObject: Type: String Default: 'quickstart-examples/blog-assets/eks-cluster-prework/scripts/pw-script.sh' Resources: EKSStack: Type: AWS::CloudFormation::Stack Properties: TemplateURL: 'https://aws-quickstart.s3.amazonaws.com/quickstart-amazon-eks/templates/amazon-eks-entrypoint-new-vpc.template.yaml' Parameters: # Cluster properties ProvisionBastionHost: Enabled RemoteAccessCIDR: !Ref AccessCIDR AvailabilityZones: !Join [ ',', !Ref 'AvailabilityZones' ] NodeInstanceType: t3.large NumberOfNodes: 1 MaxNumberOfNodes: 1 GetOIDCProvider: Type: Custom::GetOIDCProvider Properties: ServiceToken: !Sub "arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:function:eks-quickstart-ResourceReader" AwsCliCommand: !Sub "eks describe-cluster --name ${EKSStack.Outputs.EKSClusterName} --query 'cluster.identity.oidc.{issuer:issuer}'" IdField: 'issuer' PreworkStack: DependsOn: EKSStack Type: AWS::CloudFormation::Stack Properties: TemplateURL: 'https://aws-quickstart.s3.amazonaws.com/quickstart-examples/blog-assets/eks-cluster-prework/templates/prework.template.yaml' Parameters: ClusterName: !GetAtt "EKSStack.Outputs.EKSClusterName" PreworkScriptBucket: !Ref PreworkScriptBucket PreworkScriptObject: !Ref PreworkScriptObject JobName: !Ref JobName KubernetesNameSpace: "prework-example" Outputs: EKSClusterName: Value: !GetAtt EKSStack.Outputs.EKSClusterName BastionIP: Value: !GetAtt EKSStack.Outputs.BastionIP