// Module included in the following assemblies:
//
// * osd_install_access_delete_cluster/creating-an-aws-cluster.adoc

:_mod-docs-content-type: PROCEDURE

[id="osd-create-aws-cluster-ccs_{context}"]
= Creating a cluster on AWS

[role="_abstract"]
Deploy a {product-title} cluster with the Customer Cloud Subscription (CCS) or Red{nbsp}Hat cloud account billing model to get more financial control. By configuring AWS Identity and Access Management (IAM) roles, Virtual Private Clouds (VPC) networking, and PrivateLink, you integrate your clusters into existing infrastructure while ensuring security.  

.Prerequisites

You have completed the following tasks:

* Configure your AWS account for use with {product-title}.
* Ensure that you have not deployed any services in your AWS account.
* Configure the AWS account quotas and limits required to support the specified cluster size.
* Create an `osdCcsAdmin` AWS Identity and Access Management (IAM) user with the `AdministratorAccess` policy attached.
* Set up a service control policy (SCP) in your AWS organization. For more information, see _Minimum required service control policy (SCP)_.
* Consider having *Business Support* or higher from AWS.
* If you are configuring a cluster-wide proxy, verify that the proxy is accessible from the VPC where you installed the cluster. 
* Ensure that you can access the proxy from the private subnets of the VPC.

.Procedure

. Log in to {cluster-manager-url}.

. On the *Overview* page, select *Create cluster* in the *Red{nbsp}Hat {product-title}* card.

. Under *Billing model*, configure the subscription type and infrastructure type:
.. Select a subscription type. For information about {product-title} subscription options, see link:https://access.redhat.com/documentation/en-us/openshift_cluster_manager/1-latest/html-single/managing_clusters/index#assembly-cluster-subscriptions[Cluster subscriptions and registration] in the {cluster-manager} documentation.
+
[NOTE]
====
The subscription types that are available to you depend on your {product-title} subscriptions and resource quotas. For more information, contact your sales representative or Red Hat support.
====
+
.. Select the *Customer Cloud Subscription* infrastructure type to deploy {product-title} in an existing cloud provider account that you own or select *Red Hat cloud account* infrastructure type to deploy {product-title} in a Red Hat cloud provider account.
.. Click *Next*.
. Select *Run on Amazon Web Services*. If you are provisioning your cluster in an AWS account, complete the following substeps:
.. Review and complete the listed *Prerequisites*.
.. Select the checkbox to acknowledge that you have read and completed all of the prerequisites.
.. Give your AWS account details:
... Enter your *AWS account ID*.
... Enter your *AWS access key ID* and *AWS secret access key* for your AWS IAM user account.
+
[NOTE]
====
Revoking these credentials in AWS results in a loss of access to any cluster created with these credentials.
====
... Optional: You can select *Bypass AWS service control policy (SCP) checks* to disable the SCP checks.
+
[NOTE]
====
Some AWS SCPs can cause the installation to fail, even if you have the required permissions. Disabling the SCP checks allows an installation to proceed. Even when you bypass the checks, the SCP still runs. 
====
. Click *Next* to validate your cloud provider account and go to the *Cluster details* page.

