Я пытаюсь развернуть Python-лямбду в aws.Эта лямбда просто читает файлы из сегментов s3, когда им присваивается имя и путь к файлу.Он работает правильно на локальном компьютере, если я запускаю следующую команду:
sam build && sam local invoke --event testfile.json GetFileFromBucketFunction
Данные из файла выводятся на консоль.Затем, если я выполню следующую команду, лямбда будет упакована и отправлена в my-bucket.
sam build && sam package --s3-bucket my-bucket --template-file .aws-sam\build\template.yaml --output-template-file packaged.yaml
Следующим шагом будет развертывание в prod, поэтому я попробую следующую команду:
sam deploy --template-file packaged.yaml --stack-name getfilefrombucket --capabilities CAPABILITY_IAM --region my-region
Лямбда теперь можно увидеть в лямбда-консоли, я могу запустить ее, но содержимое не возвращается, если я вручную изменяю служебную роль на роль, которая позволяет получить / поставить s3, тогда лямбда работает.Однако это подрывает весь смысл использования aws sam cli.
Я думаю, что мне нужно добавить политику в файл template.yaml.Эта ссылка здесь , кажется, говорит о том, что я должен добавить политику, подобную показанной здесь .Итак, я добавил:
Policies: S3CrudPolicy
В разделе «Ресурсы: GetFileFromBucketFunction: Properties:» я затем перестроил приложение и повторно развернул, и развертывание завершилось неудачно со следующими ошибками в облачной информации:
1 validation error detected: Value 'S3CrudPolicy' at 'policyArn' failed to satisfy constraint: Member must have length greater than or equal to 20 (Service: AmazonIdentityManagement; Status Code: 400; Error Code: ValidationError; Request ID: unique number
и
The following resource(s) failed to create: [GetFileFromBucketFunctionRole]. . Rollback requested by user.
Я удаляю стек, чтобы начать снова.Я думал, что «S3CrudPolicy» - это не готовая политика, которую я могу просто использовать, а то, что мне нужно было бы определить в файле template.yaml?
Я не уверен, как это сделать, иДокументы, кажется, не показывают очень простых примеров использования (из того, что я вижу), если кто-нибудь знает, как это сделать, не могли бы вы опубликовать решение?
Я попробовал следующее:
S3CrudPolicy:
PolicyDocument:
-
Action: "s3:GetObject"
Effect: Allow
Resource: !Sub arn:aws:s3:::${cloudtrailBucket}
Principal: "*"
Но это не удалось из-за следующей ошибки:
Failed to create the changeset: Waiter ChangeSetCreateComplete failed: Waiter encountered a terminal failure state Status: FAILED. Reason: Invalid template property or properties [S3CrudPolicy]
Если кто-нибудь может помочь написать простую политику для чтения / записи из s3, чем это было бы удивительно?Мне нужно написать еще один, чтобы получить лямбды, чтобы вызывать и другие лямбды, так что решение здесь (я представляю что-то подобное?) Было бы здорово?- Или приличное, простое в использовании руководство по написанию этих заявлений о политике?
Большое спасибо за вашу помощь!