Parameters:
ClusterName:
Type: String
ClusterVersion:
Type: Number
AllowedValues: [1.21, 1.20, 1.19, 1.18]
RoleArnValue:
Type: String
ListOfSubnetIDs:
Description: Array of Subnet IDs
Type: List<AWS::EC2::Subnet::Id>
ListOfSecurityGroupIDs:
Description: Array of security group ids
Type: List<AWS::EC2::SecurityGroup::Id>
Resources:
EKSCluster:
Type: AWS::EKS::Cluster
Properties:
Name: !Sub ${ClusterName}
Version: !Sub ${ClusterVersion}
RoleArn: !Sub ${RoleArnValue}
ResourcesVpcConfig:
SecurityGroupIds:
- !Sub ${ListOfSecurityGroupIDs}
SubnetIds:
- !Sub ${ListOfSubnetIDs}
Шаблон Выше .yaml cloouldformation, который я создал, чтобы я мог раскрутить кластер eks. Затем я использую aws cli для запуска кластера с помощью следующей команды.
aws cloudformation deploy --template-file eks.yaml --stack-name cluster-test --parameter-overrides ClusterName=Dev ClusterVersion=1.21 ListOfSubnetIDs=subnet-11111d11b11b011f4,subnet-99999d237f87f11d7,subnet-222222c110c7e4be7,subnet-88888884de8d25176 ListOfSecurityGroupIDs=sg-01111111a21221 RoleArnValue=arn:aws:iam::123456546456:role/cluster-ServiceRole-WMIC72AOWSP0 --capabilities CAPABILITY_NAMED_IAM
Я получаю следующую ошибку
An error occurred (ValidationError) when calling the CreateChangeSet operation: Template error: variable ListOfSecurityGroupIDs in Fn::Sub expression does not resolve to a string
Я не уверен, почему. Правильно ли я использую !sub? Был бы очень признателен за вклад в это.
о, это единственное изменение? И я думаю, что если я использую !Ref, мне нужно удалить "{" и "}". позвольте мне попробовать это сейчас
Не работает, я получил эту ошибку. Проверка свойств для ресурса EKSCluster не удалась с сообщением: #/ResourcesVpcConfig/SecurityGroupIds/0: #: только 1 подсхема соответствует из 2 #/ResourcesVpcConfig/SecurityGroupIds/0: ожидаемый тип: String, найдено: JSONArray # /ResourcesVpcConfig/SubnetIds/0: #: соответствует только 1 подсхема из 2 #/ResourcesVpcConfig/SubnetIds/0: ожидаемый тип: String, найдено: JSONArray @Paolo
но для того, чтобы это сработало, не нужно ли мне изменить тип параметра на String? что превосходит цель добавления типа List<AWS::EC2::SecurityGroup::Id>
Поскольку вы хотите ссылаться на параметры, которые вы указали в шаблоне, как они есть, вам следует использовать функцию Ref
.
Вот пример действительного шаблона:
Parameters:
ClusterName:
Type: String
RoleArnValue:
Type: String
ListOfSubnetIDs:
Description: Array of Subnet IDs
Type: List<AWS::EC2::Subnet::Id>
ListOfSecurityGroupIDs:
Description: Array of security group ids
Type: List<AWS::EC2::SecurityGroup::Id>
Resources:
EKSCluster:
Type: AWS::EKS::Cluster
Properties:
Name: !Ref ClusterName
RoleArn: !Ref RoleArnValue
ResourcesVpcConfig:
SecurityGroupIds: !Ref ListOfSecurityGroupIDs
SubnetIds: !Ref ListOfSubnetIDs
и вот как я его развернул:
aws cloudformation deploy --template-file eks.yml --stack-name cluster-test --parameter-overrides ClusterName=Dev ListOfSubnetIDs=subnet-be0a99c4,subnet-c71046ae ListOfSecurityGroupIDs=sg-009690ac6b3bff6df,sg-009a3f1cb63943941 -RoleArnValue=...
Sub
следует использовать, когда вы хотите выполнять манипуляции со строками. Ознакомьтесь с примерами из документация.
Вам нужно использовать
!Ref
, а не!Sub