. On the *Cluster details* page, give a name for your cluster and specify the cluster details:
.. Add a *Cluster name*.
.. Optional: Cluster creation generates a domain prefix as a subdomain for your provisioned cluster on `openshiftapps.com`. If the cluster name is less than or equal to 15 characters, then the domain prefix uses that name. If the cluster name is longer than 15 characters, the domain prefix is randomly generated to a 15 character string.
+
To customize the subdomain, select the *Create customize domain prefix* checkbox, and enter your domain prefix name in the *Domain prefix* field. The domain prefix cannot be longer than 15 characters, must be unique within your organization, and cannot be changed after cluster creation.
.. Select a cluster version from the *Version* drop-down menu.
.. Select a cloud provider region from the *Region* drop-down menu.
.. Select a *Single zone* or *Multi-zone* configuration.
+
.. Leave *Enable user workload monitoring* selected to monitor your own projects in isolation from Red Hat Site Reliability Engineer (SRE) platform metrics. This option is enabled by default.
.. Optional: Expand *Advanced Encryption* to make changes to encryption settings.
... Accept the default setting *Use default KMS Keys* to use your default AWS KMS key, or select *Use Custom KMS keys* to use a custom KMS key.
.... With *Use Custom KMS keys* selected, enter the AWS Key Management Service (KMS) custom key Amazon Resource Name (ARN) ARN in the *Key ARN* field.
Use the key to encrypt all control plane, infrastructure, worker node root volumes, and persistent volumes in your cluster.
+
... Optional: Select *Enable FIPS cryptography* if you require your cluster to be FIPS validated.
+
[NOTE]
====
If you select  *Enable FIPS cryptography*, then by default, you enable  *Enable additional etcd encryption* and you cannot disable this feature. You can select *Enable additional etcd encryption* without selecting *Enable FIPS cryptography*.
====
+
... Optional: Select *Enable additional etcd encryption* if you require etcd key value encryption. With this option, the etcd key values are encrypted, but the keys are not. This option is in addition to the control plane storage encryption that encrypts the etcd volumes in {product-title} clusters by default.
+
[NOTE]
====
By enabling etcd encryption for the key values in etcd, you increase the performance impact on your workloads by about 20%. The workload increase is a result of introducing this second layer of encryption, in addition to the default control plane storage encryption that encrypts the etcd volumes. Consider enabling etcd encryption only if you specifically require it for your use case.
====
+
.. Click *Next*.

. On the *Default machine pool* page, select a *Compute node instance type* from the drop-down menu.
. Optional: Select the *Enable autoscaling* checkbox to enable autoscaling.
.. Click *Edit cluster autoscaling settings* to make changes to the autoscaling settings.
.. After you make your changes, click *Close*.
.. Select a minimum and maximum node count. Select the node counts by engaging the available plus and minus signs or inputting the node count into the number input field.
. Select a *Compute node count* from the drop-down menu.
+
[NOTE]
====
After you create your cluster, you can change the number of compute nodes in it, but you cannot change the compute node instance type in a machine pool. The number and types of nodes available to you depend on your {product-title} subscription.
====

. Choose your preference for the Instance Metadata Service (IMDS) type, either using both IMDSv1 and IMDSv2 types or requiring your EC2 instances to use only IMDSv2. You can access instance metadata from a running instance in two ways:
+
* Instance Metadata Service Version 1 (IMDSv1) - a request/response method
* Instance Metadata Service Version 2 (IMDSv2) - a session-oriented method
+
[IMPORTANT]
====
After you create your cluster, you cannot change the Instance Metadata Service settings. 
====
+
[NOTE]
====
IMDSv2 uses session-oriented requests. With session-oriented requests, you create a session token that defines the session duration, which can range from a minimum of one second to a maximum of six hours. During the specified duration, you can use the same session token for future requests. After the specified duration expires, you must create a new session token to use for future requests.
====
+
For more information regarding IMDS, see link:https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html[Instance metadata and user data] in the AWS documentation.

. Optional: Expand *Edit node labels* to add labels to your nodes. Click *Add label* to add more node labels and select *Next*.
. On the *Network configuration* page, select *Public* or *Private* to use either public or private API endpoints and application routes for your cluster.
+
[IMPORTANT]
====
If you are using private API endpoints, you cannot access your cluster until you update the network settings in your cloud provider account.
====
+
. Optional: To install the cluster in an existing AWS Virtual Private Cloud (VPC):
+
--
include::snippets/snip_install-cluster-in-vpc.adoc[]

