embalagem sam contra embalagem de turvação aws

os médicos dizem que fazem exactamente a mesma coisa.

tanto o pacote sam como os comandos Sam implementam descritos nesta secção são idênticos aos seus comandos equivalentes AWS CLI aws cloudformation instalação de formação de nuvens de pacotes e aws, respectivamente.

Mas a minha experiência sugere que isso não é bem verdade. Quando eu correr para o meu Lambda baseado em Java, é enviado um artefacto para o S3 com este tipo de zip. estrutura:

  • META-INF
  • com / example / etc, class files
  • Logback.groovy, outros recursos Lib, que contém todos os meus frascos.
E isto funciona bem em Lambda. Mas quando eu sigo o
Lambda + Codepipelina docs e uso aws cloudformation, Eu tenho esta estrutura zip( que é essencialmente o meu git acordo de recompra):

  • README.md
  • construir/
  • construir.gradle
  • Buildspec.yml
  • eventos
  • gradle /
  • gradlew
  • Gradlew.bat
  • src /
  • modelo.yml

Nota: Esta estrutura alternativa acontece mesmo fora do CodeBuild, por isso duvido que tenha alguma coisa a ver com o que está em buildspec.yml. Eu posso reproduzir as duas estruturas simplesmente invocando os dois comandos de pacote diferentes no meu desktop.

qualquer ideias por que há uma diferença? Gostaria de compreendê-lo, especialmente porque os médicos dizem que devem ser iguais, antes de mudar o meu buildspec.yml para usar sam deploy.

Obrigado!

Author: Patrick Lightbody, 2019-11-12

1 answers

O "pacote sam" é tão estúpido como o "pacote de formação de nuvens aws". A diferença vem de 'Sam build' que irá construir um novo modelo.yaml e colocar em ' {app_dir}/.aws-sam / build / template.yaml com as dependências.

Este novo ' modelo.o yaml é usado por ' pacote sam '(em vez de ' {app_dir}/template.yaml') adicionando assim as dependências necessárias no Pacote. Investigue por favor a pasta ' {app_dir}/.aws-sam/ build / ' para saber mais.

Se fizeres "cloudformation" pacote 'na pasta' {app_dir}/.aws-sam / build 'você terá o mesmo resultado que'Pacote sam'.

Usar o 'pacote sam' com o --debug para ver qual o ficheiro de modelo que está a ler:

$ sam package --output-template-file packaged.yaml --s3-bucket {bucket_name} --debug
Using SAM Template at /home/ec2-user/sam-app/.aws-sam/build/template.yaml

O 'pacote de formação de nuvens aws' irá ler o ficheiro do modelo a partir do qual você especifica:

$ aws cloudformation package --template-file template.yaml --output-template-file packaged.yaml --s3-bucket {my-bucket}
 6
Author: shariqmaws, 2019-11-15 09:36:05