

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# TNB 的 TOSCA AWS 參考
<a name="tosca-reference"></a>

雲端應用程式的拓撲和協調規格 (TOSCA) 是一種宣告式語法，CSPs 會用來描述雲端型 Web 服務的拓撲、其元件、關係以及管理它們的程序。CSPs 描述連線點、連線點之間的邏輯連結，以及 TOSCA 範本中的親和性和安全性等政策。然後，CSPs會將範本上傳到 AWS TNB，TNB 會合成跨 AWS 可用區域建立正常運作 5G 網路所需的資源。

**Topics**
+ [

# VNFD 範本
](vnfd-template.md)
+ [

# 網路服務描述項範本
](nsd-template.md)
+ [

# 常見節點
](common-nodes.md)

# VNFD 範本
<a name="vnfd-template"></a>

定義虛擬網路函數描述項 (VNFD) 範本。

## 語法
<a name="vnfd-syntax"></a>

```
tosca_definitions_version: tnb_simple_yaml_1_0

topology_template:

  inputs:
    SampleInputParameter:
      type: String
      description: "Sample parameter description"
      default: "DefaultSampleValue"

  node\$1templates:
    SampleNode1: tosca.nodes.AWS.VNF
```

## 拓撲範本
<a name="vnfd-topology-template"></a>

 `node_templates`    
TOSCA AWS 節點。可能的節點包括：  
+ [AWS.VNF](node-vnf.md)
+ [AWS.Artifacts.Helm](node-helm.md)

# AWS.VNF
<a name="node-vnf"></a>

定義 AWS 虛擬網路函數 (VNF) 節點。

## 語法
<a name="vnf-syntax"></a>

```
tosca.nodes.AWS.VNF:
  properties:
    descriptor\$1id: String
    descriptor\$1version: String
    descriptor\$1name: String
    provider: String
  requirements:
    helm: String
```

## 屬性
<a name="vnf-properties"></a>

 `descriptor_id`    
描述項的 UUID。  
必要：是  
類型：字串  
模式：`[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}`

 `descriptor_version`    
VNFD 的版本。  
必要：是  
類型：字串  
模式：`^[0-9]{1,5}\\.[0-9]{1,5}\\.[0-9]{1,5}.*`

 `descriptor_name`    
描述項的名稱。  
必要：是  
類型：字串

 `provider`    
VNFD 的作者。  
必要：是  
類型：字串

## 要求
<a name="vnf-requirements"></a>

 `helm`    
定義容器成品的 Helm 目錄。這是 [AWS.Artifacts.Helm](node-helm.md) 的參考。  
必要：是  
類型：字串

## 範例
<a name="vnf-example"></a>

```
SampleVNF:
  type: tosca.nodes.AWS.VNF
  properties:
    descriptor_id: "6a792e0c-be2a-45fa-989e-5f89d94ca898"
    descriptor_version: "1.0.0"
    descriptor_name: "Test VNF Template"
    provider: "Operator"
  requirements:
    helm: SampleHelm
```

# AWS.Artifacts.Helm
<a name="node-helm"></a>

定義 AWS Helm 節點。

## 語法
<a name="node-helm-syntax"></a>

```
tosca.nodes.AWS.Artifacts.Helm:
  properties:
    implementation: String
```

## 屬性
<a name="node-helm-properties"></a>

 `implementation`    
CSAR 套件內包含 Helm Chart 的本機目錄。  
必要：是  
類型：字串

## 範例
<a name="node-helm-example"></a>

```
SampleHelm:
  type: tosca.nodes.AWS.Artifacts.Helm
  properties:
    implementation: "./vnf-helm"
```

# 網路服務描述項範本
<a name="nsd-template"></a>

定義網路服務描述項 (NSD) 範本。

## 語法
<a name="nsd-template-syntax"></a>

```
tosca_definitions_version: tnb_simple_yaml_1_0

vnfds:
  - descriptor\$1id: String
    namespace: String

topology_template:

  inputs:
    SampleInputParameter:
      type: String
      description: "Sample parameter description"
      default: "DefaultSampleValue"

  node\$1templates:
    SampleNode1: tosca.nodes.AWS.NS
```

## 使用定義的參數
<a name="using-defined-parameters"></a>

當您想要動態傳遞參數時，例如 VPC 節點的 CIDR 區塊，您可以使用 `{ get_input: input-parameter-name }`語法，並在 NSD 範本中定義參數。然後在相同的 NSD 範本中重複使用 參數。

下列範例示範如何定義和使用參數：

```
tosca_definitions_version: tnb_simple_yaml_1_0

topology_template:

  inputs:
    cidr_block:
      type: String
      description: "CIDR Block for VPC"
      default: "10.0.0.0/24"

  node_templates:
    ExampleSingleClusterNS:
      type: tosca.nodes.AWS.NS
      properties:
        descriptor_id: "a1b2c3d4-5678-90ab-cdef-EXAMPLE11111"
         .....

    ExampleVPC:
      type: tosca.nodes.AWS.Networking.VPC
      properties:
        cidr_block: { get_input: cidr_block }
```

## VNFD 匯入
<a name="vnfd-import"></a>

 `descriptor_id`    
描述項的 UUID。  
必要：是  
類型：字串  
模式：`[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}`

 `namespace`    
唯一名稱。  
必要：是  
類型：字串

## 拓撲範本
<a name="nsd-topology-template"></a>

 `node_templates`    
可能的 TOSCA AWS 節點包括：  
+ [AWS.NS](node-ns.md)
+ [AWS.Compute.EKS](node-eks.md)
+ [AWS.Compute.EKS.AuthRole](node-eks-authrole.md)
+ [AWS.Compute.EKSManagedNode](node-eks-managed-node.md)
+ [AWS.Compute.EKSSelfManagedNode](node-eks-self-managed.md)
+ [AWS.Compute.PlacementGroup](node-compute-placement-group.md)
+ [AWS.Compute.UserData](node-compute-user-data.md)
+ [AWS.Networking.SecurityGroup](node-networking-security-group.md)
+ [AWS.Networking.SecurityGroupEgressRule](node-networking-security-group-egress-rule.md)
+ [AWS.Networking.SecurityGroupIngressRule](node-networking-security-group-ingress-rule.md)
+ [AWS.Resource.Import](node-resource-import.md)
+ [AWS.Networking.ENI](node-eni.md)
+ [AWS.HookExecution](node-hook-execution.md)
+ [AWS.Networking.InternetGateway](node-internet-gateway.md)
+ [AWS.Networking.RouteTable](node-route-table.md)
+ [AWS.Networking.Subnet](node-subnet.md)
+ [AWS.Deployment.VNFDeployment](node-vnf-deployment.md)
+ [AWS.Networking.VPC](node-vpc.md)
+ [AWS.Networking.NATGateway](node-nat-gateway.md)
+ [AWS.Networking.Route](node-route.md)

# AWS.NS
<a name="node-ns"></a>

定義 AWS 網路服務 (NS) 節點。

## 語法
<a name="node-ns-syntax"></a>

```
tosca.nodes.AWS.NS:
  properties:
    descriptor\$1id: String
    descriptor\$1version: String
    descriptor\$1name: String
```

## 屬性
<a name="node-ns-properties"></a>

 `descriptor_id`    
描述項的 UUID。  
必要：是  
類型：字串  
模式：`[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}`

 `descriptor_version`    
NSD 的版本。  
必要：是  
類型：字串  
模式：`^[0-9]{1,5}\\.[0-9]{1,5}\\.[0-9]{1,5}.*`

 `descriptor_name`    
描述項的名稱。  
必要：是  
類型：字串

## 範例
<a name="node-ns-example"></a>

```
SampleNS:
  type: tosca.nodes.AWS.NS
  properties:
    descriptor_id: "a1b2c3d4-5678-90ab-cdef-EXAMPLE11111"
    descriptor_version: "1.0.0"
    descriptor_name: "Test NS Template"
```

# AWS.Compute.EKS
<a name="node-eks"></a>

提供叢集的名稱、所需的 Kubernetes 版本，以及允許 Kubernetes 控制平面管理 NFs 所需 AWS 資源的角色。Multus 容器網路介面 (CNI) 外掛程式已啟用。您可以連接多個網路介面，並將進階網路組態套用至以 Kubernetes 為基礎的網路函數。您也可以指定叢集端點存取和叢集的子網路。

## 語法
<a name="node-eks-syntax"></a>

```
tosca.nodes.AWS.Compute.EKS:
  capabilities:
    multus:
      properties:
        enabled: Boolean
        multus\$1role: String
    ebs\$1csi:
      properties:
        enabled: Boolean
        version: String      
  properties:
    version: String
    access: String
    cluster\$1role: String
    tags: List
    ip\$1family: String        
  requirements:
    subnets: List
```

