sam packageしてaws cloudformation deployでlambdaデプロイを行う
aws cloudformation packageすると、毎回S3に新たなUUIDの圧縮ファイルが上がってしまいます。
その為、aws cloudformation deployすると、Lambdaソースに変更がなくてもLambdaデプロイされてしまいます。
sam packageコマンドだと、ソースに変更がなければs3へのアップロードがされますがUUIDが同じとなります。その為、aws cloudformation deployしてもlambdaデプロイはされません。
sam deploy が sam package の機能を暗黙的に実行するようになりました。sam deploy コマンドを直接使用して、アプリケーションをパッケージ化およびデプロイできます。
変更がないソースに対してsam packageした時に出力されるメッセージ↓
File with same data already exists at 678187a2e48e3c8665665076a6515654, skipping upload
以下のコマンドでOKです。
$ sam package --template-file select.yml --s3-bucket hoge --output-template-file select_out.yml $ sam deploy --template-file select_out.yml --stack-name hogestack --capabilities CAPABILITY_IAM --no-fail-on-empty-changeset
select.yml
CloudFormationのymlです。
AWSTemplateFormatVersion: 2010-09-09 Transform: AWS::Serverless-2016-10-31 Description: This CloudFormation template to create Lambda function Resources: MyLambdaFunction: Type: AWS::Serverless::Function Properties: FunctionName: aaa CodeUri: ./temp #zipファイルでなくてOK Handler: index.handler Runtime: nodejs16.x MemorySize: 128 Timeout: 15
./temp配下がLambdaの構成になっていればCodeUriはzipでなくてOKです。
--no-fail-on-empty-changeset
--no-fail-on-empty-changeset
オプションでデプロイすることによって、チェンジセットがなくてもaws cloudformation deployコマンドの終了ステータスは正常終了(=0)になります。
CodeBuildで実行するとエラーになりましたので、必要に応じてこのオプションをつけます。
sam build
sam packageコマンドはS3にアップロードしますが、sam buildコマンドを使用するとローカルの「.aws-sam/build」配下にアーティファクトを生成します。
参考サイト

2023/01/22 追記
aws cloudformation deployはsam deployでOKぽいです。

KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^
コメント