.. Select *Install into an existing VPC*.
.. If you are installing into an existing VPC and opted to use private API endpoints, you can select *Use a PrivateLink*. This option enables connections to the cluster by Red Hat Site Reliability Engineering (SRE) using only AWS PrivateLink endpoints.
+
[NOTE]
====
You cannot change the *Use a PrivateLink* option after you create a cluster.
====
+
.. If you are installing into an existing VPC and you want to enable an HTTP or HTTPS proxy for your cluster, select *Configure a cluster-wide proxy*.
--
. If you opted to install the cluster in an existing AWS VPC, give your *Virtual Private Cloud (VPC) subnet settings* and select *Next*.
You must have created the Cloud network address translation (NAT) and a Cloud router. See the "Additional resources" section for information about Cloud NATs and Google VPCs.
+
[NOTE]
====
Ensure that you configure the VPC with a public and a private subnet for each availability zone that you want the cluster installed into. If you opted to use PrivateLink, you only need private subnets.
====
+
.. Optional: Expand *Additional security groups* and select additional custom security groups to apply to nodes in the default machine pools. You must have already created the security groups and associated them with the VPC that you selected for this cluster. You cannot add or edit security groups to the default machine pools after you create the cluster.
+
By default, the security groups you specify are added for all node types. Clear the *Apply the same security groups to all node types* checkbox to apply different security groups for each node type.
+
For more information, see the requirements for _Security groups_ under _Additional resources_.
. Accept the default application ingress settings, or to create your own custom settings, select *Custom Settings*.
.. Optional: Give route selector.
.. Optional: Give excluded namespaces.
.. Select a namespace ownership policy.
.. Select a wildcard policy.
+
For more information about custom application ingress settings, click the information icon for each setting.
+
. If you opted to configure a cluster-wide proxy, give your proxy configuration details on the *Cluster-wide proxy* page:
.. Enter a value in at least one of the following fields:
** Specify a valid *HTTP proxy URL*.
** Specify a valid *HTTPS proxy URL*.
** In the *Additional trust bundle* field, give a PEM encoded X.509 certificate bundle. The bundle is added to the trusted certificate store for the cluster nodes. You need an additional trust bundle file if you use a TLS-inspecting proxy unless you have an identity certificate for the proxy, signed by an authority from the {op-system-first} trust bundle. This requirement applies regardless of whether the proxy is transparent or requires explicit configuration using the `http-proxy` and `https-proxy` arguments.
+
.. Click *Next*.
+
For more information about configuring a proxy with {product-title}, see _Configuring a cluster-wide proxy_.

. In the *CIDR ranges* dialog, configure custom classless inter-domain routing (CIDR) ranges or use the designated defaults.
+
[NOTE]
====
If you are installing into a VPC, the *Machine CIDR* range must match the VPC subnets.
====
+
[IMPORTANT]
====
You cannot change CIDR configurations. Confirm your selections with your network administrator before proceeding.
====
+
. On the *Cluster update strategy* page, configure your update preferences:
.. Choose a cluster update method:
** Select *Individual updates* if you want to schedule each update individually. This is the default option.
** Select *Recurring updates* to update your cluster on your preferred day and start time, when updates are available.
+
[NOTE]
====
You can review the end-of-life dates in the update lifecycle documentation for {product-title}. For more information, see link:https://access.redhat.com/documentation/en-us/openshift_dedicated/4/html/introduction_to_openshift_dedicated/policies-and-service-definition#osd-life-cycle[OpenShift Dedicated update life cycle].
====
+
.. If you opted for recurring updates, select a preferred day of the week and upgrade start time in UTC from the drop-down menus.
.. Optional: You can set a grace period for *Node draining* during cluster upgrades. By default, you get a *1 hour* grace period.
.. Click *Next*.
+
[NOTE]
====
If critical security concerns that significantly impact the security or stability of a cluster occur, Red Hat Site Reliability Engineering (SRE) might schedule automatic updates to the latest z-stream version that is not impacted. The updates apply within 48 hours after you get customer notifications. For a description of the critical impact security rating, see link:https://access.redhat.com/security/updates/classification[Understanding Red Hat security ratings].
====

. Review the summary of your selections and click *Create cluster* to start the cluster installation. The installation takes approximately 30-40 minutes to complete.
+
. Optional: On the *Overview* tab, you can enable the delete protection feature by going to  *Delete Protection: Disabled* and selecting *Enable*. This feature gives your cluster delete protection. To disable delete protection, select *Disable*.
By default, clusters are created with the delete protection feature disabled.

.Verification

* You can monitor the progress of the installation in the *Overview* page for your cluster. You can view the installation logs on the same page. Your cluster is ready when the *Status* in the *Details* section of the page is listed as *Ready*.

ifeval::["{context}" == "osd-creating-a-cluster-on-aws"]
:!osd-on-aws:
endif::[]

