For AWS-based Nexus Dashboard deployments, if a node requires an RMA or replacement for any reason, a new replacement node
must be deployed in AWS.
The factory-reset and node-recovery options available for on-premises physical Nexus Dashboard (pND) and virtual Nexus Dashboard
(vND) deployments are not supported for AWS-based nodes. Therefore, the affected node cannot be recovered in place and must
be redeployed as a new node.
Do not use the original three-node CloudFormation (CFT) template to replace an individual node. For single-node replacement,
deploy the new node using the dedicated single-node CFT template provided below:
{
"AWSTemplateFormatVersion": "2010-09-09",
"Description": "This cloud formation template automates the creation and launching of a Cisco Nexus Dashboard cluster (vND data 32vCPU/128GMem/10G Network/3T Disk) in multiple Availability Zones (AZs) of AWS. Deployment requires a Application VPC to exist in the account from which the cluster will be is launched. For detailed, description of this template and usage instructions please refer to ND deployment guide.",
"Metadata": {
"AWS::CloudFormation::Interface": {
"ParameterGroups": [
{
"Label": {
"default": "Nexus Dashboard Basic Configuration"
},
"Parameters": [
"NDClusterName",
"FabricPersona",
"VpcId",
"SecurityGroupId",
"InstanceType",
"AMIId",
"AdminPassword",
"KeyPairName",
"ExistingEIPAllocationId1",
"ExistingEIPAddress1"
]
},
{
"Label": {
"default": "Nexus Dashboard Node Configuration"
},
"Parameters": [
"hostNameND1",
"SubnetNDMgmt1",
"StaticNDMgmt1IP",
"SubnetNDMgmt1Netmask",
"SubnetNDMgmt1Gateway",
"SubnetNDData1",
"StaticNDData1IP",
"SubnetNDData1Netmask",
"SubnetNDData1Gateway"
]
}
],
"ParameterLabels": {
"NDClusterName": { "default": "ND Cluster Name" },
"VpcId": { "default": "VPC identifier" },
"hostNameND1": { "default": "ND Node Hostname" },
"SubnetNDMgmt1": { "default": "ND Node Management Subnet" },
"StaticNDMgmt1IP": { "default": "ND Node Static Management IP" },
"SubnetNDMgmt1Netmask": { "default": "ND Node Management Subnet Netmask" },
"SubnetNDMgmt1Gateway": { "default": "ND Node Management Subnet Gateway" },
"SubnetNDData1": { "default": "ND Node Data Subnet" },
"StaticNDData1IP": { "default": "ND Node Static Data IP" },
"SubnetNDData1Netmask": { "default": "ND Node Data Subnet Netmask" },
"SubnetNDData1Gateway": { "default": "ND Node Data Subnet Gateway" },
"SecurityGroupId": { "default": "Security Group identifier" },
"InstanceType": { "default": "Instance Type" },
"AMIId": { "default": "AMI identifier" },
"AdminPassword": { "default": "Password" },
"KeyPairName": { "default": "Key Pair Name" },
"ExistingEIPAllocationId1": { "default": "ND Node 1 EIP Allocation ID." },
"ExistingEIPAddress1": { "default": "ND Node 1 Elastic IP." }
}
}
},
"Parameters": {
"NDClusterName": {
"Type": "String",
"Description": "Nexus Dashboard Cluster name.",
"MinLength": 1
},
"VpcId": {
"Type": "String",
"Description": "VpcId of your existing Virtual Private Cloud (VPC) to launch ND cluster.",
"ConstraintDescription": "Must be the VPC Id of an existing Virtual Private Cloud."
},
"hostNameND1": {
"Type": "String",
"Description": "Specify the hostname for ND Node 1.",
"Default": "AWSND1"
},
"SubnetNDMgmt1": {
"Type": "AWS::EC2::Subnet::Id",
"Description": "Select the 1st management subnet for the ND Node 1."
},
"StaticNDMgmt1IP": {
"Type": "String",
"Description": "Specify a static management IP address from the selected subnet. Ensure not in-use already.",
"AllowedPattern": "^(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$",
"Default": "0.0.0.0"
},
"SubnetNDMgmt1Netmask": {
"Type": "String",
"Description": "Specify the 1st management subnet netmask in CIDR notation (16-28).",
"Default": "24",
"AllowedPattern": "^(1[6-9]|2[0-8])$"
},
"SubnetNDMgmt1Gateway": {
"Type": "String",
"Description": "Specify the 1st management default gateway on the selected management subnet. This is typically the first address on the subnet.",
"AllowedPattern": "^(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$",
"Default": "0.0.0.0"
},
"SubnetNDData1": {
"Type": "AWS::EC2::Subnet::Id",
"Description": "Select the 1st data subnet for the ND Node 1."
},
"StaticNDData1IP": {
"Type": "String",
"Description": "Specify a static data IP address from the selected subnet. Ensure not in-use already.",
"AllowedPattern": "^(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$",
"Default": "0.0.0.0"
},
"SubnetNDData1Netmask": {
"Type": "String",
"Description": "Specify the 1st data subnet netmask in CIDR notation (16-28).",
"Default": "24",
"AllowedPattern": "^(1[6-9]|2[0-8])$"
},
"SubnetNDData1Gateway": {
"Type": "String",
"Description": "Specify the 1st data default gateway on the selected management subnet. This is typically the first address on the subnet.",
"AllowedPattern": "^(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$",
"Default": "0.0.0.0"
},
"SecurityGroupId": {
"Type": "AWS::EC2::SecurityGroup::Id",
"Description": "Pre-created security group to be applied. Must allow ingress access for ports 22, 443. Check docs for other needed ports."
},
"InstanceType": {
"Type": "String",
"Description": "Specify EC2 instance type for the node instances.",
"AllowedValues": ["m5.8xlarge"],
"Default": "m5.8xlarge"
},
"AMIId": {
"Type": "AWS::EC2::Image::Id",
"Description": "Specify the AWS AMI for Nexus Dashboard."
},
"AdminPassword": {
"Type": "String",
"Description": "Admin user password for ND node (must contain atleast 1 letter, number and special char @$!%*#?& length: 8-64 chars).",
"NoEcho": true,
"MinLength": 8,
"MaxLength": 64,
"AllowedPattern": "^(?=.*[A-Za-z])(?=.*\\d)(?=.*[@$!%*#?&])[A-Za-z\\d@$!%*#?&]{8,64}$"
},
"KeyPairName": {
"Type": "AWS::EC2::KeyPair::KeyName",
"Description": "Required - Specify Name of an existing SSH KeyPair to enable SSH access to ND."
},
"ExistingEIPAllocationId1": {
"Type": "String",
"Description": "Allocation ID of an existing Elastic IP for ND Node 1."
},
"ExistingEIPAddress1": {
"Type": "String",
"Description": "Public IP of the existing Elastic IP (e.g., 203.0.113.42) for ND Node 1.",
"Default": "0.0.0.0"
}
},
"Resources": {
"ND1": {
"Type": "AWS::EC2::Instance",
"Properties": {
"InstanceType": { "Ref": "InstanceType" },
"ImageId": { "Ref": "AMIId" },
"KeyName": { "Ref": "KeyPairName" },
"NetworkInterfaces": [
{
"DeviceIndex": 0,
"NetworkInterfaceId": { "Ref": "ND1MgmtENI" }
},
{
"DeviceIndex": 1,
"NetworkInterfaceId": { "Ref": "ND1DataENI" }
}
],
"EbsOptimized": true,
"BlockDeviceMappings": [
{
"DeviceName": "/dev/xvda",
"Ebs": { "VolumeType": "gp3", "Iops": 5000 }
},
{
"DeviceName": "/dev/xvdh",
"Ebs": {
"VolumeSize": 3072,
"VolumeType": "gp3",
"Iops": 5000
}
}
],
"Tags": [{ "Key": "Name", "Value": "ND1-Master" }],
"UserData": {
"Fn::Base64": {
"Fn::Sub": "{\n \"password\": \"${AdminPassword}\",\n \"clusterName\": \"${NDClusterName}\",\n \"oobNetwork\": {\n \"ipSubnet\": \"${StaticNDMgmt1IP}/${SubnetNDMgmt1Netmask}\",\n \"gateway\": \"${SubnetNDMgmt1Gateway}\"\n }\n}\n"
}
}
}
},
"ND1MgmtENI": {
"Type": "AWS::EC2::NetworkInterface",
"Properties": {
"SubnetId": { "Ref": "SubnetNDMgmt1" },
"PrivateIpAddresses": [
{
"PrivateIpAddress": { "Ref": "StaticNDMgmt1IP" },
"Primary": true
}
],
"GroupSet": [{ "Ref": "SecurityGroupId" }]
}
},
"EIPAssoc1": {
"Type": "AWS::EC2::EIPAssociation",
"Properties": {
"NetworkInterfaceId": { "Ref": "ND1MgmtENI" },
"AllocationId": { "Ref": "ExistingEIPAllocationId1" }
}
},
"ND1DataENI": {
"Type": "AWS::EC2::NetworkInterface",
"Properties": {
"SubnetId": { "Ref": "SubnetNDData1" },
"PrivateIpAddresses": [
{
"PrivateIpAddress": { "Ref": "StaticNDData1IP" },
"Primary": true
}
],
"GroupSet": [{ "Ref": "SecurityGroupId" }]
}
}
},
"Outputs": {
"ND1PublicIP": {
"Description": "Public IP of ND Node 1.",
"Value": { "Ref": "ExistingEIPAddress1" }
}
}
}