Why sam package publishes the artifacts to bucket?

2019-07-23 19:21发布

问题:

As part of packaging the SAM application, the application published to s3 bucket as shown below:

sam package --template-file sam.yaml --s3-bucket mybucket --output-template-file output.yaml


Why sam package provides --s3-bucket option? Is this mandatory option?

What is the purpose of publishing artifacts to s3 bucket?

回答1:

--s3-bucket option in sam package command is mandatory. What the command does is that it takes your local code, uploads it to S3 and returns transformed template where source location of your local code has been replaced with the S3 bucket URI (URI of object - zipped code - in the S3 bucket).

Main advantage of uploading artifact to S3 is that it is faster to deploy code that already sits within AWS network than send it through the Internet during deployment.

Another thing is that plain CloudFormation let's you inline lambda function code without pushing it to S3 but there are limitations to this approach. If your lambda function needs to use external libraries that are not part of AWS provided lambda environment for a particular runtime or your function's size is big then you still need to zip your function's code together with its dependencies and upload it to S3 before continuing. SAM just makes this easier for you so that you don't have to do this step manually.