Необязательные параметры при использовании AWS CLI для запуска шаблона CloudFormation - PullRequest
0 голосов
/ 25 октября 2018

Я пытаюсь создать шаблон 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"

1 Ответ

0 голосов
/ 25 октября 2018

Вы не предоставляете SecurityGroupIds или SubnetIds значения по умолчанию, и вы не предоставляете их на вашем --parameter-overrides.Поэтому CloudFormation не знает, как их обрабатывать, если не указаны значения.

Добавление оператора Default должно помочь:

{
  "Parameters" : {
    "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.",
      "Default" : ""
    },
    "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.",
      "Default" : ""
    }
}
...