Our sam package command is -
sam package --template-file template.YML --output-template-file packaged-service.yml --s3-bucket $Template_Bucket_Name --s3-prefix service-build-$packagenumber
sam deploy command is -
sam deploy packaged-service.yml --stack-name service --capabilities CAPABILITY_NAMED_IAM --region us-east-1 --s3-bucket $Template_Bucket_Name --s3-prefix service-deploy-$packagenumber --template-file template.YML --parameter-overrides "ParameterKey=EnvType,ParameterValue=ftest" --no-fail-on-empty-changeset
What is significance of packaged-service.yml file ? I can run deploy without it. So what purpose it fulfils ? Official package and deploy page are not clear about it. packaged-service.yml has a codeuri field points to s3 bucket. In the above example, probably the file has no use ? How to use metadata option during aws sam deploy command ?
If you are using the latest version of the SAM CLI, then this
package
step is now implicitly performed when you do a deploy.In earlier versions of SAM, the
package
step was needed if your lambda functions required dependencies to be packaged up into an archive. It wasn't 100% necessary as if your Lambda was a single python file then you could go straight todeploy
. Since most SAM projects are more complex, thepackage
helped by packaging your project into an archive, uploading your artifacts to S3 and then re-writing your SAM yaml to reference the new S3 location where the artifacts were uploaded.I think the AWS team eventually saw that this package step was a little redundant and almost always performed before a deploy so they streamlined the process with an update made in November 2019 which made the process much simpler.
The
package
command is still included for backwards compatibility and to allow more flexibility if some teams still desire a multi-stage build and deploy process.