Как загрузить файл в корзину S3, используя скрипт CloudFormation?
Как загрузить файл в мой шаблон CloudFormation для AWS S3?
AWSTemplateFormatVersion: '2010-09-09'
Resources:
S3Bucket:
Type: AWS::S3::Bucket
Properties:
AccessControl: PublicRead
BucketName: s3bucketuser
VersioningConfiguration:
Status: Enabled
2 ответа
Решение
Вы не можете загружать файлы через CloudFormation, это не поддерживается, потому что у CFN нет доступа к вашей локальной файловой системе.
Что я обычно делаю:
- Вызов
cloudformation
задание от Ansible - CFN создает ведро и в
Outputs
экспортирует имя корзины - Ansible загружает файлы, используя
s3_sync
в следующем задании, как только CFN будет выполнено.
Надеюсь, это поможет:)
AWS предоставляет пример макроса, который может помочь в зависимости от вашего варианта использования: https://github.com/awslabs/aws-cloudformation-templates/tree/master/aws/services/CloudFormation/MacrosExamples/S3Objects.
- Создайте отдельный стек CloudFormation с помощью macro.template. Это создает макрос преобразования "S3Objects", который затем будет доступен любому другому стеку в регионе. README.md объясняет, как "упаковать" шаблон макроса перед добавлением в CloudFormation (для него потребуется включить отдельный исходный файл для функции Lambda).
- Файл example.template предоставляет пример использования. Обратите внимание на раздел Transform верхнего уровня, который относится к
S3Objects
, что позволяет использоватьType: AWS::S3::Object
,
В приведенном примере Body
Свойство позволяет вводить текст непосредственно в шаблон YAML или JSON. Чтобы расширить это, можно использовать Fn::Sub для создания файла с параметрами или свойствами из других ресурсов:
---
AWSTemplateFormatVersion: '2010-09-09'
Transform: S3Objects
Parameters:
ANameField:
Type: String
Resources:
S3Bucket:
Type: AWS::S3::Bucket
Properties:
AccessControl: PublicRead
BucketName: s3bucketuser
VersioningConfiguration:
Status: Enabled
S3Object:
Type: AWS::S3::Object
Properties:
Target:
Bucket: !Ref Bucket
Key: README.md
ContentType: text/markdown
Body: !Sub |
# My text file
This is my text file for ${ANameField}.
The region is ${AWS::Region} and my account ID is ${AWS::AccountId}.
This file is in the ${S3Bucket} bucket. The bucket ARN is ${S3Bucket.Arn},
and its website endpoint is ${S3Bucket.WebsiteURL}