From 87bbea33e22b4f308ab4a4c30b856acc41001aa2 Mon Sep 17 00:00:00 2001 From: Yusaku-KASAI Date: Sat, 31 May 2025 20:09:41 +0900 Subject: [PATCH 1/2] =?UTF-8?q?=E3=80=90=E3=83=97=E3=83=AD=E3=82=B8?= =?UTF-8?q?=E3=82=A7=E3=82=AF=E3=83=88=E6=A7=8B=E7=AF=89=E3=80=91Lambda@Ed?= =?UTF-8?q?ge=20=E8=BF=BD=E5=8A=A0=20&=20=E5=89=8A=E9=99=A4=E3=82=B3?= =?UTF-8?q?=E3=83=9E=E3=83=B3=E3=83=89=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Makefile | 95 ++++++++++++++++++++++++++++++-- README.md | 18 +++++- serverless/handlers/edge.py | 30 ++++++++++ serverless/package-lock.json | 8 +++ serverless/package.json | 1 + serverless/serverless-global.yml | 55 +++++++++++++++++- serverless/serverless.yml | 44 ++++----------- 7 files changed, 213 insertions(+), 38 deletions(-) create mode 100644 serverless/handlers/edge.py diff --git a/Makefile b/Makefile index 56bc82c..ce48500 100644 --- a/Makefile +++ b/Makefile @@ -5,11 +5,11 @@ aws_profile?=default .PHONY: deploy deploy: - docker compose exec sls-deploy serverless deploy --stage $(stage) --region $(region) --aws-profile $(aws_profile) --param="WAF_WEB_ACL_ARN=$(WAF_WEB_ACL_ARN)" + docker compose exec sls-deploy serverless deploy --stage $(stage) --region $(region) --aws-profile $(aws_profile) --param="WAF_WEB_ACL_ARN=$(WAF_WEB_ACL_ARN)" --param="LAMBDA_EDGE_VERSION_ARN=$(LAMBDA_EDGE_VERSION_ARN)" .PHONY: deploy-debug deploy-debug: - docker compose exec sls-deploy serverless deploy --stage $(stage) --region $(region) --aws-profile $(aws_profile) --debug + docker compose exec sls-deploy serverless deploy --stage $(stage) --region $(region) --aws-profile $(aws_profile) --debug --param="WAF_WEB_ACL_ARN=$(WAF_WEB_ACL_ARN)" --param="LAMBDA_EDGE_VERSION_ARN=$(LAMBDA_EDGE_VERSION_ARN)" .PHONY: deploy-global deploy-global: @@ -25,11 +25,98 @@ deploy-all: --region us-east-1 \ --profile $(aws_profile)) && \ echo "WAF_WEB_ACL_ARN: $$WAF_WEB_ACL_ARN" && \ - make deploy aws_profile=$(aws_profile) stage=$(stage) region=$(region) WAF_WEB_ACL_ARN=$$WAF_WEB_ACL_ARN + LAMBDA_EDGE_FUNCTION_ARN=$$(aws cloudformation describe-stacks \ + --stack-name pj-name-serverless-global-$(stage) \ + --query "Stacks[0].Outputs[?OutputKey=='LambdaEdgeFunctionArn'].OutputValue" \ + --output text \ + --region us-east-1 \ + --profile $(aws_profile)) && \ + echo "LAMBDA_EDGE_FUNCTION_ARN: $$LAMBDA_EDGE_FUNCTION_ARN" && \ + LAMBDA_EDGE_VERSION_ARN=$$(aws lambda list-versions-by-function \ + --function-name $$LAMBDA_EDGE_FUNCTION_ARN \ + --query "Versions[?Version!='$$LATEST'] | [-1].FunctionArn" \ + --output text \ + --region us-east-1 \ + --profile $(aws_profile)) && \ + echo "LAMBDA_EDGE_VERSION_ARN: $$LAMBDA_EDGE_VERSION_ARN" && \ + make deploy aws_profile=$(aws_profile) stage=$(stage) region=$(region) WAF_WEB_ACL_ARN=$$WAF_WEB_ACL_ARN LAMBDA_EDGE_VERSION_ARN=$$LAMBDA_EDGE_VERSION_ARN .PHONY: create_domain create_domain: - docker compose exec sls-deploy serverless create_domain --stage $(stage) --region $(region) --aws-profile $(aws_profile) + docker compose exec sls-deploy serverless create_domain --stage $(stage) --region $(region) --aws-profile $(aws_profile) --param="WAF_WEB_ACL_ARN=dummy" --param="LAMBDA_EDGE_VERSION_ARN=dummy" + +.PHONY: delete_domain +delete_domain: + docker compose exec sls-deploy serverless delete_domain --stage $(stage) --region $(region) --aws-profile $(aws_profile) --param="WAF_WEB_ACL_ARN=dummy" --param="LAMBDA_EDGE_VERSION_ARN=dummy" + +.PHONY: remove +remove: + docker compose exec sls-deploy serverless remove --stage $(stage) --region $(region) --aws-profile $(aws_profile) --param="WAF_WEB_ACL_ARN=$(WAF_WEB_ACL_ARN)" --param="LAMBDA_EDGE_VERSION_ARN=$(LAMBDA_EDGE_VERSION_ARN)" + +.PHONY: remove-global +remove-global: + docker compose exec sls-deploy serverless remove --config serverless-global.yml --stage $(stage) --region us-east-1 --aws-profile $(aws_profile) + +.PHONY: remove-all +remove-all: + WAF_WEB_ACL_ARN=$$(aws cloudformation describe-stacks \ + --stack-name pj-name-serverless-global-$(stage) \ + --query "Stacks[0].Outputs[?OutputKey=='WafWebAclArn'].OutputValue" \ + --output text \ + --region us-east-1 \ + --profile $(aws_profile)) && \ + echo "WAF_WEB_ACL_ARN: $$WAF_WEB_ACL_ARN" && \ + LAMBDA_EDGE_VERSION_ARN=$$(aws cloudformation describe-stacks \ + --stack-name pj-name-serverless-global-$(stage) \ + --query "Stacks[0].Outputs[?OutputKey=='LambdaEdgeFunctionArn'].OutputValue" \ + --output text \ + --region us-east-1 \ + --profile $(aws_profile)) && \ + echo "LAMBDA_EDGE_VERSION_ARN: $$LAMBDA_EDGE_VERSION_ARN" && \ + make remove aws_profile=$(aws_profile) stage=$(stage) region=$(region) WAF_WEB_ACL_ARN=$$WAF_WEB_ACL_ARN LAMBDA_EDGE_VERSION_ARN=$$LAMBDA_EDGE_VERSION_ARN + make remove-global aws_profile=$(aws_profile) stage=$(stage) + make delete_domain aws_profile=$(aws_profile) stage=$(stage) + +.PHONY: remove-all-include-content +remove-all-include-content: + make empty aws_profile=$(aws_profile) stage=$(stage) + WAF_WEB_ACL_ARN=$$(aws cloudformation describe-stacks \ + --stack-name pj-name-serverless-global-$(stage) \ + --query "Stacks[0].Outputs[?OutputKey=='WafWebAclArn'].OutputValue" \ + --output text \ + --region us-east-1 \ + --profile $(aws_profile)) && \ + echo "WAF_WEB_ACL_ARN: $$WAF_WEB_ACL_ARN" && \ + LAMBDA_EDGE_VERSION_ARN=$$(aws cloudformation describe-stacks \ + --stack-name pj-name-serverless-global-$(stage) \ + --query "Stacks[0].Outputs[?OutputKey=='LambdaEdgeFunctionArn'].OutputValue" \ + --output text \ + --region us-east-1 \ + --profile $(aws_profile)) && \ + echo "LAMBDA_EDGE_VERSION_ARN: $$LAMBDA_EDGE_VERSION_ARN" && \ + make remove aws_profile=$(aws_profile) stage=$(stage) region=$(region) WAF_WEB_ACL_ARN=$$WAF_WEB_ACL_ARN LAMBDA_EDGE_VERSION_ARN=$$LAMBDA_EDGE_VERSION_ARN + make remove-global aws_profile=$(aws_profile) stage=$(stage) + make delete_domain aws_profile=$(aws_profile) stage=$(stage) + +.PHONY: empty +empty: + S3_BUCKET1_NAME=$$(aws cloudformation describe-stacks \ + --stack-name pj-name-serverless-$(stage) \ + --query "Stacks[0].Outputs[?OutputKey=='S3Bucket1Name'].OutputValue" \ + --output text \ + --region ap-northeast-1 \ + --profile $(aws_profile)) && \ + echo "S3_BUCKET1_NAME: $$S3_BUCKET1_NAME" && \ + docker compose exec sls-deploy aws s3 rm s3://$$S3_BUCKET1_NAME --recursive + S3_BUCKET2_NAME=$$(aws cloudformation describe-stacks \ + --stack-name pj-name-serverless-$(stage) \ + --query "Stacks[0].Outputs[?OutputKey=='S3Bucket2Name'].OutputValue" \ + --output text \ + --region ap-northeast-1 \ + --profile $(aws_profile)) && \ + echo "S3_BUCKET2_NAME: $$S3_BUCKET2_NAME" && \ + docker compose exec sls-deploy aws s3 rm s3://$$S3_BUCKET2_NAME --recursive + .PHONY: up up: diff --git a/README.md b/README.md index aaade32..179c9ab 100644 --- a/README.md +++ b/README.md @@ -117,6 +117,7 @@ docker compose exec sls-deploy serverless plugin install --name serverless-domai * `serverless-prune-plugin`: 古いデプロイの自動削除 * `serverless-plugin-lambda-insights`: Lambda Insights をデフォルトで有効化 * `serverless-domain-manager`: カスタムドメインに対応 +* `serverless-lambda-edge-pre-existing-cloudfront`: cloudfrontへのlamdab@edgeの紐付け --- @@ -142,6 +143,19 @@ make create_domain aws_profile=profile-name --- +## 🗑️ リソース削除(コンテナから) + +以下のコマンドで、作成したAWSリソースを削除できます: + +> ⚠️ ホストゾーンのレコードやACMなどは手動で削除が必要かもしれません。 + +```bash +aws sso login --profile profile-name +make remove-all aws_profile=profile-name +``` + +--- + ## 📂 ディレクトリ構成(例) ```bash @@ -191,7 +205,9 @@ test-serverless/ * LambdaInsightsをクビにしてログメトリクスフィルタでアラームを飛ばすのもあり(cpuの値などはとれないけど、、メモリとかはいけるので適宜良さそうな構成にする) * WAFとCloudFrontも追加したことにより、グローバルのスタックとリージョナルのスタックで二つのymlで管理している * ssmでの受け渡しはうまくいかなかったのでMakefileでパラメータの受け渡しをして解決している -* LambdaEdgeは今回は見送った +* LambdaEdgeも追加した、WAF&Lambda@Edge用のlambdaの作成->リージョナルのリソース(&CloudFront)の作成 +* LambdaEdgeはserverlessの拡張機能を使っていい感じにやろうと思ったが、stackに残らないので自分で定義した +* リソース削除時はうまくいかないいこともあるのでその場合コマンドを都度うつ --- diff --git a/serverless/handlers/edge.py b/serverless/handlers/edge.py new file mode 100644 index 0000000..21744e1 --- /dev/null +++ b/serverless/handlers/edge.py @@ -0,0 +1,30 @@ +import json +import urllib.request +import logging + +logger = logging.getLogger() +logger.setLevel(logging.INFO) + + +def log_event(event): + logger.info("Received event:\n" + json.dumps(event, indent=2, ensure_ascii=False)) + + +def viewer_request(event, context): + log_event(event) + + webhook_url = "https://mail-to-line.liny.jp/check" + payload = {"text": "Hello, World! From Lambda@Edge"} + + try: + req = urllib.request.Request( + webhook_url, + data=json.dumps(payload).encode("utf-8"), + headers={"Content-Type": "application/json"}, + ) + with urllib.request.urlopen(req) as res: + print("Slack response:", res.read().decode()) + except Exception as e: + print("Slack webhook failed:", str(e)) + + return event["Records"][0]["cf"]["request"] diff --git a/serverless/package-lock.json b/serverless/package-lock.json index d186275..259dcc1 100644 --- a/serverless/package-lock.json +++ b/serverless/package-lock.json @@ -7,6 +7,7 @@ "devDependencies": { "serverless-domain-manager": "^8.0.0", "serverless-iam-roles-per-function": "^3.2.0", + "serverless-lambda-edge-pre-existing-cloudfront": "^1.2.0", "serverless-plugin-aws-alerts": "^1.7.5", "serverless-plugin-lambda-insights": "^2.0.0", "serverless-prune-plugin": "^2.1.0", @@ -9248,6 +9249,13 @@ "node": ">=10" } }, + "node_modules/serverless-lambda-edge-pre-existing-cloudfront": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/serverless-lambda-edge-pre-existing-cloudfront/-/serverless-lambda-edge-pre-existing-cloudfront-1.2.0.tgz", + "integrity": "sha512-RrYKaFkrFjq9dtPenrT8g+nbe/oQlmom7q4zu9tQ3PyqONv0OPO/3WtWHNNQwNCduHvUdXPvezyWVd0ecMuF5A==", + "dev": true, + "license": "MIT" + }, "node_modules/serverless-plugin-aws-alerts": { "version": "1.7.5", "resolved": "https://registry.npmjs.org/serverless-plugin-aws-alerts/-/serverless-plugin-aws-alerts-1.7.5.tgz", diff --git a/serverless/package.json b/serverless/package.json index c28b528..fdc6c8e 100644 --- a/serverless/package.json +++ b/serverless/package.json @@ -2,6 +2,7 @@ "devDependencies": { "serverless-domain-manager": "^8.0.0", "serverless-iam-roles-per-function": "^3.2.0", + "serverless-lambda-edge-pre-existing-cloudfront": "^1.2.0", "serverless-plugin-aws-alerts": "^1.7.5", "serverless-plugin-lambda-insights": "^2.0.0", "serverless-prune-plugin": "^2.1.0", diff --git a/serverless/serverless-global.yml b/serverless/serverless-global.yml index e956f51..4a4aeb7 100644 --- a/serverless/serverless-global.yml +++ b/serverless/serverless-global.yml @@ -32,6 +32,24 @@ provider: # - !Ref PjNamePrivateSubnet1 # - !Ref PjNamePrivateSubnet2 +functions: + lambdaEdgeViewerRequest: + handler: handlers/edge.viewer_request + memorySize: 128 # Lambda@Edgeの制限は128MB + timeout: 5 # Lambda@Edgeの制限は5秒 + name: ${self:service}-${sls:stage}-lambdaEdgeViewerRequest + role: !GetAtt LambdaEdgeViewerRequestFunctionRole.Arn # policyのマージでなくロールごと置き換える(assumeRolePoicyを指定するため) + logRetentionInDays: 731 + maximumRetryAttempts: 0 + +custom: + serverless-iam-roles-per-function: + defaultInherit: true + prune: + automatic: true + includeLayers: true + number: 3 + stages: default: params: ${file(./.env.${sls:stage}.yml)} @@ -54,10 +72,45 @@ resources: CloudWatchMetricsEnabled: true MetricName: ${self:service}-${sls:stage}-web-acl-metric Rules: [] + LambdaEdgeViewerRequestFunctionRole: + Type: AWS::IAM::Role + Properties: + RoleName: pj-name-sls-${sls:stage}-edgelambda-us-es-1 + AssumeRolePolicyDocument: + Version: "2012-10-17" + Statement: + - Effect: Allow + Principal: + Service: + - "edgelambda.amazonaws.com" + - "lambda.amazonaws.com" + Action: + - sts:AssumeRole + Policies: + - PolicyName: LambdaEdgeViewerRequestFunctionPolicy + PolicyDocument: + Version: "2012-10-17" + Statement: + - Effect: Allow + Action: + - logs:CreateLogGroup + - logs:CreateLogStream + - logs:PutLogEvents + Resource: arn:aws:logs:*:${aws:accountId}:log-group:/aws/lambda/*:*:* Outputs: WafWebAclArn: Description: "WAF WebACL ARN for CloudFront" Value: !GetAtt PjNameWafWebAcl.Arn Export: - Name: pj-name-serverless-stg-web-acl-arn + Name: ${self:service}-${sls:stage}-web-acl-arn + LambdaEdgeFunctionArn: + Description: "Lambda@Edge Function ARN" + Value: !Ref LambdaEdgeViewerRequestLambdaFunction + Export: + Name: ${self:service}-${sls:stage}-lambda-edge-function-arn + +plugins: + # - serverless-iam-roles-per-function # roleごと置き換えるので使用せず + - serverless-prune-plugin + # - serverless-lambda-edge-pre-existing-cloudfront # Cloudformation管理ではなさそうなので自分で制御する diff --git a/serverless/serverless.yml b/serverless/serverless.yml index dc74009..3d6e6eb 100644 --- a/serverless/serverless.yml +++ b/serverless/serverless.yml @@ -811,11 +811,7 @@ resources: OriginRequestPolicyId: !GetAtt CloudFrontOriginRequestPolicy.Id CachePolicyId: !GetAtt CloudFrontCachePolicy.Id FunctionAssociations: [] - LambdaFunctionAssociations: - [] - # - EventType: origin-request - # IncludeBody: true - # LambdaFunctionARN: !GetAtt PjNameLambdaEdgeFunction.Arn # Lambda@Edge function for custom headers gotten from another cloudformation stack + LambdaFunctionAssociations: [] TrustedKeyGroups: [] CacheBehaviors: - PathPattern: "/api/*" @@ -836,10 +832,9 @@ resources: CachePolicyId: !GetAtt CloudFrontApiGatewayCachePolicy.Id FunctionAssociations: [] LambdaFunctionAssociations: - [] - # - EventType: origin-request - # IncludeBody: true - # LambdaFunctionARN: !GetAtt PjNameLambdaEdgeFunction.Arn # Lambda@Edge function for custom headers gotten from another cloudformation stack + - EventType: viewer-request + IncludeBody: true + LambdaFunctionARN: ${param:LAMBDA_EDGE_VERSION_ARN} # Lambda@Edge function for custom headers gotten from another cloudformation stack TrustedKeyGroups: [] WebACLId: ${param:WAF_WEB_ACL_ARN} # Web ACL for CloudFront gotten from another cloudformation stack CloudFrontS3OriginAccessControl: @@ -930,28 +925,14 @@ resources: Condition: StringEquals: "AWS:SourceArn": !Sub "arn:aws:cloudfront::${AWS::AccountId}:distribution/${PjNameCloudFrontDistribution}" - # PjNameWafWebAcl: - # Type: AWS::WAFv2::WebACL - # Properties: - # Name: ${self:service}-${sls:stage}-web-acl - # Scope: CLOUDFRONT - # DefaultAction: - # Allow: {} - # VisibilityConfig: - # SampledRequestsEnabled: true - # CloudWatchMetricsEnabled: true - # MetricName: ${self:service}-${sls:stage}-web-acl-metric - # Rules: - # - Name: BlockBadBots - # Priority: 1 - # Statement: - # ManagedRuleGroupStatement: - # VendorName: AWS - # Name: AWSManagedRulesCommonRuleSet - # VisibilityConfig: - # SampledRequestsEnabled: true - # CloudWatchMetricsEnabled: true - # MetricName: BlockBadBotsMetric + + Outputs: + S3Bucket1Name: + Description: "S3 Bucket Name for Lambda outside VPC" + Value: !Ref S3Bucket1 + S3Bucket2Name: + Description: "S3 Bucket Name for Lambda inside VPC" + Value: !Ref S3Bucket2 plugins: - serverless-iam-roles-per-function @@ -959,4 +940,3 @@ plugins: - serverless-prune-plugin - serverless-plugin-lambda-insights - serverless-domain-manager -# - serverless-plugin-aws-alerts From bb167f0601fa9c5d41e2b65151e09355e2590726 Mon Sep 17 00:00:00 2001 From: Yusaku-KASAI Date: Sat, 31 May 2025 21:28:16 +0900 Subject: [PATCH 2/2] =?UTF-8?q?version3=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../docker/development/sls-create/Dockerfile | 2 +- .../docker/development/sls-deploy/Dockerfile | 2 +- serverless/package-lock.json | 21 +++++++++++++++++-- serverless/package.json | 1 + serverless/serverless-global.yml | 12 +++++------ serverless/serverless.yml | 17 +++++++-------- 6 files changed, 35 insertions(+), 20 deletions(-) diff --git a/infra/docker/development/sls-create/Dockerfile b/infra/docker/development/sls-create/Dockerfile index 07697c0..0ffcb27 100644 --- a/infra/docker/development/sls-create/Dockerfile +++ b/infra/docker/development/sls-create/Dockerfile @@ -13,7 +13,7 @@ RUN apt-get update && apt-get install -y \ # Node.jsのインストール(Serverless Framework用) RUN curl -fsSL https://deb.nodesource.com/setup_22.x | bash - && \ apt-get install -y nodejs && \ - npm install -g serverless@4 + npm install -g serverless@3 # AWS CLIのインストール RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" && \ diff --git a/infra/docker/development/sls-deploy/Dockerfile b/infra/docker/development/sls-deploy/Dockerfile index bc8a639..f35e312 100644 --- a/infra/docker/development/sls-deploy/Dockerfile +++ b/infra/docker/development/sls-deploy/Dockerfile @@ -13,7 +13,7 @@ RUN apt-get update && apt-get install -y \ # Node.jsのインストール(Serverless Framework用) RUN curl -fsSL https://deb.nodesource.com/setup_22.x | bash - && \ apt-get install -y nodejs && \ - npm install -g serverless@4 + npm install -g serverless@3 # AWS CLIのインストール RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" && \ diff --git a/serverless/package-lock.json b/serverless/package-lock.json index 259dcc1..a5677f9 100644 --- a/serverless/package-lock.json +++ b/serverless/package-lock.json @@ -5,6 +5,7 @@ "packages": { "": { "devDependencies": { + "serverless-better-credentials": "^2.0.1", "serverless-domain-manager": "^8.0.0", "serverless-iam-roles-per-function": "^3.2.0", "serverless-lambda-edge-pre-existing-cloudfront": "^1.2.0", @@ -4521,7 +4522,6 @@ "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=8" } @@ -7605,7 +7605,6 @@ "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "define-lazy-prop": "^2.0.0", "is-docker": "^2.1.1", @@ -8779,6 +8778,24 @@ "node": ">=12.0" } }, + "node_modules/serverless-better-credentials": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/serverless-better-credentials/-/serverless-better-credentials-2.0.1.tgz", + "integrity": "sha512-CKRb+zP8HwThk2nD1t7kNHXn2bTYuPqaGvOnJ+PQq65wvJrLXbid6zZeSeaN506VpUp7zkOXgH8Qs3XGtK8dVA==", + "dev": true, + "license": "MIT", + "dependencies": { + "open": "^8.4.2" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "@serverless/utils": "^6.0.2", + "aws-sdk": "^2.567.0", + "serverless": "^2 || ^3" + } + }, "node_modules/serverless-domain-manager": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/serverless-domain-manager/-/serverless-domain-manager-8.0.0.tgz", diff --git a/serverless/package.json b/serverless/package.json index fdc6c8e..a537739 100644 --- a/serverless/package.json +++ b/serverless/package.json @@ -1,5 +1,6 @@ { "devDependencies": { + "serverless-better-credentials": "^2.0.1", "serverless-domain-manager": "^8.0.0", "serverless-iam-roles-per-function": "^3.2.0", "serverless-lambda-edge-pre-existing-cloudfront": "^1.2.0", diff --git a/serverless/serverless-global.yml b/serverless/serverless-global.yml index 4a4aeb7..65d4b69 100644 --- a/serverless/serverless-global.yml +++ b/serverless/serverless-global.yml @@ -50,13 +50,10 @@ custom: includeLayers: true number: 3 -stages: - default: - params: ${file(./.env.${sls:stage}.yml)} - stg: - params: ${file(./.env.stg.yml)} - prd: - params: ${file(./.env.prd.yml)} +params: + default: ${file(./.env.${sls:stage}.yml)} + stg: ${file(./.env.stg.yml)} + prd: ${file(./.env.prd.yml)} resources: Resources: @@ -111,6 +108,7 @@ resources: Name: ${self:service}-${sls:stage}-lambda-edge-function-arn plugins: + - serverless-better-credentials # - serverless-iam-roles-per-function # roleごと置き換えるので使用せず - serverless-prune-plugin # - serverless-lambda-edge-pre-existing-cloudfront # Cloudformation管理ではなさそうなので自分で制御する diff --git a/serverless/serverless.yml b/serverless/serverless.yml index 3d6e6eb..a2ec258 100644 --- a/serverless/serverless.yml +++ b/serverless/serverless.yml @@ -3,12 +3,14 @@ # "service" is the name of this project. This will also be added to your AWS resource names. service: pj-name-serverless +frameworkVersion: "3" + provider: name: aws stage: stg region: ap-northeast-1 # 以下はlambdaのデフォルト設定(置き換えのものもマージのものもある) - runtime: python3.12 + runtime: python3.11 # memorySize: 128 # timeout: 10 # environment: @@ -453,14 +455,10 @@ custom: securityPolicy: tls_1_2 apiType: http autoDomain: false - -stages: - default: - params: ${file(./.env.${sls:stage}.yml)} - stg: - params: ${file(./.env.stg.yml)} - prd: - params: ${file(./.env.prd.yml)} +params: + default: ${file(./.env.${sls:stage}.yml)} + stg: ${file(./.env.stg.yml)} + prd: ${file(./.env.prd.yml)} resources: Resources: @@ -935,6 +933,7 @@ resources: Value: !Ref S3Bucket2 plugins: + - serverless-better-credentials - serverless-iam-roles-per-function - serverless-python-requirements - serverless-prune-plugin