## 功能
<a name="node-eks-capabilities"></a><a name="node_eks_multus"></a>`multus`

選用。定義 Multus 容器網路介面 (CNI) 用量的屬性。

如果您包含 `multus`，請指定 `enabled`和 `multus_role` 屬性。

 `enabled`    
指出是否已啟用預設 Multus 功能。  
必要：是  
類型：布林值

 `multus_role`    
Multus 網路介面管理的角色。  
必要：是  
類型：字串<a name="node_eks_ebs_csi"></a>`ebs_csi`

定義安裝在 Amazon EKS 叢集中 Amazon EBS 容器儲存介面 (CSI) 驅動程式的屬性。

啟用此外掛程式以在 AWS Outposts AWS 本機區域 或 上使用 Amazon EKS 自我管理節點 AWS 區域。如需詳細資訊，請參閱《[Amazon EKS 使用者指南》中的 Amazon Elastic Block Store CSI 驅動程式](https://docs.aws.amazon.com/eks/latest/userguide/ebs-csi.html)。 ****

 `enabled`    
指出是否已安裝預設 Amazon EBS CSI 驅動程式。  
必要：否  
類型：布林值

 `version`    
Amazon EBS CSI 驅動程式附加元件的版本。版本必須符合 *DescribeAddonVersions* 動作傳回的其中一個版本。如需詳細資訊，請參閱《*Amazon EKS API 參考*》中的 [DescribeAddonVersions](https://docs.aws.amazon.com/eks/latest/APIReference/API_DescribeAddonVersions.html)   
必要：否  
類型：字串

## 屬性
<a name="node-eks-properties"></a>

 `version`    
叢集的 Kubernetes 版本。 AWS Telco Network Builder 支援 Kubernetes 版本 1.25 到 1.32。  
必要：是  
類型：字串  
可能的值：1.25 \$1 1.26 \$1 1.27 \$1 1.28 \$1 1.29 \$1 1.30 \$1 1.31 \$1 1.32

 `access`    
叢集端點存取。  
必要：是  
類型：字串  
可能的值：`PRIVATE` \$1 `PUBLIC` \$1 `ALL`

 `cluster_role`    
叢集管理的角色。  
必要：是  
類型：字串

 `tags`    
要連接到資源的標籤。  
必要：否  
類型：清單

 `ip_family`    
指出叢集中服務和 Pod 地址的 IP 系列。  
允許的值：`IPv4`、 `IPv6`  
預設值：`IPv4`  
必要：否  
類型：字串

## 要求
<a name="node-eks-requirements"></a>

 `subnets`    
[AWS.Networking.Subnet](node-subnet.md) 節點。  
必要：是  
類型：清單

## 範例
<a name="node-eks-example"></a>

```
SampleEKS:
  type: tosca.nodes.AWS.Compute.EKS
  properties:
    version: "1.26"
    access: "ALL"
    cluster_role: "arn:aws:iam::${AWS::TNB::AccountId}:role/SampleRole"
    ip_family: "IPv6"
    tags:
      - "Name=SampleVPC"
      - "Environment=Testing" 
  capabilities:
    multus:
      properties:
        enabled: true
        multus_role: "arn:aws:iam::${AWS::TNB::AccountId}:role/MultusRole"
    ebs_csi:
      properties:
        enabled: true
        version: "v1.16.0-eksbuild.1"        
  requirements:
    subnets:
    - SampleSubnet01
    - SampleSubnet02
```

# AWS.Compute.EKS.AuthRole
<a name="node-eks-authrole"></a>

AuthRole 可讓您將 IAM 角色新增至 Amazon EKS 叢集，`aws-auth``ConfigMap`讓使用者可以使用 IAM 角色存取 Amazon EKS 叢集。

## 語法
<a name="node-eks-authrole-syntax"></a>

```
tosca.nodes.AWS.Compute.EKS.AuthRole:
  properties:
    role\$1mappings: List
      arn: String
      groups: List  
  requirements:
    clusters: List
```

## 屬性
<a name="node-eks-authrole-properties"></a>

 `role_mappings`    
定義需要新增至 Amazon EKS 叢集 之 IAM 角色的映射清單`aws-auth``ConfigMap`。    
 `arn`    
IAM 角色的 ARN。  
必要：是  
類型：字串  
 `groups`    
要指派給 中定義之角色的 Kubernetes 群組`arn`。  
必要：否  
類型：清單

## 要求
<a name="node-eks-authrole-requirements"></a>

 `clusters`    
[AWS.Compute.EKS](node-eks.md) 節點。  
必要：是  
類型：清單

## 範例
<a name="node-eks-authrole-example"></a>

```
EKSAuthMapRoles:
    type: tosca.nodes.AWS.Compute.EKS.AuthRole
    properties:
        role_mappings:
        - arn: arn:aws:iam::${AWS::TNB::AccountId}:role/TNBHookRole1
          groups:
          - system:nodes
          - system:bootstrappers
        - arn: arn:aws:iam::${AWS::TNB::AccountId}:role/TNBHookRole2
          groups:
          - system:nodes
          - system:bootstrappers
    requirements:
         clusters: 
         - Free5GCEKS1
         - Free5GCEKS2
```

# AWS.Compute.EKSManagedNode
<a name="node-eks-managed-node"></a>

AWS TNB 支援 EKS 受管節點群組，以自動化 Amazon EKS Kubernetes 叢集節點 (Amazon EC2 執行個體） 的佈建和生命週期管理。若要建立 EKS 節點群組，請執行下列動作：
+ 提供 AMI 的 ID 或 AMI 類型，為您的叢集工作者節點選擇 Amazon Machine Image (AMI)。
+ 針對 SSH 存取和節點群組的擴展屬性提供 Amazon EC2 金鑰對。
+ 確保您的節點群組與 Amazon EKS 叢集相關聯。
+ 提供工作者節點的子網路。
+ 或者，將安全群組、節點標籤和置放群組連接到節點群組。

## 語法
<a name="node-eks-managed-node-syntax"></a>

```
tosca.nodes.AWS.Compute.EKSManagedNode:
  capabilities:
    compute:
      properties:
        ami\$1type: String
        ami\$1id: String
        instance\$1types: List
        key\$1pair: String
        root\$1volume\$1encryption: Boolean
        root\$1volume\$1encryption\$1key\$1arn: String
        root\$1volume\$1size: Integer 
    scaling:
      properties:
        desired\$1size: Integer
        min\$1size: Integer
        max\$1size: Integer       
  properties:
    node\$1role: String
    tags: List
    kubernetes\$1version: String        
  requirements:
    cluster: String
    subnets: List
    network\$1interfaces: List
    security\$1groups: List
    placement\$1group: String
    user\$1data: String
    labels: List
```

## 功能
<a name="node-eks-managed-node-capabilities"></a><a name="node_eks_managed_node_compute"></a>`compute`

定義 Amazon EKS 受管節點群組運算參數的屬性，例如 Amazon EC2 執行個體類型和 Amazon EC2 執行個體 AMIs。

 `ami_type`    
Amazon EKS 支援的 AMI 類型。  
必要：是  
類型：字串  
可能的值： `AL2_x86_64` \$1 `AL2_x86_64_GPU` \$1 `AL2_ARM_64` \$1 `AL2023_x86_64` \$1 `AL2023_ARM_64` \$1 `AL2023_x86_64_NVIDIA` \$1 `AL2023_x86_64_NEURON` \$1 `CUSTOM` \$1 `BOTTLEROCKET_ARM_64` \$1 `BOTTLEROCKET_x86_64` \$1 `BOTTLEROCKET_ARM_64_NVIDIA` \$1 `BOTTLEROCKET_x86_64_NVIDIA`

 `ami_id`    
AMI 的 ID。  
必要：否  
類型：字串  
如果在範本中同時指定 `ami_id` `ami_type`和 ， AWS TNB 只會使用 `ami_id`值來建立 `EKSManagedNode`。

 `instance_types`    
執行個體大小。  
必要：是  
類型：清單

 `key_pair`    
啟用 SSH 存取的 EC2 金鑰對。  
必要：是  
類型：字串

 `root_volume_encryption`    
啟用 Amazon EBS 根磁碟區的 Amazon EBS 加密。如果未提供此屬性， AWS TNB 預設會加密 Amazon EBS 根磁碟區。  
必要：否  
預設：true  
類型：布林值

 `root_volume_encryption_key_arn`    
key AWS KMS . AWS TNB 的 ARN 支援一般金鑰 ARN、多區域金鑰 ARN 和別名 ARN。  
必要：否  
類型：字串  
+ 如果 `root_volume_encryption`為 false，請勿包含 `root_volume_encryption_key_arn`。
+ AWS TNB 支援 Amazon EBS 後端 AMI 的根磁碟區加密。
+ 如果 AMI 的根磁碟區已加密，您必須包含`root_volume_encryption_key_arn`適用於 AWS TNB 的 ，才能重新加密根磁碟區。
+  如果 AMI 的根磁碟區未加密， AWS TNB 會使用 `root_volume_encryption_key_arn`來加密根磁碟區。

  如果您不包含 `root_volume_encryption_key_arn`， AWS TNB 會使用 提供的預設金鑰 AWS Key Management Service 來加密根磁碟區。
+ AWS TNB 不會解密加密的 AMI。

 `root_volume_size`    
Amazon Elastic Block Store 根磁碟區的大小，以 GiBs為單位。  
必要：否  
預設：20  
類型：整數  
可能的值：1 到 16，384<a name="node_eks_managed_node_scaling"></a>`scaling`

定義 Amazon EKS 受管節點群組擴展參數的屬性，例如所需的 Amazon EC2 執行個體數量，以及節點群組中 Amazon EC2 執行個體的數量下限和上限。

 `desired_size`    
此 NodeGroup 中的執行個體數量。  
必要：是  
類型：整數

 `min_size`    
此 NodeGroup 中的執行個體數量下限。  
必要：是  
類型：整數

 `max_size`    
此 NodeGroup 中的執行個體數量上限。  
必要：是  
類型：整數

## 屬性
<a name="node_eks_managed_node-properties"></a>

 `node_role`    
連接至 Amazon EC2 執行個體之 IAM 角色的 ARN。  
必要：是  
類型：字串

 `tags`    
要連接到資源的標籤。  
必要：否  
類型：清單

 `kubernetes_version`    
Managed Node group. AWS TNB 的 Kubernetes 版本支援 Kubernetes 版本 1.25 到 1.32。考慮下列各項：  
+ 指定 `kubernetes_version`或 `ami_id`。不要同時指定兩者。
+ `kubernetes_version` 必須小於或等於 AWS.Compute.EKSManagedNode 版本。
+  AWS.Compute.EKSManagedNode 版本和 之間可能會有 3 個版本的差異`kubernetes_version`。
+ 如果未`ami_id`指定 `kubernetes_version`或 ， AWS TNB 將使用`AWS.Compute.EKSManagedNode`版本的最新 AMI 來建立 `EKSManagedNode`
必要：否  
類型：字串  
可能的值：1.25 \$1 1.26 \$1 1.27 \$1 1.28 \$1 1.29 \$1 1.30 \$1 1.31 \$1 1.32

## 要求
<a name="node-eks-managed-node-requirements"></a>

 `cluster`    
[AWS.Compute.EKS](node-eks.md) 節點。  
必要：是  
類型：字串

 `subnets`    
[AWS.Networking.Subnet](node-subnet.md) 節點。  
必要：是  
類型：清單

 `network_interfaces`    
[AWS.Networking.ENI](node-eni.md) 節點。確保網路介面和子網路設定為相同的可用區域，否則執行個體化將會失敗。  
當您設定 時`network_interfaces`，如果您在 [AWS.Compute.EKS](https://docs.aws.amazon.com/tnb/latest/ug/node-eks.html) 節點中包含 `multus` 屬性， AWS TNB 會從 `multus_role` 屬性取得與 ENIs 相關的許可。否則， AWS TNB 會從 [node\$1role](#node_eks_managed_node_node_role) 屬性取得與 ENIs相關的許可。  
必要：否  
類型：清單

 `security_groups`    
[AWS.Networking.SecurityGroup](node-networking-security-group.md) 節點。  
必要：否  
類型：清單

 `placement_group`    
[tosca.nodes AWS。Compute.PlacementGroup](node-compute-placement-group.md) 節點。  
必要：否  
類型：字串

 `user_data`    
[tosca.nodes AWS。Compute.UserData](node-compute-user-data.md) 節點參考。使用者資料指令碼會傳遞至受管節點群組啟動的 Amazon EC2 執行個體。將執行自訂使用者資料所需的許可新增至傳遞至節點群組的 node\$1role。  
必要：否  
類型：字串

 `labels`    
節點標籤的清單。節點標籤必須具有名稱和值。使用以下條件建立標籤：  
+ 名稱和值必須以 分隔`=`。
+ 名稱和值的長度上限為 63 個字元。
+ 標籤可以包含字母 (A-Z、a-z)、數字 (0-9) 和下列字元： `[-, _, ., *, ?]`
+ 名稱和值必須以英數字元`?`、 或 `*` 字元開頭和結尾。
例如 `myLabelName1=*NodeLabelValue1`  
必要：否  
類型：清單

## 範例
<a name="node-eks-managed-node-example"></a>

```
SampleEKSManagedNode:
  type: tosca.nodes.AWS.Compute.EKSManagedNode
  capabilities:
    compute:
      properties:
        ami_type: "AL2_x86_64"
        instance_types:
          - "t3.xlarge"
        key_pair: "SampleKeyPair"
        root_volume_encryption: true
        root_volume_encryption_key_arn: "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
        root_volume_size: 1500    
    scaling:
      properties:
        desired_size: 1
        min_size: 1
        max_size: 1
  properties:
    node_role: "arn:aws:iam::${AWS::TNB::AccountId}:role/SampleRole"
    tags:
      - "Name=SampleVPC"
      - "Environment=Testing" 
    kubernetes_version:
      - "1.30" 
  requirements:
    cluster: SampleEKS
    subnets:
      - SampleSubnet
    network_interfaces:
      - SampleENI01
      - SampleENI02
    security_groups:
      - SampleSecurityGroup01
      - SampleSecurityGroup02
    placement_group: SamplePlacementGroup
    user_data: CustomUserData
    labels:
      - "sampleLabelName001=sampleLabelValue001"
      - "sampleLabelName002=sampleLabelValue002"
```

# AWS.Compute.EKSSelfManagedNode
<a name="node-eks-self-managed"></a>

AWS TNB 支援 Amazon EKS 自我管理節點，以自動化 Amazon EKS Kubernetes 叢集節點 (Amazon EC2 執行個體） 的佈建和生命週期管理。若要建立 Amazon EKS 節點群組，請執行下列動作：
+ 透過提供 AMI 的 ID，為您的叢集工作者節點選擇 Amazon Machine Image (AMI)。
+ 為 SSH 存取提供 Amazon EC2 金鑰對。
+ 確保您的節點群組與 Amazon EKS 叢集相關聯。
+ 提供執行個體類型和所需的大小、大小下限和大小上限。
+ 提供工作者節點的子網路。
+ 或者，將安全群組、節點標籤和置放群組連接到節點群組。

## 語法
<a name="node-eks-self-managed-node-syntax"></a>

```
tosca.nodes.AWS.Compute.EKSSelfManagedNode:
  capabilities:
    compute:
      properties:
        ami\$1id: String
        instance\$1type: String
        key\$1pair: String
        root\$1volume\$1encryption: Boolean
        root\$1volume\$1encryption\$1key\$1arn: String    
        root\$1volume\$1size: Integer
    scaling:
      properties:
        desired\$1size: Integer
        min\$1size: Integer
        max\$1size: Integer  
  properties:
    node\$1role: String    
    tags: List          
  requirements:
    cluster: String
    subnets: List
    network\$1interfaces: List
    security\$1groups: List
    placement\$1group: String
    user\$1data: String
    labels: List
```

## 功能
<a name="node-eks-self-managed-node-capabilities"></a><a name="node_eks_self_managed_node_compute"></a>`compute`

定義 Amazon EKS 自我管理節點運算參數的屬性，例如 Amazon EC2 執行個體類型和 Amazon EC2 執行個體 AMIs。

 `ami_id`    
用來啟動執行個體的 AMI ID。 AWS TNB 支援利用 IMDSv2 的執行個體。如需詳細資訊，請參閱[IMDS 版本](imds-version.md)。  
您可以更新 的 AMI ID`EKSSelfManagedNode`。AMI 的 Amazon EKS 版本必須與 Amazon EKS 叢集版本相同或低於 2 個版本。例如，如果 Amazon EKS 叢集版本為 1.31，則 Amazon EKS AMI 版本必須為 1.31、1.30 或 1.29。
必要：是  
類型：字串

 `instance_type`    
執行個體大小。  
必要：是  
類型：字串

 `key_pair`    
啟用 SSH 存取的 Amazon EC2 金鑰對。  
必要：是  
類型：字串

 `root_volume_encryption`    
啟用 Amazon EBS 根磁碟區的 Amazon EBS 加密。如果未提供此屬性， AWS TNB 預設會加密 Amazon EBS 根磁碟區。  
必要：否  
預設：true  
類型：布林值

 `root_volume_encryption_key_arn`    
key AWS KMS . AWS TNB 的 ARN 支援一般金鑰 ARN、多區域金鑰 ARN 和別名 ARN。  
必要：否  
類型：字串  
+ 如果 `root_volume_encryption`為 false，請勿包含 `root_volume_encryption_key_arn`。
+ AWS TNB 支援 Amazon EBS 後端 AMI 的根磁碟區加密。
+ 如果 AMI 的根磁碟區已加密，您必須包含`root_volume_encryption_key_arn`適用於 AWS TNB 的 ，才能重新加密根磁碟區。
+  如果 AMI 的根磁碟區未加密， AWS TNB 會使用 `root_volume_encryption_key_arn`來加密根磁碟區。

  如果您不包含 `root_volume_encryption_key_arn`， AWS TNB 會使用 AWS Managed Services 來加密根磁碟區。
+ AWS TNB 不會解密加密的 AMI。

 `root_volume_size`    
Amazon Elastic Block Store 根磁碟區的大小，以 GiBs為單位。  
必要：否  
預設：20  
類型：整數  
可能的值：1 到 16，384<a name="node_eks_self_managed_node_scaling"></a>`scaling`

定義 Amazon EKS 自我管理節點擴展參數的屬性，例如所需的 Amazon EC2 執行個體數量，以及節點群組中 Amazon EC2 執行個體的數量下限和上限。

 `desired_size`    
此 NodeGroup 中的執行個體數量。  
必要：是  
類型：整數

 `min_size`    
此 NodeGroup 中的執行個體數量下限。  
必要：是  
類型：整數

 `max_size`    
此 NodeGroup 中的執行個體數量上限。  
必要：是  
類型：整數

## 屬性
<a name="node-eks-self-managed-node-properties"></a>

 `node_role`    
連接至 Amazon EC2 執行個體之 IAM 角色的 ARN。  
必要：是  
類型：字串

 `tags`    
要連接到資源的標籤。標籤將傳播到 資源建立的執行個體。  
必要：否  
類型：清單

## 要求
<a name="node-eks-self-managed-node-requirements"></a>

 `cluster`    
[AWS.Compute.EKS](node-eks.md) 節點。  
必要：是  
類型：字串

 `subnets`    
[AWS.Networking.Subnet](node-subnet.md) 節點。  
必要：是  
類型：清單

 `network_interfaces`    
[AWS.Networking.ENI](node-eni.md) 節點。確保網路介面和子網路設定為相同的可用區域，否則執行個體化將會失敗。  
當您設定 時`network_interfaces`，如果您在 [AWS.Compute.EKS](https://docs.aws.amazon.com/tnb/latest/ug/node-eks.html) 節點中包含 `multus` 屬性， AWS TNB 會從 `multus_role` 屬性取得與 ENIs 相關的許可。否則， AWS TNB 會從 [node\$1role](#node_eks_self_managed_node_role) 屬性取得與 ENIs相關的許可。  
必要：否  
類型：清單

 `security_groups`    
[AWS.Networking.SecurityGroup](node-networking-security-group.md) 節點。  
必要：否  
類型：清單

 `placement_group`    
[tosca.nodes AWS。Compute.PlacementGroup](node-compute-placement-group.md) 節點。  
必要：否  
類型：字串

 `user_data`    
[tosca.nodes AWS。Compute.UserData](node-compute-user-data.md) 節點參考。使用者資料指令碼會傳遞至自我管理節點群組啟動的 Amazon EC2 執行個體。將執行自訂使用者資料所需的許可新增至傳遞至節點群組的 node\$1role。  
必要：否  
類型：字串

 `labels`    
節點標籤的清單。節點標籤必須具有名稱和值。使用以下條件建立標籤：  
+ 名稱和值必須以 分隔`=`。
+ 名稱和值的長度上限為 63 個字元。
+ 標籤可以包含字母 (A-Z、a-z、)、數字 (0-9) 和下列字元： `[-, _, ., *, ?]`
+ 名稱和值必須以英數字元`?`、 或 `*` 字元開頭和結尾。
例如 `myLabelName1=*NodeLabelValue1`  
必要：否  
類型：清單

## 範例
<a name="node-eks-self-managed-node-example"></a>

```
SampleEKSSelfManagedNode:
  type: tosca.nodes.AWS.Compute.EKSSelfManagedNode
  capabilities:
    compute:
      properties:
        ami_id: "ami-123123EXAMPLE"
        instance_type: "c5.large"
        key_pair: "SampleKeyPair"
        root_volume_encryption: true
        root_volume_encryption_key_arn: "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
        root_volume_size: 1500
    scaling:
      properties:
        desired_size: 1
        min_size: 1
        max_size: 1
  properties:
    node_role: "arn:aws:iam::${AWS::TNB::AccountId}:role/SampleNodeRole" 
    tags:
      - "Name=SampleVPC"
      - "Environment=Testing"          
  requirements:
    cluster: SampleEKSCluster
    subnets:
      - SampleSubnet
    network_interfaces:
      - SampleNetworkInterface01
      - SampleNetworkInterface02
    security_groups:
      - SampleSecurityGroup01
      - SampleSecurityGroup02
    placement_group: SamplePlacementGroup
    user_data: CustomUserData
    labels:
      - "sampleLabelName001=sampleLabelValue001"
      - "sampleLabelName002=sampleLabelValue002"
```

# AWS.Compute.PlacementGroup
<a name="node-compute-placement-group"></a>

PlacementGroup 節點支援放置 Amazon EC2 執行個體的不同策略。

當您啟動新的 Amazon EC2instance時，Amazon EC2 服務會嘗試以將您的所有執行個體分散到基礎硬體的方式放置執行個體，以將相關故障降至最低。不過，您可以使用 置放群組 來影響一組 互相依存 執行個體的置放，以符合您的工作負載需求。

## 語法
<a name="node-compute-placement-group-syntax"></a>

```
tosca.nodes.AWS.Compute.PlacementGroup
  properties:
    strategy: String
    partition\$1count: Integer
    tags: List
```

## 屬性
<a name="node-compute-placement-group-properties"></a>

 `strategy`    
用來放置 Amazon EC2 執行個體的策略。  
必要：是  
類型：字串  
可能的值：CLUSTER \$1 PARTITION \$1 SPREAD\$1HOST \$1 SPREAD\$1RACK  
+ **CLUSTER** – 將執行個體封裝在可用區域內。此策略可讓工作負載達到高效能運算 (HPC) 應用程式典型緊密耦合節點對節點通訊所需的低延遲網路效能。
+ **PARTITION** – 將您的執行個體分散到邏輯分割區，讓一個分割區中的執行個體群組不會與不同分割區中的執行個體群組共用基礎硬體。大量分散和複寫的工作負載 (例如 Hadoop、Cassandra 和 Kafka) 通常採取此策略。
+ **SPREAD\$1RACK** – 跨不同的基礎硬體放置一小組執行個體，以減少相互關聯的故障。
+ **SPREAD\$1HOST** – 僅用於 Outpost 置放群組。跨不同的基礎硬體放置一小組執行個體，以減少相互關聯的故障。

 `partition_count`    
分割區數。  
必要：只有在 `strategy` 設定為 時才需要`PARTITION`。  
類型：整數  
可能的值：1 \$1 2 \$13 \$1 4 \$1 5 \$1 6 \$1 7

 `tags`    
您可以連接到置放群組資源的標籤。  
必要：否  
類型：清單

## 範例
<a name="node-compute-placement-group-example"></a>

```
ExamplePlacementGroup:
  type: tosca.nodes.AWS.Compute.PlacementGroup
  properties:
    strategy: "PARTITION"
    partition_count: 5
    tags: 
      - tag_key=tag_value
```

# AWS.Compute.UserData
<a name="node-compute-user-data"></a>

AWS TNB 支援透過 Network Service Descriptor (NSD) 中的 UserData 節點，使用自訂使用者資料啟動 Amazon EC2 執行個體。如需自訂使用者資料的詳細資訊，請參閱《*Amazon EC2 使用者指南*》中的[使用者資料和 shell 指令碼](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html#user-data-shell-scripts)。

在網路執行個體化期間， AWS TNB 會透過使用者資料指令碼將 Amazon EC2 執行個體註冊提供給叢集。同時提供自訂使用者資料時， AWS TNB 會合併兩個指令碼，並將它們做為[多mime](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html#user-data-mime-multi) 指令碼傳遞給 Amazon EC2。自訂使用者資料指令碼會在 Amazon EKS 註冊指令碼之前執行。

若要在使用者資料指令碼中使用自訂變數，請在開啟的大括號 `!`之後新增驚嘆號`{`。例如，若要在指令碼`MyVariable`中使用 ，請輸入： `{!MyVariable}`

**注意**  
AWS TNB 支援大小上限為 7 KB 的使用者資料指令碼。
由於 AWS TNB 使用 CloudFormation 來處理和轉譯`multimime`使用者資料指令碼，因此請確保指令碼符合所有 CloudFormation 規則。

## 語法
<a name="node-compute-user-data-syntax"></a>

```
tosca.nodes.AWS.Compute.UserData:
  properties:
    implementation: String
    content\$1type: String
```

## 屬性
<a name="node-compute-user-data-properties"></a>

 `implementation`    
使用者資料指令碼定義的相對路徑。格式必須為： `./scripts/script_name.sh`  
必要：是  
類型：字串

 `content_type`    
使用者資料指令碼的內容類型。  
必要：是  
類型：字串  
可能的值： `x-shellscript`

## 範例
<a name="node-compute-user-data-example"></a>

```
ExampleUserData:
  type: tosca.nodes.AWS.Compute.UserData
  properties:
    content_type: "text/x-shellscript"
    implementation: "./scripts/customUserData.sh"
```

# AWS.Networking.SecurityGroup
<a name="node-networking-security-group"></a>

AWS TNB 支援安全群組自動佈建 [Amazon EC2 安全群組](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-security-groups.html)，您可以將這些群組連接到 Amazon EKS Kubernetes 叢集節點群組。

## 語法
<a name="node-networking-security-group-syntax"></a>

```
tosca.nodes.AWS.Networking.SecurityGroup
  properties:
    description: String
    name: String
    tags: List
  requirements:
    vpc: String
```

## 屬性
<a name="node-networking-security-group-properties"></a>

 `description`    
安全群組的描述。您最多可以使用 255 個字元來描述群組。您只能包含字母 (A-Z 和 a-z)、數字 (0-9)、空格和下列特殊字元：.\$1-：/()\$1，@【】\$1=&；\$1\$1！\$1\$1  
必要：是  
類型：字串

 `name`    
安全群組的名稱。名稱最多可使用 255 個字元。您只能包含字母 (A-Z 和 a-z)、數字 (0-9)、空格和下列特殊字元：.\$1-：/()\$1，@【】\$1=&；\$1\$1！\$1\$1  
必要：是  
類型：字串

 `tags`    
您可以連接到安全群組資源的標籤。  
必要：否  
類型：清單

## 要求
<a name="node-networking-security-group-requirements"></a>

 `vpc`    
[AWS.Networking.VPC](node-vpc.md) 節點。  
必要：是  
類型：字串

## 範例
<a name="node-networking-security-group-example"></a>

```
SampleSecurityGroup001:
  type: tosca.nodes.AWS.Networking.SecurityGroup
  properties:
        description: "Sample Security Group for Testing"
        name: "SampleSecurityGroup"
        tags:
          - "Name=SecurityGroup"
          - "Environment=Testing"
      requirements:
        vpc: SampleVPC
```

# AWS.Networking.SecurityGroupEgressRule
<a name="node-networking-security-group-egress-rule"></a>

AWS TNB 支援安全群組輸出規則，以自動佈建可連接到 AWS.Networking.SecurityGroup 的 Amazon EC2 安全群組輸出規則。請注意，您必須提供 cidr\$1ip/destination\$1security\$1group/destination\$1prefix\$1list 作為輸出流量的目的地。

## 語法
<a name="node-networking-security-group-egress-rule-syntax"></a>

```
AWS.Networking.SecurityGroupEgressRule
  properties:
    ip\$1protocol: String
    from\$1port: Integer
    to\$1port: Integer
    description: String
    destination\$1prefix\$1list: String
    cidr\$1ip: String
    cidr\$1ipv6: String
  requirements:
    security\$1group: String
    destination\$1security\$1group: String
```

## 屬性
<a name="node-networking-security-group-egress-rule-properties"></a>

 `cidr_ip`    
CIDR 格式的 IPv4 地址範圍。您必須指定允許輸出流量的 CIDR 範圍。  
必要：否  
類型：字串

 `cidr_ipv6`    
CIDR 格式的 IPv6 地址範圍，用於輸出流量。您必須指定目標安全群組 (`destination_security_group` 或 `destination_prefix_list`) 或 CIDR 範圍 (`cidr_ip` 或 `cidr_ipv6`)。  
必要：否  
類型：字串

 `description`    
輸出 (傳出) 安全群組規則的描述。您最多可以使用 255 個字元來描述規則。  
必要：否  
類型：字串

 `destination_prefix_list`    
現有 Amazon VPC 受管字首清單的字首清單 ID。這是來自與安全群組相關聯之節點群組執行個體的目的地。如需受管字首清單的詳細資訊，請參閱《*Amazon VPC 使用者指南*》中的[受管字首清單](https://docs.aws.amazon.com/vpc/latest/userguide/managed-prefix-lists.html)。  
必要：否  
類型：字串

 `from_port`    
如果通訊協定是 TCP 或 UDP，這是連接埠範圍的開頭。如果通訊協定是 ICMP 或 ICMPv6，這是類型編號。值 -1 表示所有 ICMP/ICMPv6 類型。若您指定所有 ICMP/ICMPv6 類型，您必須指定所有 ICMP/ICMPv6 代碼。  
必要：否  
類型：整數

 `ip_protocol`    
IP 通訊協定名稱 (tcp、udp、icmp、icmpv6) 或通訊協定編號。使用 -1 指定所有通訊協定。授權安全群組規則時，指定 tcp、udp、icmp 或 icmpv6 以外的 -1 或通訊協定號碼，允許所有連接埠上的流量，無論您指定的任何連接埠範圍為何。對於 tcp、udp 和 icmp，您必須指定連接埠範圍。對於 icmpv6，連接埠範圍是選用的；如果您省略連接埠範圍，則允許所有類型和代碼的流量。  
必要：是  
類型：字串

 `to_port`    
如果通訊協定是 TCP 或 UDP，這是連接埠範圍的結尾。如果通訊協定是 ICMP 或 ICMPv6，這是代碼。值 -1 表示所有 ICMP/ICMPv6 代碼。若您指定所有 ICMP/ICMPv6 類型，您必須指定所有 ICMP/ICMPv6 代碼。  
必要：否  
類型：整數

## 要求
<a name="node-networking-security-group-egress-rule-requirements"></a>

 `security_group`    
要新增此規則的安全群組 ID。  
必要：是  
類型：字串

 `destination_security_group`    
允許輸出流量目的地安全群組的 ID 或 TOSCA 參考。  
必要：否  
類型：字串

## 範例
<a name="node-networking-security-group-egress-rule-example"></a>

```
SampleSecurityGroupEgressRule:
      type: tosca.nodes.AWS.Networking.SecurityGroupEgressRule
      properties:
        ip_protocol: "tcp"
        from_port: 8000
        to_port: 9000
        description: "Egress Rule for sample security group"
        cidr_ipv6: "2600:1f14:3758:ca00::/64"    
      requirements:
        security_group: SampleSecurityGroup001
        destination_security_group: SampleSecurityGroup002
```

# AWS.Networking.SecurityGroupIngressRule
<a name="node-networking-security-group-ingress-rule"></a>

AWS TNB 支援安全群組傳入規則，以自動佈建可連接到 AWS.Networking.SecurityGroup 的 Amazon EC2 安全群組傳入規則。請注意，您必須提供 cidr\$1ip/source\$1security\$1group/source\$1prefix\$1list 作為輸入流量的來源。

## 語法
<a name="node-networking-security-group-ingress-rule-syntax"></a>

```
AWS.Networking.SecurityGroupIngressRule
  properties:
    ip\$1protocol: String
    from\$1port: Integer
    to\$1port: Integer
    description: String
    source\$1prefix\$1list: String
    cidr\$1ip: String
    cidr\$1ipv6: String
  requirements:
    security\$1group: String
    source\$1security\$1group: String
```

## 屬性
<a name="node-networking-security-group-ingress-rule-properties"></a>

 `cidr_ip`    
CIDR 格式的 IPv4 地址範圍。您必須指定允許輸入流量的 CIDR 範圍。  
必要：否  
類型：字串

 `cidr_ipv6`    
輸入流量的 CIDR 格式 IPv6 地址範圍。您必須指定來源安全群組 (`source_security_group` 或 `source_prefix_list`) 或 CIDR 範圍 (`cidr_ip` 或 `cidr_ipv6`)。  
必要：否  
類型：字串

 `description`    
傳入 （傳入） 安全群組規則的描述。您最多可以使用 255 個字元來描述規則。  
必要：否  
類型：字串

 `source_prefix_list`    
現有 Amazon VPC 受管字首清單的字首清單 ID。這是允許與安全群組相關聯之節點群組執行個體接收流量的來源。如需受管字首清單的詳細資訊，請參閱《*Amazon VPC 使用者指南*》中的[受管字首清單](https://docs.aws.amazon.com/vpc/latest/userguide/managed-prefix-lists.html)。  
必要：否  
類型：字串

 `from_port`    
如果通訊協定是 TCP 或 UDP，這是連接埠範圍的開頭。如果通訊協定是 ICMP 或 ICMPv6，這是類型編號。值 -1 表示所有 ICMP/ICMPv6 類型。若您指定所有 ICMP/ICMPv6 類型，您必須指定所有 ICMP/ICMPv6 代碼。  
必要：否  
類型：整數

 `ip_protocol`    
IP 通訊協定名稱 (tcp、udp、icmp、icmpv6) 或通訊協定編號。使用 -1 指定所有通訊協定。授權安全群組規則時，指定 tcp、udp、icmp 或 icmpv6 以外的 -1 或通訊協定號碼，允許所有連接埠上的流量，無論您指定的任何連接埠範圍為何。對於 tcp、udp 和 icmp，您必須指定連接埠範圍。對於 icmpv6，連接埠範圍是選用的；如果您省略連接埠範圍，則允許所有類型和代碼的流量。  
必要：是  
類型：字串

 `to_port`    
如果通訊協定是 TCP 或 UDP，這是連接埠範圍的結尾。如果通訊協定是 ICMP 或 ICMPv6，這是代碼。值 -1 表示所有 ICMP/ICMPv6 代碼。若您指定所有 ICMP/ICMPv6 類型，您必須指定所有 ICMP/ICMPv6 代碼。  
必要：否  
類型：整數

## 要求
<a name="node-networking-security-group-ingress-rule-requirements"></a>

 `security_group`    
要新增此規則的安全群組 ID。  
必要：是  
類型：字串

 `source_security_group`    
允許輸入流量之來源安全群組的 ID 或 TOSCA 參考。  
必要：否  
類型：字串

## 範例
<a name="node-networking-security-group-ingress-rule-example"></a>

```
SampleSecurityGroupIngressRule:
      type: tosca.nodes.AWS.Networking.SecurityGroupIngressRule
      properties:
        ip_protocol: "tcp"
        from_port: 8000
        to_port: 9000
        description: "Ingress Rule for free5GC cluster on IPv6"
        cidr_ipv6: "2600:1f14:3758:ca00::/64"    
      requirements:
        security_group: SampleSecurityGroup1
        source_security_group: SampleSecurityGroup2
```

# AWS.Resource.Import
<a name="node-resource-import"></a>

您可以將下列 AWS 資源匯入 AWS TNB：
+ VPC
+ 子網路
+ 路由表
+ 網際網路閘道
+ 安全群組

## 語法
<a name="node-resource-import-syntax"></a>

```
tosca.nodes.AWS.Resource.Import
  properties:
    resource\$1type: String
    resource\$1id: String
```

## 屬性
<a name="node-resource-import-properties"></a>

 `resource_type`    
匯入至 AWS TNB 的資源類型。  
必要：否  
類型：清單

 `resource_id`    
匯入至 AWS TNB 的資源 ID。  
必要：否  
類型：清單

## 範例
<a name="node-resource-import-example"></a>

```
SampleImportedVPC:
  type: tosca.nodes.AWS.Resource.Import
  properties:
    resource_type: "tosca.nodes.AWS.Networking.VPC"
    resource_id: "vpc-123456"
```

# AWS.Networking.ENI
<a name="node-eni"></a>

網路介面是 VPC 中代表虛擬網路卡的邏輯聯網元件。網路界面會根據其子網路自動或手動指派 IP 地址。在子網路中部署 Amazon EC2 執行個體之後，您可以將網路介面連接至子網路，或從該 Amazon EC2 執行個體分離網路介面，然後重新連接至該子網路中的另一個 Amazon EC2 執行個體。裝置索引會以連接順序識別位置。

## 語法
<a name="node-eni-syntax"></a>

```
tosca.nodes.AWS.Networking.ENI:
  properties:
    device\$1index: Integer
    source\$1dest\$1check: Boolean
    tags: List
  requirements:
    subnet: String
    security\$1groups: List
```

## 屬性
<a name="node-eni-properties"></a>

 `device_index`    
裝置索引必須大於零。  
必要：是  
類型：整數

 `source_dest_check`    
指出網路界面是否執行來源/目的地檢查。`true` 值表示啟用檢查，`false` 值表示停用檢查。  
允許的值：true、false  
預設：true  
必要：否  
類型：布林值

 `tags`    
要連接到資源的標籤。  
必要：否  
類型：清單

## 要求
<a name="node-eni-requirements"></a>

 `subnet`    
[AWS.Networking.Subnet](node-subnet.md) 節點。  
必要：是  
類型：字串

 `security_groups`    
[AWS.Networking.SecurityGroup](node-networking-security-group.md) 節點。  
必要：否  
類型：字串

## 範例
<a name="node-eni-example"></a>

```
SampleENI:
  type: tosca.nodes.AWS.Networking.ENI
  properties:
    device_index: 5
    source_dest_check: true
    tags:
      - "Name=SampleVPC"
      - "Environment=Testing" 
  requirements:
    subnet: SampleSubnet
    security_groups:
      - SampleSecurityGroup01
      - SampleSecurityGroup02
```

# AWS.HookExecution
<a name="node-hook-execution"></a>

生命週期關聯可讓您執行自己的指令碼，做為基礎設施和網路執行個體的一部分。

## 語法
<a name="node-hook-execution-syntax"></a>

```
tosca.nodes.AWS.HookExecution:
  capabilities:
    execution:
      properties:
        type: String
  requirements:
    definition: String
    vpc: String
```

## 功能
<a name="node-hook-execution-capabilities"></a><a name="node_hook_execution"></a>`execution`

執行勾點指令碼之勾點執行引擎的屬性。

 `type`    
勾點執行引擎類型。  
必要：否  
類型：字串  
可能的值： `CODE_BUILD`

## 要求
<a name="node-hook-execution-requirements"></a>

 `definition`    
[AWS.HookDefinition.Bash](node-hook-bash.md) 節點。  
必要：是  
類型：字串

 `vpc`    
[AWS.Networking.VPC](node-vpc.md) 節點。  
必要：是  
類型：字串

## 範例
<a name="node-hook-execution-example"></a>

```
SampleHookExecution:
  type: tosca.nodes.AWS.HookExecution
  requirements:
    definition: SampleHookScript
    vpc: SampleVPC
```

# AWS.Networking.InternetGateway
<a name="node-internet-gateway"></a>

定義 AWS 網際網路閘道節點。

## 語法
<a name="node-internet-gateway-syntax"></a>

```
tosca.nodes.AWS.Networking.InternetGateway:
  capabilities:
    routing:
      properties:
        dest\$1cidr: String
        ipv6\$1dest\$1cidr: String    
  properties:
    tags: List
    egress\$1only: Boolean
  requirements:
    vpc: String
    route\$1table: String
```

## 功能
<a name="node-internet-gateway-capabilities"></a><a name="node_internet_gateway_routing"></a>`routing`

定義 VPC 內路由連線的屬性。您必須包含 `dest_cidr`或 `ipv6_dest_cidr` 屬性。

 `dest_cidr`    
用於目的地比對的 IPv4 CIDR 區塊。此屬性用於在 中建立路由，`RouteTable`其值用作 `DestinationCidrBlock`。  
必要：如果您包含 `ipv6_dest_cidr` 屬性，則為否。  
類型：字串

 `ipv6_dest_cidr`    
用於目的地比對的 IPv6 CIDR 區塊。  
必要：如果您包含 `dest_cidr` 屬性，則為否。  
類型：字串

## 屬性
<a name="node-internet-gateway-properties"></a>

 `tags`    
要連接到資源的標籤。  
必要：否  
類型：清單

 `egress_only`    
IPv6-specific 屬性。指出網際網路閘道是否僅用於輸出通訊。當 `egress_only` 為 true 時，您必須定義 `ipv6_dest_cidr` 屬性。  
必要：否  
類型：布林值

## 要求
<a name="node-internet-gateway-requirements"></a>

 `vpc`    
[AWS.Networking.VPC](node-vpc.md) 節點。  
必要：是  
類型：字串

 `route_table`    
[AWS.Networking.RouteTable](node-route-table.md) 節點。  
必要：是  
類型：字串

## 範例
<a name="node-internet-gateway-example"></a>

```
Free5GCIGW:
  type: tosca.nodes.AWS.Networking.InternetGateway
  properties:
    egress_only: false
  capabilities:
    routing:
      properties:
        dest_cidr: "0.0.0.0/0"
        ipv6_dest_cidr: "::/0"
  requirements:
    route_table: Free5GCRouteTable
    vpc: Free5GCVPC
Free5GCEGW:
  type: tosca.nodes.AWS.Networking.InternetGateway
  properties:
    egress_only: true
  capabilities:
    routing:
      properties:
        ipv6_dest_cidr: "::/0"
  requirements:
    route_table: Free5GCPrivateRouteTable
    vpc: Free5GCVPC
```

# AWS.Networking.RouteTable
<a name="node-route-table"></a>

路由表包含一組稱為路由的規則，可判斷來自 VPC 或閘道內子網路的網路流量導向位置。您必須將路由表與 VPC 建立關聯。

## 語法
<a name="node-route-table-syntax"></a>

```
tosca.nodes.AWS.Networking.RouteTable:
  properties:
    tags: List
  requirements:
    vpc: String
```

## 屬性
<a name="node-route-table-properties"></a>

 `tags`    
要連接到資源的標籤。  
必要：否  
類型：清單

## 要求
<a name="node-route-table-requirements"></a>

 `vpc`    
[AWS.Networking.VPC](node-vpc.md) 節點。  
必要：是  
類型：字串

## 範例
<a name="node-route-table-example"></a>

```
SampleRouteTable:
  type: tosca.nodes.AWS.Networking.RouteTable
  properties: 
    tags:
      - "Name=SampleVPC"
      - "Environment=Testing"
  requirements:
    vpc: SampleVPC
```

# AWS.Networking.Subnet
<a name="node-subnet"></a>

子網路是 VPC 中的 IP 地址範圍，且必須完全位於一個可用區域內。您必須為子網路指定 VPC、CIDR 區塊、可用區域和路由表。您還必須定義子網路是私有還是公有。

## 語法
<a name="node-subnet-syntax"></a>

```
tosca.nodes.AWS.Networking.Subnet:
  properties:
    type: String
    availability\$1zone: String
    cidr\$1block: String
    ipv6\$1cidr\$1block: String
    ipv6\$1cidr\$1block\$1suffix: String        
    outpost\$1arn: String
    tags: List
  requirements:
    vpc: String
    route\$1table: String
```

## 屬性
<a name="node-subnet-properties"></a>

 `type`    
指示在此子網路中啟動的執行個體是否會收到公有 IPv4 地址。  
必要：是  
類型：字串  
可能的值：`PUBLIC` \$1 `PRIVATE`

 `availability_zone`    
子網路的可用區域。此欄位支援 AWS 區域內的 AWS 可用區域，例如 `us-west-2`（美國西部 （奧勒岡）)。它也支援可用區域內的 AWS 本機區域，例如 `us-west-2-lax-1a`。  
必要：是  
類型：字串

 `cidr_block`    
子網路的 CIDR 區塊。  
必要：否  
類型：字串

 `ipv6_cidr_block`    
用來建立 IPv6 子網路的 CIDR 區塊。如果您包含此屬性，請勿包含 `ipv6_cidr_block_suffix`。  
必要：否  
類型：字串

 `ipv6_cidr_block_suffix`    
透過 Amazon VPC 建立之子網路的 IPv6 CIDR 區塊的 2 位數十六進位尾碼。使用下列格式：`2-digit hexadecimal::/subnetMask`  
如果您包含此屬性，請勿包含 `ipv6_cidr_block`。  
必要：否  
類型：字串

 `outpost_arn`    
要在 AWS Outposts 其中建立子網路的 ARN。如果您想要在 上啟動 Amazon EKS 自我管理節點，請將此屬性新增至 NSD 範本 AWS Outposts。如需詳細資訊，請參閱《[Amazon EKS 使用者指南 AWS Outposts](https://docs.aws.amazon.com/eks/latest/userguide/eks-outposts.html)*》中的 上的 Amazon EKS*。  
如果您將此屬性新增至 NSD 範本，則必須將 `availability_zone` 屬性的值設定為 的可用區域 AWS Outposts。  
必要：否  
類型：字串

 `tags`    
要連接到資源的標籤。  
必要：否  
類型：清單

## 要求
<a name="node-subnet-requirements"></a>

 `vpc`    
[AWS.Networking.VPC](node-vpc.md) 節點。  
必要：是  
類型：字串

 `route_table`    
[AWS.Networking.RouteTable](node-route-table.md) 節點。  
必要：是  
類型：字串

## 範例
<a name="node-subnet-example"></a>

```
SampleSubnet01:
  type: tosca.nodes.AWS.Networking.Subnet
  properties:
    type: "PUBLIC"
    availability_zone: "us-east-1a"
    cidr_block: "10.100.50.0/24"
    ipv6_cidr_block_suffix: "aa::/64"
    outpost_arn: "arn:aws:outposts:region:accountId:outpost/op-11223344EXAMPLE"
    tags:
      - "Name=SampleVPC"
      - "Environment=Testing"
  requirements:
    vpc: SampleVPC
    route_table: SampleRouteTable
         
SampleSubnet02:
  type: tosca.nodes.AWS.Networking.Subnet
  properties:
    type: "PUBLIC"
    availability_zone: "us-west-2b"
    cidr_block: "10.100.50.0/24"
    ipv6_cidr_block: "2600:1f14:3758:ca00::/64"
  requirements:
    route_table: SampleRouteTable
    vpc: SampleVPC
```

# AWS.Deployment.VNFDeployment
<a name="node-vnf-deployment"></a>

NF 部署的建模方式是提供基礎設施和與其相關聯的應用程式。[叢集](#node_vnf_deployment_cluster)屬性會指定 EKS 叢集來託管您的 NFs。[vnfs](#node_vnf_deployment_vnfs) 屬性會指定您部署的網路函數。您也可以提供 pre[\$1create](#node_vnf_deployment_pre_create) 和 [post\$1create](#node_vnf_deployment_post_create) 類型的選用生命週期掛鉤操作，以執行您部署的特定指示，例如呼叫庫存管理系統 API。

## 語法
<a name="node-vnf-deployment-syntax"></a>

```
tosca.nodes.AWS.Deployment.VNFDeployment:
  requirements:
    deployment: String
    cluster: String
    vnfs: List
  interfaces:
    Hook:
      pre\$1create: String
      post\$1create: String
```

## 要求
<a name="node-vnf-deployment-requirements"></a>

 `deployment`    
[AWS.Deployment.VNFDeployment](node-vnf.md) 節點。  
必要：否  
類型：字串

 `cluster`    
[AWS.Compute.EKS](node-eks.md) 節點。  
必要：是  
類型：字串

 `vnfs`    
[AWS.VNF](node-vnf.md) 節點。  
必要：是  
類型：字串

## 介面
<a name="node-vnf-deployment-interfaces"></a>

### 勾點
<a name="node-vnf-deployment-hooks"></a>

定義生命週期掛鉤執行時的階段。

 `pre_create`    
[AWS.HookExecution](node-hook-execution.md) 節點。此掛鉤會在`VNFDeployment`節點部署之前執行。  
必要：否  
類型：字串

 `post_create`    
[AWS.HookExecution](node-hook-execution.md) 節點。此掛鉤會在`VNFDeployment`節點部署之後執行。  
必要：否  
類型：字串

## 範例
<a name="node-vnf-deployment-example"></a>

```
SampleHelmDeploy:
  type: tosca.nodes.AWS.Deployment.VNFDeployment
  requirements:
    deployment: SampleHelmDeploy2
    cluster: SampleEKS
    vnfs:
      - vnf.SampleVNF
  interfaces:
    Hook:
      pre_create: SampleHook
```

# AWS.Networking.VPC
<a name="node-vpc"></a>

您必須為虛擬私有雲端 (VPC) 指定 CIDR 區塊。

## 語法
<a name="node-vpc-syntax"></a>

```
tosca.nodes.AWS.Networking.VPC:
  properties:
    cidr\$1block: String
    ipv6\$1cidr\$1block: String        
    dns\$1support: String
    tags: List
```

## 屬性
<a name="node-vpc-properties"></a>

 `cidr_block`    
VPC 的 IPv4 網路範圍 (以 CIDR 表示法表示)。  
必要：是  
類型：字串

 `ipv6_cidr_block`    
用來建立 VPC 的 IPv6 CIDR 區塊。  
允許的值： `AMAZON_PROVIDED`  
必要：否  
類型：字串

 `dns_support`    
指示 VPC 中啟動的執行個體是否會收到 DNS 主機名稱。  
必要：否  
類型：布林值  
預設：`false`

 `tags`    
要連接到資源的標籤。  
必要：否  
類型：清單

## 範例
<a name="node-vpc-example"></a>

```
SampleVPC:
  type: tosca.nodes.AWS.Networking.VPC
  properties:
    cidr_block: "10.100.0.0/16"
    ipv6_cidr_block: "AMAZON_PROVIDED"
    dns_support: true
    tags:
      - "Name=SampleVPC"
      - "Environment=Testing"
```

# AWS.Networking.NATGateway
<a name="node-nat-gateway"></a>

您可以透過子網路定義公有或私有 NAT Gateway 節點。對於公有閘道，如果您不提供彈性 IP 配置 ID， AWS TNB 會為您的 帳戶配置彈性 IP，並將其與閘道建立關聯。

## 語法
<a name="node-nat-gateway-syntax"></a>

```
tosca.nodes.AWS.Networking.NATGateway:
  requirements:
    subnet: String
    internet\$1gateway: String
  properties:
    type: String
    eip\$1allocation\$1id: String
    tags: List
```

## 屬性
<a name="node-nat-gateway-requirements"></a>

 `subnet`    
[AWS.Networking.Subnet](https://docs.aws.amazon.com/tnb/latest/ug/node-subnet.html) 節點參考。  
必要：是  
類型：字串

 `internet_gateway`    
[AWS.Networking.InternetGateway](https://docs.aws.amazon.com/tnb/latest/ug/node-internet-gateway.html) 節點參考。  
必要：是  
類型：字串

## 屬性
<a name="node-nat-gateway-properties"></a>

 `type`    
指出閘道是公有還是私有。  
允許的值：`PUBLIC`、 `PRIVATE`  
必要：是  
類型：字串

 `eip_allocation_id`    
代表彈性 IP 地址配置的 ID。  
必要：否  
類型：字串

 `tags`    
要連接到資源的標籤。  
必要：否  
類型：清單

## 範例
<a name="node-nat-gateway-example"></a>

```
Free5GCNatGateway01:
  type: tosca.nodes.AWS.Networking.NATGateway
    requirements:
       subnet: Free5GCSubnet01
       internet_gateway: Free5GCIGW
    properties:
       type: PUBLIC
       eip_allocation_id: eipalloc-12345
```

# AWS.Networking.Route
<a name="node-route"></a>

您可以定義路由節點，將目的地路由關聯至 NAT Gateway 做為目標資源，並將路由新增至關聯的路由表。

## 語法
<a name="node-route-syntax"></a>

```
tosca.nodes.AWS.Networking.Route:
  properties:
    dest\$1cidr\$1blocks: List          
  requirements:
    nat\$1gateway: String
    route\$1table: String
```

## 屬性
<a name="node-route-properties"></a>

 `dest_cidr_blocks`    
目標資源的目的地 IPv4 路由清單。  
必要：是  
類型：清單  
成員類型：字串

## 要求
<a name="node-route-requirements"></a>

 `nat_gateway`    
[AWS.Networking.NATGateway](https://docs.aws.amazon.com/tnb/latest/ug/node-nat-gateway.html) 節點參考。  
必要：是  
類型：字串

 `route_table`    
[AWS.Networking.RouteTable](https://docs.aws.amazon.com/tnb/latest/ug/node-route-table.html) 節點參考。  
必要：是  
類型：字串

## 範例
<a name="node-route-example"></a>

```
Free5GCRoute:
  type: tosca.nodes.AWS.Networking.Route
  properties: 
    dest_cidr_blocks: 
      - 0.0.0.0/0
      - 10.0.0.0/28    
  requirements:
    nat_gateway: Free5GCNatGateway01
    route_table: Free5GCRouteTable
```

# AWS.Store.SSMParameters
<a name="node-ssm"></a>

您可以透過 AWS TNB 建立 SSM 參數。您建立的 SSM 參數是在 SSM 中建立，字首為 AWS TNB 網路執行個體 ID。這可防止在使用相同 NSD 範本執行個體化和升級多個執行個體時，參數值遭到覆寫。

## 語法
<a name="node-ssm-syntax"></a>

```
tosca.nodes.AWS.Store.SSMParameters
  properties:
    parameters:
      name: String
      value: String         
    tags: List
```

## 屬性
<a name="node-ssm-properties"></a>參數

 `name`    
ssm 屬性的名稱。使用下列格式：`^[a-zA-Z0-9]+[a-zA-Z0-9\-\_]*[a-zA-Z0-9]+$`  
每個參數的名稱必須少於 256 個字元。  
必要：是  
類型：字串

 `value`    
ssm 屬性的值。請使用下列其中一個格式：  
+ 對於沒有參考的值： `^[a-zA-Z0-9]+[a-zA-Z0-9\-\_]*[a-zA-Z0-9]+$`
+ 對於靜態參考： `^\$\{[a-zA-Z0-9]+\.(properties|capabilities|requirements)(\.([a-zA-Z0-9\-_]+))+\}$`
+ 對於動態參考： `^\$\{[a-zA-Z0-9]+\.(name|id|arn)\}$`
每個參數的值必須小於 4 KB。  
必要：是  
類型：字串

 `tags`    
您可以連接到 SSM 屬性的標籤。  
必要：否  
類型：清單

## 範例
<a name="node-ssm-example"></a>

```
SampleSSM
    type: tosca.nodes.AWS.Store.SSMParameters
    properties:
        parameters:
            - name: "Name1"
              value: "Value1"
            - name: "EKS_VERSION"
              value: "${SampleEKS.properties.version}"
            - name: "VPC_ID"
              value: "${SampleVPC.id}
            - name: "REGION"
              value: "${AWS::Region}
        tags:
            - "tagKey=tagValue"
```

# 常見節點
<a name="common-nodes"></a>

定義 NSD 和 VNFD 的節點。
+ [AWS.HookDefinition.Bash](node-hook-bash.md)

# AWS.HookDefinition.Bash
<a name="node-hook-bash"></a>

在 中定義 an AWS HookDefinition`bash`。

## 語法
<a name="hookdefinition-syntax"></a>

```
tosca.nodes.AWS.HookDefinition.Bash:
  properties:
    implementation: String
    environment\$1variables: List
    execution\$1role: String
```

## 屬性
<a name="_properties"></a>

 `implementation`    
勾點定義的相對路徑。格式必須為： `./hooks/script_name.sh`  
必要：是  
類型：字串

 `environment_variables`    
hook bash 指令碼的環境變數。使用下列格式：`envName=envValue`搭配下列 regex 模式：  
+ 對於沒有參考的值： `^[a-zA-Z0-9]+[a-zA-Z0-9\-\_]*[a-zA-Z0-9]+=[a-zA-Z0-9]+[a-zA-Z0-9\-\_]*[a-zA-Z0-9]+$`
+ 對於靜態參考： `^[a-zA-Z0-9]+[a-zA-Z0-9\-\_]*[a-zA-Z0-9]+=\$\{[a-zA-Z0-9]+\.(properties|capabilities|requirements)(\.([a-zA-Z0-9\-_]+))+\}$`
+ 對於動態參考： `^[a-zA-Z0-9]+[a-zA-Z0-9\-\_]*[a-zA-Z0-9]+=\$\{[a-zA-Z0-9]+\.(name|id|arn)\}$`
請確定該`envName=envValue`值符合下列條件：  
+ 請勿使用空格。
+ 從字母 (A-Z 或 a-z) 或數字 (0-9) **envName**開始。
+ 請勿使用下列 AWS TNB 預留關鍵字 （不區分大小寫） 啟動環境變數名稱：
  + CODEBUILD
  + TNB
  + 首頁
  + AWS
+ 您可以使用任意數量的字母 (A-Z 或 a-z)、數字 (0-9) 和特殊字元，**envName**以及 `_` `-`和 **envValue**。
+ 每個環境變數 （每個 **envName**=**envValue**) 必須少於 128 個字元。
範例：`A123-45xYz=Example_789`  
必要：否  
類型：清單

 `execution_role`    
勾點執行的角色。  
必要：是  
類型：字串

## 範例
<a name="hookdefinition-example"></a>

```
SampleHookScript:
  type: tosca.nodes.AWS.HookDefinition.Bash
  properties:
    implementation: "./hooks/myhook.sh"
    environment_variables:
      - "variable01=value01"
      - "variable02=value02"
    execution_role: "arn:aws:iam::${AWS::TNB::AccountId}:role/SampleHookPermission"
```