Без сервера: создание S3Bucket и BucketPolicy [неразрешенные зависимости ресурсов] - PullRequest
0 голосов
/ 18 апреля 2020

Я пытаюсь создать S3 Bucket и соответствующий Resource Policy в одном и том же serverless.yml, чтобы оба были установлены при формировании нового стека.

Однако я столкнулся с ошибкой on build:

Unresolved resource dependencies [CUSTOM-BUCKETNAME] in the Resources block of the template

Есть ли способ синхронно создать политику, чтобы она сначала ожидала создания корзины? Я настраиваю это в секции resources моего yml

resources:
  Resources:
    Bucket:
      Type: AWS::S3::Bucket
      Properties:
        BucketName: CUSTOM-BUCKETNAME
    BucketPolicy:
      Type: AWS::S3::BucketPolicy
      Properties:
        Bucket: 
          Ref: CUSTOM-BUCKETNAME
        PolicyDocument:
          Statement:
            - Principal: 
                Service: "ses.amazonaws.com"
              Action:
                - s3:PutObject
              Effect: Allow
              Sid: "AllowSESPuts"
          Resource: 
            Fn::Join: ['', ['arn:aws:s3:::', Ref: "CUSTOM-BUCKETNAME", '/*'] ]   

Выше приведен небольшой фрагмент моей конфигурации yml.

После использования DependsOn я все еще получаю та же ошибка. Стоит отметить, что зависимость от ресурса относится к динамическому c имени (CUSTOM-BUCKETNAME) корзины.

resources:
  Resources:
    Bucket:
      Type: AWS::S3::Bucket
      Properties:
        BucketName: CUSTOM-BUCKETNAME
    BucketPolicy:
      Type: AWS::S3::BucketPolicy
      DependsOn: Bucket
      Properties:
        Bucket: 
          Ref: CUSTOM-BUCKETNAME
        PolicyDocument:
          Statement:
            - Principal: 
                Service: "ses.amazonaws.com"
              Action:
                - s3:PutObject
              Effect: Allow
              Sid: "AllowSESPuts"
          Resource: 
            Fn::Join: ['', ['arn:aws:s3:::', Ref: "CUSTOM-BUCKETNAME", '/*'] ]

CUSTOM-BUCKETNAME никогда не является явным образом прописанным в самом yml явным образом, его динамически генерируемое имя с использованием литералы шаблона.

Ответы [ 2 ]

2 голосов
/ 18 апреля 2020

В вашей политике возникает проблема, так как ваша корзина: BucketName: CUSTOM-BUCKETNAME

Не является ссылочным параметром. Это означает, что вы не ссылаетесь на фактический ресурс в заявлении политики, когда используете Bucket: Ref: CUSTOM-BUCKETNAME.

Вместо этого либо измените имя сегмента, ссылаясь на тот же параметр BucketName: Ref: CUSTOM-BUCKETNAME, либо измените политику для ссылки на ресурс: Bucket: Ref: Bucket

1 голос
/ 18 апреля 2020

CloudFormation DependsOn атрибут должен решить вашу проблему.

https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-dependson.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...