É possível preencher um bucket do S3 por meio de um modelo do CloudFormation?

2

Eu preciso armazenar alguns arquivos para o meu modelo CF (esquema GraphQL, fonte Lambda, etc) em um bucket S3 que também (esperançosamente) será definido no mesmo template, já que esse parece ser o único caminho fora do drop o conteúdo diretamente no modelo para fazê-lo. Eu também estou tentando pensar no CI / CD, e seria bom ter esses arquivos verificados e a ferramenta CI / CD movê-los apropriadamente.

Existe uma maneira de copiar arquivos para o S3 do modelo? Como a maioria das pessoas faz isso com CI / CD?

    
por CodeChimp 10.08.2018 / 17:04

1 resposta

1

Infelizmente, não é possível fazer o upload para um bloco criado a partir do mesmo modelo. No entanto, se o intervalo for preexistente, digamos um depósito deployment de largura de uma conta ou um desses cf-templates-... depósitos, você terá algumas opções.

  • Faça o upload dos arquivos auxiliares usando o Playbook Ansible e, no mesmo manual, crie / atualize a pilha do CloudFormation. Esse é um método muito popular para pipelines de CI / CD. Em seu livro Ansible, você terá algo assim:

    tasks:
    - name: "Upload files to s3://{{deployment_bucket}}/lambda/"
      s3_sync:
        bucket: "{{deployment_bucket}}"
        file_root: lambda/
        prefix: lambda/
        permission: private
    
    - name: "Create CloudFormation Stack"
      cloudformation:
        stack_name: "some-stack-name"
        state: present
        template: template.yml
        template_parameters:
          DeploymentS3Path: "s3://{{deployment_bucket}}/lambda/"
    
  • Deixe o aws cloudformation package zipar e carregue os arquivos para o S3 e, em seguida, aws cloudformation deploy crie e execute um conjunto de alterações do CloudFormation. Novamente, um método bastante popular que funciona bem com CI / CD.

    Em seu modelo do CloudFormation, você pode se referir a arquivos locais como este:

    MyLambda:
      Type: AWS::Lambda::Function
      Properties:
        Code: lambda/
    

    E quando aws cloudformation package for executado, ele exibirá um modelo modificado com o caminho do código expandido:

    MyLambda:
      Properties:
        Code:
          S3Bucket: cf-templates-1a2b3c4d5e6f-ap-southeast-2
          S3Key: e24e45d4f5f2ab3c5d437659fa2246a7
    

    Você então aws cloudformation deploy deste modelo expandido. Ou use outro método para implantação - o modelo está pronto para uso.

    A beleza desse método package / deploy é que ele manipula o upload de arquivos locais para o S3 para você.

Em projetos diferentes, usamos os dois métodos em vários pipelines de CI / CD e ambos funcionam muito bem.

Espero que ajude:)

    
por 06.10.2018 / 10:56