aws cloudformation — значение в ‘content.s3Bucket’ не удовлетворяет ограничению: участник должен удовлетворять шаблону регулярных выражений

#amazon-web-services #amazon-s3 #amazon-cloudformation

#amazon-web-services #amazon-s3 #aws-cloudformation

Вопрос:

Я собирался получить доступ к корзине s3 для zip-файла.
Когда я использую приведенный ниже код, он может получить доступ к корзине, потому что он использует корневой каталог корзины.

«S3Bucket»: { «Ref»: «HandlerCodeS3Bucket» },

когда я хочу получить доступ к папке слоев в том же сегменте, я использую параметры HandlerCodeS3BucketLayer.
Но это показывает ошибку ниже.

 1 validation error detected: Value 'admin-sourcecode/layers' at 'content.s3Bucket' failed to satisfy constraint: Member must satisfy regular expression pattern: ^[0-9A-Za-z.-_]*(?<!.)$ (Service: AWSLambdaInternal; Status Code: 400; Error Code: ValidationException; Request ID: xxx)
  
 {
    "AWSTemplateFormatVersion": "2010-09-09",
    
    "Parameters": {
      "HandlerCodeS3Bucket": {
        "Type": "String",
        "Default": "admin-sourcecode"
      },
      "HandlerCodeS3BucketLayer": {
        "Type": "String",
        "Default": "admin-sourcecode/layers"
      }
    },
    "Resources": {
      "MyLayer": {
        "Type": "AWS::Lambda::LayerVersion",
        "Properties": {
            "CompatibleRuntimes": [
                "nodejs12.x"
            ],
            "Content": {
                "S3Bucket": {
                  "Ref": "HandlerCodeS3BucketLayer"
                },
                "S3Key": "imageUploadLayer.zip"
            },
            "Description": "My layer",
            "LayerName": "imageLayer",
            "LicenseInfo": "MIT"
        }
    }
   }
  }

  

Комментарии:

1. Сначала пропустите его через средство проверки yaml и в хорошем редакторе, таком как vscode. Проверьте, что в yaml нет красных волнистых подчеркиваний. Затем проверьте, что назначенная роль IAM имеет права? Или это говорит о том, что ваше условие не удовлетворяет: Default": "admin-sourcecode/layers" , так работает ли оно с подстановочной картой * ?

Ответ №1:

Имя корзины не может содержать косых черт:

 admin-sourcecode/layers
  

Возможно, в вашем коде это должно быть:

 {
    "AWSTemplateFormatVersion": "2010-09-09",
    
    "Parameters": {
      "HandlerCodeS3Bucket": {
        "Type": "String",
        "Default": "admin-sourcecode"
      },
      "HandlerCodeS3BucketLayer": {
        "Type": "String",
        "Default": "admin-sourcecode"
      }
    },
    "Resources": {
      "MyLayer": {
        "Type": "AWS::Lambda::LayerVersion",
        "Properties": {
            "CompatibleRuntimes": [
                "nodejs12.x"
            ],
            "Content": {
                "S3Bucket": {
                  "Ref": "HandlerCodeS3BucketLayer"
                },
                "S3Key": "layers/imageUploadLayer.zip"
            },
            "Description": "My layer",
            "LayerName": "imageLayer",
            "LicenseInfo": "MIT"
        }
    }
   }
  }