web-dev-qa-db-fra.com

Comment télécharger un fichier dans le compartiment S3 à l'aide du script CloudFormation?

Comment télécharger un fichier dans mon modèle CloudFormation de compartiment AWS S3?

AWSTemplateFormatVersion: '2010-09-09'
Resources:
  S3Bucket:
    Type: AWS::S3::Bucket
    Properties:
      AccessControl: PublicRead
      BucketName: s3bucketuser
      VersioningConfiguration:
        Status: Enabled
5
Ayushi Garg

Vous ne pouvez pas télécharger de fichiers via CloudFormation, ce n'est pas pris en charge car CFN n'a pas accès à votre système de fichiers local.

Ce que je fais d'habitude:

  • Appelez la tâche cloudformation depuis Ansible
  • CFN crée le compartiment et dans le Outputs exporte le nom du compartiment
  • Ansible télécharge les fichiers à l'aide de s3_sync dans la tâche suivante une fois le CFN terminé.

J'espère que cela pourra aider :)

4
MLu

AWS fournit un exemple Macro qui peut vous aider, selon votre cas d'utilisation: https://github.com/awslabs/aws-cloudformation-templates/tree/a11722d/aws/services/ CloudFormation/MacrosExamples/S3Objects .

  1. Créez une pile CloudFormation distincte avec macro.template . Cela crée la macro de transformation "S3Objects" qui sera ensuite disponible pour toute autre pile de la région. README.md explique comment "empaqueter" le modèle de macro avant de l'ajouter à CloudFormation (il devra inclure un fichier source séparé pour une fonction Lambda).
  2. Le fichier example.template fournit un exemple d'utilisation. Notez la section Transform de niveau supérieur qui fait référence à S3Objects, qui permet d'utiliser Type: AWS::S3::Object.

Dans le exemple fourni, la propriété Body permet de saisir du texte directement dans le modèle YAML ou JSON. Pour développer cela, on peut utiliser Fn :: Sub pour créer un fichier avec des paramètres ou des propriétés à partir d'autres ressources:

---
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}
5
Alan Ivey