複数Lambdaから参照するLambdaレイヤーをExportすると「Export レイヤー名 cannot be updated as it is in use by スタック名”」エラーが出た
LambdaレイヤーとLambdaを別々のスタックにしたかったのでLambdaレイヤーをExportに設定してみたら「Export レイヤー名 cannot be updated as it is in use by スタック名」エラー出ました。
AWSTemplateFormatVersion: "2010-09-09" Transform: "AWS::Serverless-2016-10-31" Resources: LambdaLayer: Type: "AWS::Serverless::LayerVersion" Properties: LayerName: layername ContentUri: layer/ CompatibleRuntimes: - nodejs18.x RetentionPolicy: Delete Outputs: LayerArn: Value: !Ref LambdaLayer Export: Name: layer
Lambdaレイヤーをpackage deployします。
aws cloudformation package --template-file layer.yml --s3-bucket バケット名 --output-template-file layer_out.yml aws cloudformation deploy --template-file layer_out.yml --stack-name スタック名 --capabilities CAPABILITY_NAMED_IAM
Lambdaからは!ImportValue layer
として参照、デプロイします。この状態で、layerの変更をしてlayerのみデプロイしようとしたら「Export レイヤー名 cannot be updated as it is in use by スタック名」エラーが出てしまいました。
他のスタックが参照しているからLambdaレイヤーの更新でエラーになるみたいです。
↓こちらのスライドシェアが同じことされていました。
結論
仕方ないから1ファイルで書きました。
AWSTemplateFormatVersion: "2010-09-09" Transform: "AWS::Serverless-2016-10-31" Resources: LambdaLayer: Type: "AWS::Serverless::LayerVersion" Properties: LayerName: layername ContentUri: layer/ CompatibleRuntimes: - nodejs18.x RetentionPolicy: Delete TestFunctionA: Type: "AWS::Serverless::Function" Properties: FunctionName: functionname1 Handler: index.handler Runtime: nodejs18.x CodeUri: src-a/ Layers: - !Ref LambdaLayer TestFunctionB: Type: "AWS::Serverless::Function" Properties: FunctionName: functionname2 Handler: index.handler Runtime: nodejs18.x CodeUri: src-b/ Layers: - !Ref LambdaLayer
Globalsセクションを使用したらもう少し短いymlファイルで済むと思います。
AWS SAM テンプレートの Globals セクション - AWS Serverless Application Model
AWS SAM テンプレートの Globals セクションについて学びます。
KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^
コメント