Я пытаюсь создать шаблон CloudFormation, в котором будет развернута лямбда-функция, и мне нужно, чтобы параметры безопасности были необязательными параметрами.
Мне удалось частично это сделать, используя вопрос здесь:
Как сделать необязательным целый объект в шаблонах CloudFormation?
Интересно, что этот метод отлично работал, чтобы сделать свойство VpcConfig необязательным в консоли AWS GUI, но это НЕработать, чтобы сделать его необязательным для CLI.И, к сожалению, мне нужно, чтобы он работал в CLI, поскольку я буду использовать CodeBuild для вызова и развертывания ресурсов этого шаблона.
Вот соответствующие параметры:
"SecurityGroupIds" : {
"Type" : "CommaDelimitedList",
"Description" : "A list of one or more security groups IDs in the VPC that includes the resources to which your Lambda function requires access."
},
"SubnetIds" : {
"Type" : "CommaDelimitedList",
"Description" : "A list of one or more subnet IDs in the VPC that includes the resources to which your Lambda function requires access."
}
И условия:
"HasVPC": {"Fn::And": [{"Fn::Not": [{"Fn::Equals": [{"Fn::Join": ["", {"Ref": "SubnetIds"}]}, ""]}]}, {"Fn::Not": [{"Fn::Equals": [{"Fn::Join": ["", {"Ref": "SecurityGroupIds"}]}, ""]}]}]}
И вот где это условие используется в ресурсе Lambda, определенном в разделе «Ресурсы» шаблона:
"VpcConfig": {
"Fn::If": [
"HasVPC",
{
"SecurityGroupIds" : {"Ref": "SecurityGroupIds"},
"SubnetIds" : {"Ref": "SubnetIds"}
},
{ "Ref":"AWS::NoValue" }
]
},
Когда я запускаю команду для развертывания этого стека вCLI, я получаю следующую ошибку:
Произошла ошибка (ValidationError) при вызове операции CreateChangeSet: Параметры: [SecurityGroupIds, SubnetIds] должны иметь значения
Воткоманда AWS CLI, которую я выдаю, из того же каталога, в котором находится шаблон.Примечание: все значения ARN были сильно изменены, чтобы быть не реальными значениями из моей учетной записи, но я сохранил их в правильном формате, чтобы вы могли увидеть реальный формат команды:
aws cloudformation deploy --template-file lambda-template.json --stack-name "CLI-lambda-stack" --parameter-overrides S3BucketName="myBucket" S3FileLocation="lambda_function.zip" S3ObjectVersion="ZuB0iueEghOyh5q00.DiykLNudujdsc5" DeadLetterArn="arn:aws:sns:us-west-2:577898337216:CloudFormationTests" EnvironmentVariable="testing" KmsKeyArn="arn:aws:kms:us-west-2:504398934246:key/b24e7b72-a94d-6a3e-b848-165115c86212" HandlerFunctionName="lambda_function.lambda_handler" MemorySize="128" Role="arn:aws:iam::102893937243:role/serverless-test-default-us-east-1-lambdaRole" FuncName="myCLILambda"