From 3696053a44e2168d5fbda669b793f587ba0dc5bc Mon Sep 17 00:00:00 2001 From: CHIKAMATSU Naohiro Date: Wed, 21 Feb 2024 23:19:28 +0900 Subject: [PATCH] Feat daily cost notification template --- README.md | 1 + app/domain/service/cost_explorer.go | 25 ++++ app/domain/service/sns.go | 19 +++ app/external/cost_explorer.go | 61 ++++++++++ app/external/mock/cost_explorer.go | 15 +++ app/external/mock/sns.go | 15 +++ app/external/sns.go | 50 ++++++++ app/interactor/cost_explorer.go | 45 +++++++ app/interactor/cost_explorer_test.go | 69 +++++++++++ app/interactor/sns.go | 40 +++++++ app/interactor/sns_test.go | 64 ++++++++++ app/usecase/cost_explorer.go | 25 ++++ app/usecase/sns.go | 19 +++ cloudformation/Makefile | 3 +- .../daily-cost-notification/.gitignore | 1 + .../daily-cost-notification/Makefile | 30 +++++ .../daily-cost-notification/README.md | 27 +++++ .../daily-cost-email.png | Bin 0 -> 18944 bytes .../daily-cost-notification.drawio | 69 +++++++++++ .../daily-cost-notification.png | Bin 0 -> 72524 bytes .../daily-cost-notification/main.go | 105 ++++++++++++++++ .../subscription-confirm.png | Bin 0 -> 42204 bytes .../daily-cost-notification/template.yml | 112 ++++++++++++++++++ go.mod | 10 +- go.sum | 20 ++-- 25 files changed, 812 insertions(+), 13 deletions(-) create mode 100644 app/domain/service/cost_explorer.go create mode 100644 app/domain/service/sns.go create mode 100644 app/external/cost_explorer.go create mode 100644 app/external/mock/cost_explorer.go create mode 100644 app/external/mock/sns.go create mode 100644 app/external/sns.go create mode 100644 app/interactor/cost_explorer.go create mode 100644 app/interactor/cost_explorer_test.go create mode 100644 app/interactor/sns.go create mode 100644 app/interactor/sns_test.go create mode 100644 app/usecase/cost_explorer.go create mode 100644 app/usecase/sns.go create mode 100644 cloudformation/daily-cost-notification/.gitignore create mode 100644 cloudformation/daily-cost-notification/Makefile create mode 100644 cloudformation/daily-cost-notification/README.md create mode 100644 cloudformation/daily-cost-notification/daily-cost-email.png create mode 100644 cloudformation/daily-cost-notification/daily-cost-notification.drawio create mode 100644 cloudformation/daily-cost-notification/daily-cost-notification.png create mode 100644 cloudformation/daily-cost-notification/main.go create mode 100644 cloudformation/daily-cost-notification/subscription-confirm.png create mode 100644 cloudformation/daily-cost-notification/template.yml diff --git a/README.md b/README.md index a247826..230fe01 100644 --- a/README.md +++ b/README.md @@ -47,6 +47,7 @@ The s3hub command provides following features: |:--|:--|:--| |[Lambda batch with EventBridge (CloudWatch Events)](./cloudformation/lambda-batch/README.md)|✅|100%| |[Lambda with API Gateway](./cloudformation/lambda-with-api-gw/README.md)|✅|100%| +|[Daily Cost Notification](./cloudformation/daily-cost-notification/README.md)|✅|100%| |[CloudWatch Real User Monitoring (RUM)](./cloudformation/cloudwatch-rum/README.md)|✅|100%| diff --git a/app/domain/service/cost_explorer.go b/app/domain/service/cost_explorer.go new file mode 100644 index 0000000..0e89dc0 --- /dev/null +++ b/app/domain/service/cost_explorer.go @@ -0,0 +1,25 @@ +package service + +import ( + "context" + "time" +) + +// CostGetterInput is the interface that wraps the basic GetCost method. +type CostGetterInput struct { + // Start is the start date of the period. + Start time.Time + // End is the end date of the period. + End time.Time +} + +// CostGetterOutput is the output of the GetCost method. +type CostGetterOutput struct { + // Cost is the cost of the period. The unit is USD. + Cost string +} + +// CostGetter is the interface that wraps the basic GetCost method. +type CostGetter interface { + GetCost(ctx context.Context, input *CostGetterInput) (*CostGetterOutput, error) +} diff --git a/app/domain/service/sns.go b/app/domain/service/sns.go new file mode 100644 index 0000000..2202824 --- /dev/null +++ b/app/domain/service/sns.go @@ -0,0 +1,19 @@ +package service + +import "context" + +// SNSPublisherInput is the input of the Publish method. +type SNSPublisherInput struct { + // TopicArn is the ARN of the topic. + TopicArn string + // Message is the message that you want to publish. + Message string +} + +// SNSPublisherOutput is the output of the Publish method. +type SNSPublisherOutput struct{} + +// SNSPublisher is the interface that wraps the basic Publish method. +type SNSPublisher interface { + PublishSNS(ctx context.Context, input *SNSPublisherInput) (*SNSPublisherOutput, error) +} diff --git a/app/external/cost_explorer.go b/app/external/cost_explorer.go new file mode 100644 index 0000000..9075e9a --- /dev/null +++ b/app/external/cost_explorer.go @@ -0,0 +1,61 @@ +package external + +import ( + "context" + "fmt" + + "github.com/aws/aws-sdk-go-v2/aws" + "github.com/aws/aws-sdk-go-v2/service/costexplorer" + "github.com/aws/aws-sdk-go-v2/service/costexplorer/types" + "github.com/google/wire" + "github.com/nao1215/rainbow/app/domain/model" + "github.com/nao1215/rainbow/app/domain/service" +) + +// NewCostExplorerClient returns a new CostExplorer client. +func NewCostExplorerClient(cfg *model.AWSConfig) *costexplorer.Client { + return costexplorer.NewFromConfig(*cfg.Config) +} + +// CostGetter is an interface for getting cost. +type CostGetter struct { + *costexplorer.Client +} + +// CostGetterSet is a provider set for CostGetter. +// +//nolint:gochecknoglobals +var CostGetterSet = wire.NewSet( + NewCostGetter, + wire.Bind(new(service.CostGetter), new(*CostGetter)), +) + +var _ service.CostGetter = (*CostGetter)(nil) + +// NewCostGetter creates a new CostGetter. +func NewCostGetter(c *costexplorer.Client) *CostGetter { + return &CostGetter{Client: c} +} + +// GetCost gets the cost. +func (c *CostGetter) GetCost(ctx context.Context, input *service.CostGetterInput) (*service.CostGetterOutput, error) { + params := &costexplorer.GetCostAndUsageInput{ + TimePeriod: &types.DateInterval{ + Start: aws.String(input.Start.Format("2006-01-02")), + End: aws.String(input.End.Format("2006-01-02")), + }, + Granularity: types.GranularityDaily, + Metrics: []string{"UnblendedCost"}, + } + + resp, err := c.GetCostAndUsage(ctx, params) + if err != nil { + return nil, err + } + + if len(resp.ResultsByTime) == 0 || len(resp.ResultsByTime[0].Total) == 0 { + return nil, fmt.Errorf("no cost data available for the specified time period") + } + + return &service.CostGetterOutput{Cost: *resp.ResultsByTime[0].Total["UnblendedCost"].Amount}, nil +} diff --git a/app/external/mock/cost_explorer.go b/app/external/mock/cost_explorer.go new file mode 100644 index 0000000..3822ce8 --- /dev/null +++ b/app/external/mock/cost_explorer.go @@ -0,0 +1,15 @@ +package mock + +import ( + "context" + + "github.com/nao1215/rainbow/app/domain/service" +) + +// CostGetter is a mock of the CostGetter interface. +type CostGetter func(ctx context.Context, input *service.CostGetterInput) (*service.CostGetterOutput, error) + +// GetCost calls the GetCostFunc. +func (m CostGetter) GetCost(ctx context.Context, input *service.CostGetterInput) (*service.CostGetterOutput, error) { + return m(ctx, input) +} diff --git a/app/external/mock/sns.go b/app/external/mock/sns.go new file mode 100644 index 0000000..1c67134 --- /dev/null +++ b/app/external/mock/sns.go @@ -0,0 +1,15 @@ +package mock + +import ( + "context" + + "github.com/nao1215/rainbow/app/domain/service" +) + +// SNSPublisher is a mock of the SNSPublisher interface. +type SNSPublisher func(ctx context.Context, input *service.SNSPublisherInput) (*service.SNSPublisherOutput, error) + +// PublishSNS is a mock of the PublishSNS method. +func (m SNSPublisher) PublishSNS(ctx context.Context, input *service.SNSPublisherInput) (*service.SNSPublisherOutput, error) { + return m(ctx, input) +} diff --git a/app/external/sns.go b/app/external/sns.go new file mode 100644 index 0000000..0fb8679 --- /dev/null +++ b/app/external/sns.go @@ -0,0 +1,50 @@ +package external + +import ( + "context" + + "github.com/aws/aws-sdk-go-v2/aws" + "github.com/aws/aws-sdk-go-v2/service/sns" + "github.com/google/wire" + "github.com/nao1215/rainbow/app/domain/model" + "github.com/nao1215/rainbow/app/domain/service" +) + +// NewSNSClient returns a new SNSClient. +func NewSNSClient(cfg *model.AWSConfig) *sns.Client { + return sns.NewFromConfig(*cfg.Config) +} + +// SNSPublisher is an implementation for SNSPublisher. +type SNSPublisher struct { + *sns.Client +} + +// SNSPublisherSet is a provider set for SNSPublisher. +// +//nolint:gochecknoglobals +var SNSPublisherSet = wire.NewSet( + NewSNSPublisher, + wire.Bind(new(service.SNSPublisher), new(*SNSPublisher)), +) + +// NewSNSPublisher creates a new SNSPublisher. +func NewSNSPublisher(c *sns.Client) *SNSPublisher { + return &SNSPublisher{ + Client: c, + } +} + +var _ service.SNSPublisher = (*SNSPublisher)(nil) + +// PublishSNS publishes a message to SNS. +func (p *SNSPublisher) PublishSNS(ctx context.Context, input *service.SNSPublisherInput) (*service.SNSPublisherOutput, error) { + if _, err := p.Publish(ctx, &sns.PublishInput{ + Message: aws.String(input.Message), + TopicArn: aws.String(input.TopicArn), + }); err != nil { + return nil, err + } + + return &service.SNSPublisherOutput{}, nil +} diff --git a/app/interactor/cost_explorer.go b/app/interactor/cost_explorer.go new file mode 100644 index 0000000..b53248a --- /dev/null +++ b/app/interactor/cost_explorer.go @@ -0,0 +1,45 @@ +package interactor + +import ( + "context" + "errors" + + "github.com/google/wire" + "github.com/nao1215/rainbow/app/domain/service" + "github.com/nao1215/rainbow/app/usecase" +) + +// CostGetterSet is a set of CostGetter. +// +//nolint:gochecknoglobals +var CostGetterSet = wire.NewSet( + NewCostGetter, + wire.Bind(new(usecase.CostGetter), new(*CostGetter)), +) + +var _ usecase.CostGetter = (*CostGetter)(nil) + +// CostGetter is an implementation for CostGetter. +type CostGetter struct { + service.CostGetter +} + +// NewCostGetter returns a new CostGetter struct. +func NewCostGetter(c service.CostGetter) *CostGetter { + return &CostGetter{CostGetter: c} +} + +// GetCost gets the cost. +func (c *CostGetter) GetCost(ctx context.Context, input *usecase.CostGetterInput) (*usecase.CostGetterOutput, error) { + if input.End.Before(input.Start) { + return nil, errors.New("End date is before the start date") + } + output, err := c.CostGetter.GetCost(ctx, &service.CostGetterInput{ + Start: input.Start, + End: input.End, + }) + if err != nil { + return nil, err + } + return &usecase.CostGetterOutput{Cost: output.Cost}, nil +} diff --git a/app/interactor/cost_explorer_test.go b/app/interactor/cost_explorer_test.go new file mode 100644 index 0000000..4f36ebf --- /dev/null +++ b/app/interactor/cost_explorer_test.go @@ -0,0 +1,69 @@ +package interactor + +import ( + "context" + "errors" + "testing" + "time" + + "github.com/google/go-cmp/cmp" + "github.com/nao1215/rainbow/app/domain/service" + "github.com/nao1215/rainbow/app/external/mock" + "github.com/nao1215/rainbow/app/usecase" +) + +func TestCostGetter_GetCost(t *testing.T) { + t.Run("Success to get cost", func(t *testing.T) { + t.Parallel() + + costGetter := mock.CostGetter(func(_ context.Context, input *service.CostGetterInput) (*service.CostGetterOutput, error) { + want := &service.CostGetterInput{ + Start: time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC), + End: time.Date(2021, 1, 31, 23, 59, 59, 0, time.UTC), + } + + if diff := cmp.Diff(want, input); diff != "" { + t.Errorf("differs: (-want +got)\n%s", diff) + } + return &service.CostGetterOutput{Cost: "1000"}, nil + }) + + getter := NewCostGetter(costGetter) + got, err := getter.GetCost(context.Background(), &usecase.CostGetterInput{ + Start: time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC), + End: time.Date(2021, 1, 31, 23, 59, 59, 0, time.UTC), + }) + if err != nil { + t.Errorf("unexpected error: %v", err) + } + + want := &usecase.CostGetterOutput{Cost: "1000"} + if diff := cmp.Diff(want, got); diff != "" { + t.Errorf("differs: (-want +got)\n%s", diff) + } + }) + + t.Run("Fail to get cost", func(t *testing.T) { + t.Parallel() + + costGetter := mock.CostGetter(func(_ context.Context, _ *service.CostGetterInput) (*service.CostGetterOutput, error) { + want := &service.CostGetterInput{ + Start: time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC), + End: time.Date(2021, 1, 31, 23, 59, 59, 0, time.UTC), + } + if diff := cmp.Diff(want, want); diff != "" { + t.Errorf("differs: (-want +got)\n%s", diff) + } + return nil, errors.New("failed to get cost") + }) + + getter := NewCostGetter(costGetter) + _, err := getter.GetCost(context.Background(), &usecase.CostGetterInput{ + Start: time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC), + End: time.Date(2021, 1, 31, 23, 59, 59, 0, time.UTC), + }) + if err == nil { + t.Error("expected error, but not occurred") + } + }) +} diff --git a/app/interactor/sns.go b/app/interactor/sns.go new file mode 100644 index 0000000..d8e344d --- /dev/null +++ b/app/interactor/sns.go @@ -0,0 +1,40 @@ +package interactor + +import ( + "context" + + "github.com/google/wire" + "github.com/nao1215/rainbow/app/domain/service" + "github.com/nao1215/rainbow/app/usecase" +) + +// SNSPublisherSet is a set of SNSPublisher. +// +//nolint:gochecknoglobals +var SNSPublisherSet = wire.NewSet( + NewSNSPublisher, + wire.Bind(new(usecase.SNSPublisher), new(*SNSPublisher)), +) + +var _ usecase.SNSPublisher = (*SNSPublisher)(nil) + +// SNSPublisher is an implementation for SNSPublisher. +type SNSPublisher struct { + service.SNSPublisher +} + +// NewSNSPublisher returns a new SNSPublisher struct. +func NewSNSPublisher(s service.SNSPublisher) *SNSPublisher { + return &SNSPublisher{SNSPublisher: s} +} + +// PublishSNS publishes a message to SNS. +func (s *SNSPublisher) PublishSNS(ctx context.Context, input *usecase.SNSPublisherInput) (*usecase.SNSPublisherOutput, error) { + if _, err := s.SNSPublisher.PublishSNS(ctx, &service.SNSPublisherInput{ + Message: input.Message, + TopicArn: input.TopicArn, + }); err != nil { + return nil, err + } + return &usecase.SNSPublisherOutput{}, nil +} diff --git a/app/interactor/sns_test.go b/app/interactor/sns_test.go new file mode 100644 index 0000000..0bef54e --- /dev/null +++ b/app/interactor/sns_test.go @@ -0,0 +1,64 @@ +package interactor + +import ( + "context" + "errors" + "testing" + + "github.com/google/go-cmp/cmp" + "github.com/nao1215/rainbow/app/domain/service" + "github.com/nao1215/rainbow/app/external/mock" + "github.com/nao1215/rainbow/app/usecase" +) + +func TestSNSPublisher_PublishSNS(t *testing.T) { + t.Parallel() + + t.Run("success to publish sns", func(t *testing.T) { + t.Parallel() + + snsPublisher := mock.SNSPublisher(func(_ context.Context, input *service.SNSPublisherInput) (*service.SNSPublisherOutput, error) { + want := &service.SNSPublisherInput{ + Message: "message", + TopicArn: "topicArn", + } + + if diff := cmp.Diff(want, input); diff != "" { + t.Errorf("differs: (-want +got)\n%s", diff) + } + return &service.SNSPublisherOutput{}, nil + }) + + publisher := NewSNSPublisher(snsPublisher) + if _, err := publisher.PublishSNS(context.Background(), &usecase.SNSPublisherInput{ + Message: "message", + TopicArn: "topicArn", + }); err != nil { + t.Errorf("unexpected error: %v", err) + } + }) + + t.Run("fail to publish sns", func(t *testing.T) { + t.Parallel() + + snsPublisher := mock.SNSPublisher(func(_ context.Context, input *service.SNSPublisherInput) (*service.SNSPublisherOutput, error) { + want := &service.SNSPublisherInput{ + Message: "message", + TopicArn: "topicArn", + } + + if diff := cmp.Diff(want, input); diff != "" { + t.Errorf("differs: (-want +got)\n%s", diff) + } + return nil, errors.New("failed to publish sns") + }) + + publisher := NewSNSPublisher(snsPublisher) + if _, err := publisher.PublishSNS(context.Background(), &usecase.SNSPublisherInput{ + Message: "message", + TopicArn: "topicArn", + }); err == nil { + t.Error("expected error, but not occurred") + } + }) +} diff --git a/app/usecase/cost_explorer.go b/app/usecase/cost_explorer.go new file mode 100644 index 0000000..5e12b36 --- /dev/null +++ b/app/usecase/cost_explorer.go @@ -0,0 +1,25 @@ +package usecase + +import ( + "context" + "time" +) + +// CostGetterInput is the input of the GetCost method. +type CostGetterInput struct { + // Start is the start date of the period. + Start time.Time + // End is the end date of the period. + End time.Time +} + +// CostGetterOutput is the output of the GetCost method. +type CostGetterOutput struct { + // Cost is the cost of the period. The unit is USD. + Cost string +} + +// CostGetter is the interface that wraps the basic GetCost method. +type CostGetter interface { + GetCost(ctx context.Context, input *CostGetterInput) (*CostGetterOutput, error) +} diff --git a/app/usecase/sns.go b/app/usecase/sns.go new file mode 100644 index 0000000..4d2d6d9 --- /dev/null +++ b/app/usecase/sns.go @@ -0,0 +1,19 @@ +package usecase + +import "context" + +// SNSPublisherInput is the input of the Publish method. +type SNSPublisherInput struct { + // TopicArn is the ARN of the topic. + TopicArn string + // Message is the message that you want to publish. + Message string +} + +// SNSPublisherOutput is the output of the Publish method. +type SNSPublisherOutput struct{} + +// SNSPublisher is the interface that wraps the basic Publish method. +type SNSPublisher interface { + PublishSNS(ctx context.Context, input *SNSPublisherInput) (*SNSPublisherOutput, error) +} diff --git a/cloudformation/Makefile b/cloudformation/Makefile index 093a7da..8383dc4 100644 --- a/cloudformation/Makefile +++ b/cloudformation/Makefile @@ -8,4 +8,5 @@ deploy: ## Deploy CloudFormation Template cd static-web-site-distribution && make test-deploy || { echo "Deployment of static-web-site-distribution failed"; exit 1; } cd lambda-batch && make test-deploy || { echo "Deployment of lambda-batch failed"; exit 1; } cd lambda-with-api-gw && make test-deploy || { echo "Deployment of lambda-with-api-gw failed"; exit 1; } - cd cloudwatch-rum && make test-deploy || { echo "Deployment of cloudwatch-rum failed"; exit 1; } \ No newline at end of file + cd cloudwatch-rum && make test-deploy || { echo "Deployment of cloudwatch-rum failed"; exit 1; } + cd daily-cost-notification && make test-deploy || { echo "Deployment of daily-cost-notification failed"; exit 1; } \ No newline at end of file diff --git a/cloudformation/daily-cost-notification/.gitignore b/cloudformation/daily-cost-notification/.gitignore new file mode 100644 index 0000000..fab0672 --- /dev/null +++ b/cloudformation/daily-cost-notification/.gitignore @@ -0,0 +1 @@ +/bootstrap diff --git a/cloudformation/daily-cost-notification/Makefile b/cloudformation/daily-cost-notification/Makefile new file mode 100644 index 0000000..c891859 --- /dev/null +++ b/cloudformation/daily-cost-notification/Makefile @@ -0,0 +1,30 @@ +.DEFAULT_GOAL := help + +BINARY_NAME = bootstrap +AWS_STACK_NAME = daily-cost-notification +TEMPLATE_FILE = template.yml + +.PHONY: help clean dependency_check build deploy +help: ## Show this help message + @grep -E '^[0-9a-zA-Z_-]+[[:blank:]]*:.*?## .*$$' $(MAKEFILE_LIST) | sort \ + | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[1;32m%-15s\033[0m %s\n", $$1, $$2}' + +clean: ## Clean project + -rm -rf $(BINARY_NAME) + +dependency_check: ## Check dependencies + @command -v sam > /dev/null 2>&1 || { echo "Error: sam is not installed. See https://github.com/aws/aws-sam-cli"; exit 1; } + +build: ## Build binary + @echo "Building for Lambda execution environment (Linux/ARM64)" + GOOS=linux GOARCH=arm64 go build -o $(BINARY_NAME) main.go + +deploy: dependency_check build ## Deploy CloudFormation Template + sam deploy --stack-name $(AWS_STACK_NAME) --template-file $(TEMPLATE_FILE) \ + --parameter-overrides EmailAddress=${EMAIL_ADDRESS} \ + --capabilities CAPABILITY_IAM --resolve-s3 --region ap-northeast-1 || { echo "SAM deployment failed"; exit 1; } + +test-deploy: build ## Deploy CloudFormation Template for test + samlocal deploy --stack-name $(AWS_STACK_NAME) --template-file $(TEMPLATE_FILE) \ + --parameter-overrides EmailAddress=${EMAIL_ADDRESS} \ + --capabilities CAPABILITY_IAM --resolve-s3 --region ap-northeast-1 || { echo "SAM deployment failed"; exit 1; } \ No newline at end of file diff --git a/cloudformation/daily-cost-notification/README.md b/cloudformation/daily-cost-notification/README.md new file mode 100644 index 0000000..31e5f1d --- /dev/null +++ b/cloudformation/daily-cost-notification/README.md @@ -0,0 +1,27 @@ +## Daily Cost Notification +### Overview +The Daily Cost Notification sends AWS costs to any email address via EventBridge, Lambda, and Amazon Simple Notification Service. You can stay informed about AWS costs regularly without needing to open the AWS Management Console. + +### Architecture +EventBridge triggers Lambda once a day, Lambda aggregates costs from Cost Explorer, and then sends the information to a Simple Notification Service endpoint (in this case, an email address). The execution logs of Lambda are aggregated in CloudWatch Logs. + +The architecture of this infrastructure configuration is as follows: +![daily-cost-notification](./daily-cost-notification.png) + +### How to deploy +> [!NOTE] +> Before running `make deploy`, ensure you have configured AWS credentials and set the correct region. Otherwise, you use single sign-on (SSO). + +```shell +$ export EMAIL_ADDRESS=${YOUR_EMAIL_ADDRESS_HERE} +$ make deploy +``` +The dependencies are [Golang](https://go.dev/doc/install) and [AWS Serverless Application Model (SAM) CLI](https://github.com/aws/aws-sam-cli). Please make sure to install them beforehand. + +After deployment, you will receive an email from AWS to confirm the subscription to the topic. Please confirm the subscription to receive cost notifications. + +![confirm_subscription](./subscription-confirm.png) + +After confirming the subscription, you will receive a daily email with the cost information. + +![daily_email](./daily-cost-email.png) \ No newline at end of file diff --git a/cloudformation/daily-cost-notification/daily-cost-email.png b/cloudformation/daily-cost-notification/daily-cost-email.png new file mode 100644 index 0000000000000000000000000000000000000000..97e653143823fca614e028cf7755aa654b8fa405 GIT binary patch literal 18944 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 welN8+iFG|={Qr(`{aR6d;kCd literal 0 HcmV?d00001 diff --git a/cloudformation/daily-cost-notification/daily-cost-notification.drawio b/cloudformation/daily-cost-notification/daily-cost-notification.drawio new file mode 100644 index 0000000..0534e2a --- /dev/null +++ b/cloudformation/daily-cost-notification/daily-cost-notification.drawio @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/cloudformation/daily-cost-notification/daily-cost-notification.png b/cloudformation/daily-cost-notification/daily-cost-notification.png new file mode 100644 index 0000000000000000000000000000000000000000..0f0f890da4edfc3b14d81fa469df1f973e5eb1b7 GIT binary patch literal 72524 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 literal 0 HcmV?d00001 diff --git a/cloudformation/daily-cost-notification/main.go b/cloudformation/daily-cost-notification/main.go new file mode 100644 index 0000000..2c475c2 --- /dev/null +++ b/cloudformation/daily-cost-notification/main.go @@ -0,0 +1,105 @@ +package main + +import ( + "context" + "fmt" + "os" + "time" + + "github.com/aws/aws-lambda-go/lambda" + "github.com/aws/aws-sdk-go-v2/config" + "github.com/nao1215/rainbow/app/domain/model" + "github.com/nao1215/rainbow/app/external" + "github.com/nao1215/rainbow/app/interactor" + "github.com/nao1215/rainbow/app/usecase" +) + +// CostNotifier is a notifier for cost. +type CostNotifier struct { + costGetter usecase.CostGetter + snsPublisher usecase.SNSPublisher + publishArn string +} + +// NewCostNotifier returns a new CostNotifier. +func NewCostNotifier(ctx context.Context) (*CostNotifier, error) { + cfg, err := config.LoadDefaultConfig(ctx) + if err != nil { + return nil, err + } + + costGetter := external.NewCostGetter(external.NewCostExplorerClient(&model.AWSConfig{ + Config: &cfg, + })) + + snsPublisher := external.NewSNSPublisher(external.NewSNSClient(&model.AWSConfig{ + Config: &cfg, + })) + + return &CostNotifier{ + costGetter: interactor.NewCostGetter(costGetter), + snsPublisher: interactor.NewSNSPublisher(snsPublisher), + publishArn: os.Getenv("SNS_TOPIC_ARN"), + }, nil +} + +// getDailyCost gets the daily cost. +func (c *CostNotifier) getDailyCost(ctx context.Context) (string, error) { + today := time.Now() + yesterday := today.AddDate(0, 0, -1) + + output, err := c.costGetter.GetCost(ctx, &usecase.CostGetterInput{ + Start: yesterday, + End: today, + }) + if err != nil { + return "", err + } + return output.Cost, nil +} + +// getMonthlyCost gets the monthly cost. +func (c *CostNotifier) getMonthlyCost(ctx context.Context) (string, error) { + today := time.Now() + startOfMonth := time.Date(today.Year(), today.Month(), 1, 0, 0, 0, 0, today.Location()) + + output, err := c.costGetter.GetCost(ctx, &usecase.CostGetterInput{ + Start: startOfMonth, + End: today, + }) + if err != nil { + return "", err + } + return output.Cost, nil +} + +// handler is the Lambda function handler +func handler(ctx context.Context) error { + notifier, err := NewCostNotifier(ctx) + if err != nil { + return err + } + + dailyCost, err := notifier.getDailyCost(ctx) + if err != nil { + return err + } + + monthlyCost, err := notifier.getMonthlyCost(ctx) + if err != nil { + return err + } + + if _, err := notifier.snsPublisher.PublishSNS(ctx, &usecase.SNSPublisherInput{ + Message: fmt.Sprintf("Daily cost %s USD (Monthly cost %s USD)\n", dailyCost, monthlyCost), + TopicArn: notifier.publishArn, + }); err != nil { + return err + } + + return nil +} + +func main() { + lambda.Start(handler) +} diff --git a/cloudformation/daily-cost-notification/subscription-confirm.png b/cloudformation/daily-cost-notification/subscription-confirm.png new file mode 100644 index 0000000000000000000000000000000000000000..d2b7420b4a2614f3136e5b92d50c8120a894817b GIT binary patch literal 42204 zcmc$`c{G)M_&%yqb}DwGGK(mgk||?k$V@UT5mA{_WGq8Ss8li~B&iTGCNfVUkvU_g z$UKkd+Vy^aYn`>uA7`!eTfejac;6k{v!CZP-1l`~*L8maG}IJ!QPNV9k&*3EJS%&S zjBLva8QCT}!e;!0vS>>={-4g5ytRISuh~N+Zx|c&u;36FpQ@t7g-0bYN>({6Dcrn{_<)6Cx zo$chwlUufU?`D-B`}rw5E-r2$-S^(TzH|n0=MPo8C@CqQtGrH2o5~K!;GQ4XydEenv zX3B8N!K~?x=GyYyNg<(IH*bEn>)jkuab4jY{>FqqTun`l;bP@{RaI45W@ctaMooSF z#1}KeoCS{uL-jEmOG7cN@(=g~1e#h}va_--rkTo}Ki@=soJ^X?Yg{01-&dM;xnj@W zy}MpZ;=x|8d!{ ziT2FVv9^pwr&FhLakno{-MF%`zD9^0|M|(#z~GkE6j8?9+&qlu!sD>87-8EN!_)6{ zQ+0H86=Y?9{rWXLGIGl~So7#J{$*qv5Zey3IQ#WZcO zE}CxdUhfV16Q-qj;+FUNdl?wqmuE+WZM!O~t8ZP~WH1u8ehHh`@<>%uzxvs;l~q-m zT3TlaKR-FCzn}h5T}{a{i)YEp6HR0A?R9l?6AvugV~9n^+sVN4Yjku4Ln9hpaJeGb z$H!-Ob~aMjmg*qi%a0!&>!MB-FOYFtT3WW|-MsD^{6WsPyFkKm_*=X}Na?drpFU|N zHC=6d9l(?Cxv}1sVUh6a)oazrER&LLy1KeP5AWZnl<}86eC*hVnRCn(e8OWWAkBpxW~=n!LPmseE0+Lms9@#4iT6jZVsZq>t%d3esm!7i7=S&F@6 zWT%fSsxfT*>B!zKlX0ciW%`#Qu7?%vznj(P`pVpBVqDxgP0dHopNm+v@-;A&l$7k2 z!H(uWcI@`t@2B40-gf(?iQBhtC&b2{@jL88zFGS8X)>AN;fDC)Qf@9T9_$I5&K#`i z2M->sudQTjoD~zpoOj8|%S*bQz!l^}7^7oij4xbR zQ`Vh18UA&6c$i8(tI9Ps!`#Bc)y1W`sY&G2DLkqA?9`8Mq}Sv^x97s-q=u$u!?$n4 zO^-VZJ(*a34GmdXTXP%bVCM0S;gOMAM>pmtx;!^X!zF5Hsb^`ar?-Pn`zMbcrG5Btnt%wA zrpJY4mG)MHHfV5SA~hvty>_GTJm*cs04${L0{2frK|xVbMhf)qk^5CSvgy>jaKZZWOB>x9Mjt3PIbRfWEN%h|c9rL0U&Nr{t->;3E3@{V+!{2W3;I*u$UJxr2rInmJ! zGDrFO&pC42P>5gpLdN;@J`wBgmBvvwNvR`8X@r$eOHiDJrx*!S({U4s>QM;Ytz#XomHRgDRJv6?2R2AhK?-33Ne!IqBnn^-~0EatJ{L9 zzmaRyP)qR2K|uO=wNXVy#bsgK+QK6H#!%hk$B)Z%ef<3D!%tdNK4e*5UcPnf7D9Pl zWhF7C?58g&jSx$p9@iZk8*`Z-yL$b4AhFL*WHFA=QGDvuDdg^`sHoM|)gU@y#OU9n zqaE$-Htio3Kb|}@Iw67a3=}J%M&QK$rJ|zxbn8!bP0ik)@_OfeH0E`IosXhN6x;lqdW zm~@1Cx0yKq7d{9T!F0kY*o)7eJrlb%_9i7oo-nnvIx|!sLVxP}moHyBJKY-MEDll0rO_|qqu^_NTkT&$JeP!^jHfdCaH$BX zY3htjq=0|`v(GK8+-ps5GA!zm(9>|&+*UEqpXXdE+H7=0J-&gKmKL!EuPvK5BR6?3 zJPixe)zW&Gnre}zcb-#QT6z;plbPXaL_~yK;DPNMRu07dc$tWJ5k)=MSMg2u%x_-4 z)X>w@)6gL9-rYMsj!rrgoROx{7DQPO21Z7YUzNLo;1bUL zXlhz?^N^F<8m^+Ftu06BWu&Ri#UC{%8`_T@=jAol(V6cn3&d!&wzUCNku$}UrX2{w zS^PzQzIbG<2T%n*eZ#>)^lf43m%CeT-n^NSkzr9ALE4sGpIx2KraOwdV+1RL8O{(8 z*98Rxdb++K>xsE9e@sv3?;5L@+Q`54hgRmSj*gC|<_Qjtq0ZbJ$RD3?{fU?y?6nga zZB8zcXsI$wNASb)zIAKk1`D+C7ZY%Z2- zD{x=w_S{g7)xaG9%GSk5Z6MFn3EOZPd_2m@Ny1O^@~`9K4zsbb2?@>P4;Mp^5DEGD z`I9uPLGoHUIy~Im?u(PXh%VVSKSi%MbNOf(N<9~6v;}0id-pDZWlsPbFK>w0neIYQ z&#K2qu+htn3CZG`fSv8t*Z)Mk`emlIH}qMzxIob292U~($jBUE;Hy{Uyt(%M+q{bw z*A}|VvgrBE2;N1`GlRR$j*c$iL+R;{nf(z5_zylP+*mivS^E}y=Fm=g85u7- zMQiKiz`z~eMVI&v1_uWtsPJ%cS*fxxNqKy|#0PkEZ=*BAg4(<2x%lmLJMYz1w{6}g zW@cb0{w(pMWPj6F*5>X~wmjg19_y25u5>v`YnXD?pVUE9*ws@*bm-vv1u=c%} zIXOA=KYyOus-&)NTbpn-Xknr|GBWby!JS5bTt=I@4+I{`Qq|W#&~(FF6kwbYwGFcnAaR|qqSca0bJC=Qy?bfgo$qQ*F67I4%y)6s|A!Q{(Ot@ETaHr{f5=doEn~8OovVAVM!0 z!?b_D@5C88I=XG%y`!Usy1E=h0%|LJnvQ5Or@kkMB?=D?o^be8IXrCX_Ew*(Irqj8 z9?mD5ym^^=5b1i#sVPA@Y*H@i%^MMqRS`*UtWKN8fX!rgJae-Z6+M@hMISi2&@V4q zpL^U|-~X+GiZyzDdd@xaNt5QOl#BfXeBYA>GT*g0?8se}hcduUQB_qH z$@sa-6&stB;b-r3k}(j8YSG1>_x$_-@&opA^hp709o$*Yzc79w|CN2|L~rlieuuPIIY#3Xg&SCgLbhF8 zxAqhqx@l5ZSBIhe@lH2x$Bi2|Ff*U#s(tzLB|!8V7JTs$WB}8S(z3D> z2OpfcTuuo4$o~Nq&2V?2ly^~%+fsV#v#ndV=A5Nw6#t@Zcj?5fF}<|wzsAS$Rl$rB zN{&&aAa}i`kN(ikd$F;-7{+(+-pL7DYL$k>4A{~0K8cPFiXlJD%DUYPSL5$eaf}4C z;81@-a8glI!xlmSE)VgI1HKe7t9;ngbE!ckjN6bsOaI31!n=2+<>l`UKihowOJieb z(IsbRX97*ubeEXtx;WLs^=sEkvpPRH@p>28IXLVQlQPV<+5hu>N(vQ4g}uGKtd<=; zJrh&+uXgsE-`8{u4FjpAxm1k~u^gBZzOCu=4z$4Wyj3J6=TjbO>^_AiV}Jh0QSYi4 zh{J7J3Cg}T$?xCW z{LBLY7e;2&KB;|WtA%k0aPz78lAfLlK&vG0zult-vp&YwTO zql9-H^ugN7g6WR^`}V255O3?`LEV6aj`S_VG*!y7dUg~Oxi3! zQ$8R|16QTlbd2YETXkRVr%!=`CWjxL1>V1neS;+=Cnpz4Ti=tV2pD7QmYr&l`5RAz z;Ur3^@Q3FkHa66nnVVzNva+&b>-g5z%I&tcWnI5Kp8YJ-P7_JF^j?*)uy93T5AO*U z5K%r4Ekg)bua5Nf^#NpiE>6Z~WdR25SEuzSUaO$ca*h;atf@iS(9p2klj(kz>F>$C zTgk|zwlT(3xR>v&)p_t+NAJAjF=l1~uJ=E=#|jl&pHon`d#@k*oT%!tnH;DIOG`^Dxwost-EAr- zDo8V_iNyWT3G;}FxuT{+?xGX2`qtchfFU5&{BrpNd^+I%{dVAh{(H$2-GxI_&d8KG z_Q?mgY}vxios7gaHfFWTn_tp(H8kzySVGzUn zf>+-$>WJq2{Cr2YEe%}`Wrb+mq+U2ZRbs9YxB}XG*Y=3TOcXBwu`eWC=P_JPW37)~ zypXi0i$c8Z>-uc{9lvAeFh#%?bD6btaS@fVL_xyC!y_#%owM*ZD5w^Af}5LLZcEaE zl=Jw1)xUfc8%E^GkZHwwks6WMd2od-O>9@S_NN>iaUWt*x!#(Zo)j z(my!m1hjX(CB@XRkA1H8g8t2$b9kg*0|UEIqdeWZa$>=-#vtb?N*U8`vc=mVWCC~X zkxOiBkdpBIfJ{3EYQRzP(k13~zGjennGd_gHL*9x$No;NyryRCy?fgsBujOx9WgH-oQ`^Knzc6@W#F!0fkmM+S_J)@+o3Q{?^e<41tw3!p=?yFE(w zr&uT7Dq9kwIo&^fUPtGC-G}DjTxFEI&l>$L!v<_=MIDEcNq6qt$$9*Es!{Iu=FKk$ z>$xRwxiJ!D6oTndFFo}2Eklq*b%NSK5*r!=Meuu6wD3hZb>F@IVx4Q_oIM@sz^QYJ zz?3`4H*ekQJ9y)g)~v)2_?$)!;bP;7Kf7W!;_FO~oDWw)D~TfSZ>qsqalmZm1~s&C%Dz5nAS$B`p~ zOG+*Xx5F{lJ~UtE4}bCEg`1>j<7-vZN5u8|b{P%d3JWXqs1~XmvTnDyoLhek+}+nu zw5+YJ?%cI&0K})`@=Iy&`LQ-uAv=Z0>HX!OOzm!iY4!L;F7GC}fw*hxedVwZ;*7l( z(e3Bdl+Yn%LB{62f}S>IjPqx)r&%~9CD$i=OTauLQOwTIcVX#vy{x+Q?u>xb{z>b$ z*X$CArDpuOuV25Ox>{;Lb<}Ws$o$@Y`xrZ39SM_q^Yfq z;_Fwsc};s5b3v_vq-OW+B{H&}Zgv4K$MW~#wQKJ$etP}k&6^pAi8t-;V=cjpmoHzQ znVx>~^eN&Too*Y7nf)yL=;^r(r2JSt#BZ@(+c!mb@Sx?jYgnk{Teof}-;AZ&@BwKl zIVB~fB817-=<$KL&(F9o=H~!NV&RCf(W zB~i{*Wfl_;gw#p8E!w3mN(u>OF<5M2!Tk8FkC-+bf76jqTMG zXTxZ4V;qfAhbktCOvm6a9HuY2?6=vdzhEB0GKKF{<*%TKDhY z7Z4PPSUm=?&&g?1e>yx_11VDPe3NFchD_@_pM^f%&6xRd49Tz7vTiEoF z+VEi4dl_q zT%Rx{53AX)Ge9}zEZ#ZZU0WL@AK&ZC&(BX_q2GLq;OgqCt^EVzU#_ZyiT!~bU}Pn} znAf^f38iAU@87@E4jJm{4G#_Z5hM7`mBfPI{Iu(SfNYNZ z?$3kVu}D>VB0DOIK80fcb?s@Ct$-2iTIFY6`|~V;asf%dTLxvR0s*+8s=E3&D*Lz& zP!2uw-;kIIEaD2^K{C-U$j#5p(D9p9qU`E$`%38TL|G{tMkK#m;YkllaFSd0_=H5~ zv^CO5P>eqn#>~LrZDL}}a`2|wsrh-xAgEt*6B8{$<*-W(K&9Z@r`+~!6t5(o5m+i( zMa~C_TAF1wKrsVu7dM1m!p*H}rA?X^y@S3o;d~~=3t{wRWb3;yd-=^N+js4dBP8qp z8CYqNOp6hG_n9aYYZ80$ddt3>GOC3L`0Iu9H_zvUc#QbRl=Svo(@ooc&*v=LV^qA$ z7JN)9ii%a0m2dL%qbmCK4Ge^AuHL7c?-4p_8npQ5&!6b1s71GR1Zad(teD1c-+%zq zkh=jFS$u%x+U=RaoFTQEo+M}W$+BvTd->9CqDz9BnwtLWZt^LR7D-x(1s-b#T3U@Y zHOe_BUI=orv$G2dYBLiB^lx{vW8xQ0E+dLT{3>mnMdG5^whbF7r1lCD0pyP1VSi#C zsWezwm9 zr8(sS0+9dpQIvFmlHhHyrKji^FJJB-X-pIr5KxI0okLxclXwN=k6VH6c>dzWbqTF| zP+AlhpN(NTBEC~INxo{ZjJsU(ak}e9!$gn_}q6rk1Cw95c8 zK(N+Mr+fiPZ-WoNeS7J{2R;f43b4XWO-;}lAl5v1uoHw41%)4eg_N}#HP4&hElOUn z-`&m4XRi-1lzN0flKs24Iv#w`PJ~_Ot%M>a%&VV#`Eq*oS!!M$RIEluMn>elx!*sM zC-za1k!@U23l6@nlX@}3B{MW$tHv-Q;&~7E&%z(I*$e^(C(db%u9*gD$w3JP*aQ#0 zi(ceIt~InXwHQe}O=ESnQZL(Uuw%|D0qhmgAF{HZJ${Vv1(*}m@fG{Z86gd^3|gd! zUC$l6QvtFDpItJ&z0a%!o1=E4`Ks`0BRl8Q_MCJg-6@Ax z+1U#Kf9fy91LCunmtE+Y+gn@dC0stbOOUs#Uc4yD$7hFR44TO(*CAn;Q#9HG#em7n z46IJD$RNMLtki(&CNCOr0Mm{vLFbn-I5;RTFAt2HR zqsTxWietHa8MnzKV)wGJa0BcpXjp_5YZ1A>F=AoZqTMWN`xa-MV+ zXJBA}WO?ewAOI1iFk*NP{si0>3<^Naz{cZPQzIkCmY*p$Vck&dJZJ}$`SGIwh6Sre z?Kz(bbn;@27qW*LMC>k=`tJr?i>n{!;nC63q5}j+7W3T&Sa+UtuJREps-iGnV{qs0 z=H>}0DK;R{!Aws|>|e#Eq1wLv6!;oo7k&M3u&pF@*w3%^=Z|Gqbts?serSvZKx#l~ zpl)HYz&_mo$Cj4HUKsk~MHg~!d|Vu(xHFNCE|4h{p^ciol}z)o-IBjq{^r3^w- zy>*Gf6MAg_hi|`h9JdOQR;A-6QwHGTvrg1*yJaS}i?RJmFJ^TwY{)GB2$G5oN?c2A1G&h3>_xJY)gaW%!+ucpF zDM@{@Bz^g?qZQSPw#v=`pQulwHCn$sPY07r=c_8YOwU$9jLW>~_+V#H(~l<9ojw{2 zf!am}5z9P+$RPRookd+monObK_ziZ3R3MH}xh|9M_KEk72f|nozauymRoXuVF;*;p zl>4a?H!m+hJj3%r6dunv_)ea@aq}j48m_P!>)HZT;rH&{gQ6ru0Fv{oGUL%tf0exT zQkotB!$Fh?h|Y)*SL&h;F*0@ymRM$@5ODh-<}|*KC*Ni6+6rX|5urTx(W8cYyXYok z=H})QT2qpf1%XWY_%Pf+o6v#rUxpiGs^**~KwKVBY+^2urr@OnG)8^>+h*r~)jWS5 z@tgMU>B%kpwUu9Yy6(}@(70q`a-yrYwxP%bdBc6z&SlzzI}h@G!N2n(BYl14K!1cL zs`F>?i)HfBQw{Yes;Akf;oG7k8ido@#(q6{;)+zggHlON(Ilg-J2YZ3W3x?8w_>u0 zrGSB|YEWF9sb9V*@tl?xH2Jsh->Z;xxW7gwB+X$*ml{_jjx@dZ@RDrb%l?tK8`(rL zlpUH9iw|dc>^756!w%G9gv_+em5n3c9~nQE4^%L z3ddWFgzLQ)kM-5?GE)RSty zy!8NcRYjU$sYH{Tb-fd&2yTNo`^bUFA_CN&2%{aaGO=u z-GaNYR#^P{uC)2?or?acCAU2RSWyKtBcq;&J-nDveTil^2t8Fwe)|^gpph@a{76}- zJ!lBzpxjnx>ZPDJeg6CzwZzZqiyj^x;CPTvY@G_=wW_PG#>x;nbihk?vg0+>=$GRy-Ny*7UhGUTM`ua?L9_Ht}UA=m&>onLkb@kNC zG2diQu2Cz&Kee#n1ZLOCDN*AnxwPBjWKnl_cUPAOBvYwRj#z5zjc?z+GwnD1@#DuS zdNs52W)l}bi;DHtBd91VH#Rq?(TYBiJ^cCp?XvzUik-u$aqqo|Z{NHJIsHoG)iUjD zCavhlH*XfVYmqkkfw zxUqLiS4U_4j%0)YZ88vENyltx)i0BhdkhjTvta3fAiAD$8(Ip`N)t)SE`$R$wO~9Z z5`Rm|1ppj%pKpM&pzYX^nsx3$OVJ2uNr!jVwowBuqW}Ju-p~K~m5?R-Ivj2@=kMDF8er$X)0T z*4Eaz>32yU{X^jfZ&3N)s>Y80l_T2pp>2v7FHn0DJU>WxCk6M z;wuyTJTj6*LpC+-V;Y(2uYkR52PGv+R0eu_on(Uq6vv34fT1itK)!IA0-M!Gonno+ zT4Mp?ffK78YtUHQ+WHUJag+-JPSgZ)FR1E>=b%-vDPW~aNKAD4(|!}%3xGD>J@Y-bwk4yJQ}oPp_3vJ6lts)_JR7{gXC?-&$ z^iDa0zIh>J9r1yiUYZEI9grs--z72`|Jp0OphZyYIyg9h5Z5pCkO-;hAbFcqgK~3k z+t`f%18tCGUM3}lqjV+`@9@S11_mZ4bJr>B>I!pm-j|PGoA0n)Y-2ugVhS}802mw} zC$D_{QgM_NED&)Afzys1!&BR|elQ`#;$d%yL}Ba0BLx}=TIJ8~?hSBG5Nq)?2(3^A za{%zcmYzA|efMtBd;JV>nRU@(H2e1-QMrw0#nfM&HWSiqD)%K-#PCqS+d-7sv}qFn zIOKOiEHWDmp;$qvEMVwM*W)tUnP&R{pc3~1;yvl@+q|3{JwrobC-=hJl?a=Tq6~S7 zTgcYETdi)LIkP3KrcAq1Tymqo;(dKgVXHyMc^&O?4mPtZ=6n1f9#(!-Wk%_Xx#MPK zZA>$MZrfFmoSG`k&u_-}ocChBi2FQOkdpSfbM%%ch%BHpZyuSXj4TP4s=tgefXdj` z7K18KRJ_mD(z3Gp>rRhJX6`@HzGYu_-@3K=?#uM_b2*y=RN|^N07gCZT1+T?<9^0h za4m!rSWqcVd|lX>Fw)YRDS2HRcPGW$ZZ2#dqJd@ARaMf2=uJ-^#&o6)FNj1k`9! z(y@?=NR$}Zx7fod8=u9*c;brC|9Xoafm~0y`1x&o{7IO6+uPfroxwZ#244U{*qQmf zf7e0{zfw%hJ0Iayf}y@Hiah=ql2acK$axe90%ef=c}(&b0S8WTgXHc8P1 zA{I5Rz*(-wXZ3rs5W6HKJ{NgYKrJ)rE%wE92dVqR(-9opm1BR|!GZtc^z=XtOqJ0h z_NLH(pclyzVEI{vYK`b4?(oY$JKO2%)uh5g&l?ttxC0m*5k%mcyN%sS+J#oFc73JW zSy|&zv-gi51)qfq2sJa7BQ^z=X7NwhE0dG|V5v{VKr&WgM3kt3U4AP zY!X+-bO}%j@;FKN~8c{f*Hs{h$XG2D2venUfmYzNhHX1bD=FOXdrZBhA0$!`f zj1LV7Uu!y=Mk8q@w1SEaSA_ZR^ypFSmux$JI-1O?;^)tw6FLM@Vx_l@A!7S{ zL$ZKB1Y9C?OvG8&$sTFQTzDRT#tT5X@I}IQryeaj(A&HF;6c2vIB>sdngtAjZD-C2 z5s^i)$g`WtzVLDszGNPp8(k@q)=f43Astw9)%0Bz9W zBMDuZ?;bxs2SZlHvrQ~dK!-)UF2otj*EEbwJGy)wZGm(aC)L~AYx}tCz`g@QRG&oy zPBS0n<@E&q1*jvz*Vo$AHk?gqLBa<24B2nW2O~?Bm6gHXKp>fcQFC6#Dl+5OmzFj` zCNwcIL0~ey*%}9`2L)UD(N*DB$r=H@Vifs-SFa$4Hzp_z&YhvE|xX$~Dq zijBQ{eYV5#*`yG-sgkwB9vf>5AY@BRWx+?9P(qmkIRYx9sj<-zL>a=@MH`6xmX`iR zT3GB6Omd8Dl$0o+DwX}od2{|Z++HYfBtV8iCW)4Gr=3VZ7>AL_=i&SJW7t6U9T}68 zc34tw*?tE>H>rZy_=|`e(cXwc8cDm`&Iw2;~3^J>64hrr{Z;XJ9~F znwnVLzpLCd4YrWq<0L2I0!h+PXP0?nuL&PD9Zh+AyMd|b*&q~v9cxcDmP+%p_R%mid-e3`eviT?Y)=5EH*eku{7rc7EAu}QK@iA%AIq$Mnn4ow|XL+8Z18B4D^OaM>E>2xK&m2n@d|uug_hh4SN0N{+?^WxxT3$0%%Hqy8Hu9`_1!b9d2-Oj0z>LL-%xmwU0wA#4A^ zN#oqPYfjfTXr?xv&x^;|d1K;!P^qKfq=zdZ5z880j9kZ&bCNN<+}uIea{}+*H)y>e zFMnn5YdBWsNA7Nu-_JI-bby89Q@q0r9NrZtx z3Qn&7*gBL!s<6L;S3_8bX9aAw&A_I< z5zNRB%z8u40XQ-bc(h|Of|;av-WQ|7MnpKziMlbRm^vT3EUYFuIeEWoQERJ+sHh79 z70QO=x+$^*6mz{iBE`ECeByPt$NZEK7l%C@F&qyVCSTaVPJyh7H z^WdI6>0rz6p5}A-b+&BwM`w$N!Va;_&?+;N_|yF14<_D0s{rAS zGF{y1#fKXScz zCYZlMo!cy@YMtL<+gx&Q`}NBlt3nrgOg3PNM804!+}2QOfIX(K z7_itas84ZLAKWAvdpNw1vo=L9iU`8|!?RxM)XfMJ2|=BgxPC+vA%%oJ>|` zO-TbIb{jN1*DBlHS?Jdst(q~9$9Q;NH;$;V?`1*M*w4T~;&>t401qPe_G`QzkcBd9 zzq&Yu!qo=+dzonvt)LPjrWG9k!=8XAj~@f8&@^O{m{2pg?CJ z-GErOX6UW>_RS7O11i;1D2YZFt_k-lUSEB5IZY2rLNW^44<=het5(7CLL!%ST2eE; zpk4YnGdmj{KA$jZKsb<81UHiQTdH92XH8P$;=JmIvIp(;wY6^oOXkQGXkc^{6_Fsn zNPF7br@`itzq;|j(8|Js=HS7jM8dXRv_8ffFt~D@IMLABs;94y)z;S9N}5BYOmRkD zcJ^&f&p^lQWmh5je4(s?oW7Xv+>nrzs_Vs!++xrA5zz?wfR>JK2es76lQUp2U|vDH z*zw5P_0iPAg4@qqVRieMnF&VvG<)dYJ$rbJa_)q6gE=bcg(E(9AT&VCGw^B(UrucF zlP668Ai!tpQ6f|Ge+(ga`w&AaU~5I9Izs@n5-omv8UkZ6IrLe|9XotIA-~J1swV$z zpmfN#xU6Ma^Q?7pP?Bhr2FJczT2C_$ZJGkHX;?g|f1WjXVCvV4RxE4{X?6zq}Hy z)%JL|4CsWM=})R6^i+XmZ-GCOk`RjiSpHx`gmlfhMd*C&3bu<73n3|4`UCbOgxIYR5gt+4MO`)AOT)^`o0^!20SSqGiIN$>e%dqT}w4h~!!y*#7BHn5{A z1)%E#`q$2TRMBd@oSdt-?lWkz;cqBhDJWe1COn(tn0){X4Ohnc?8TvG+F5a+=z96` z8}eIL!Huf}R{GqLXh!mI4`HH2kI(w*jCy`GQXML-#zt7yrV%9JGEP>xfdGckC`|~D zh%nI86UYrhjfa}p#bp_#6Y>k-l>Nt#_Wkm3XL4{PZrZX9Ef5G`fcLDz!eRA8*#Cz5 z`j5`OT3lSj(nWMbMJvusZNqi9#_0Tc0YvsAM~=|v2rD354pcvdsJ)kGq&@SUpI-$` zSt!lk$H!|Sw_&%(#5to^(Y{Q^2>v%Z-r0|a3{(L7+3=a}^I<19Xi zzNhwxQrJLF(FX(F2bTSAi1$lOou3?LyQ3ZWyjV&!sc6P1kUOIE81dcZQ(1qsbU>ksoXn2g^kNXW2o_Yn2 z9h4a<_6meupux~ol`IuryB|{}52p3vMMh6s6fy{gJ@WHs?(Ix^{~rC4o?x+pgQ+B| z7Kh7&8EP)^iAzX;sMLW<`}(yI_$~}Et53U=JBAYd5G>y)$W|>Lon-?CKXSxeh8d4L zXeVMD+V%a70KBOvw)O*%gs z48#JDy&)AfHT8u~8;mlQH>0k@hfrWqci|jBA6}7%J$S+lFJ7!OO+$l+-QFE&s$pe4 zlh}y8(J`BMr=%AGQPzs*A808)ybDjCJV8@>M#c=O+Bq|9+Zg{pUI3m0`}U!+RT3?@ zYHBuUHAFi&Ni;=Z3=FIR!-Jqc_~#Fa+klqx-YEB+$VIk$9b56SQ(|Jmx_3bEp(I6F z0{qfzq6L&VIV?b6IS_agh!znZyBIYb3cdGwX`5qyqgl$x%?L9j)j2WU|S z&YzpW&Ok(@9bxx@hKqy40u-?G8`XUBh2XWxUhfZ+aQ|0=U}r=N=Wd{ zrcpK;`+|@UUcLo!9c4-1p9@AL)2~nb4S88vm@x$4uF}!D1$72ig_1N_y2rpz!dFNt zZyg4d;GThHy;s~A1#xSZbqCTKu7*m=BTdCnMA_M~4(&B=+_1m6LkfZMxR)?_r;ZoLJ)6d^75u>dH|^i|1hgSB18>d8?=|CAgz*t$7Z2EGu~Bbd(AYiOIw0R z@}fb+cXZ^~Y+0!75JmyXaMERG=8bjrwBNr|E`Ex5^27|f()TJwZMjT9Xat?~x0Ece z-oFB)j5vGlqUO4YfPkcAS5uQ?^{->m0$XTg&N35wws9fR*cv^8t;?;yS@jsDdB-4k z^m(#ajQN|P`uZ1A3PhiZ&f7xG&8G2{AGgDdA*-bHR&}>jWNlr2{g6X$Tt7KDP1wpY zMVZIkprE2Wk6aV;Wb4fA!FF_3d5q#Q=6ltq)f)GcB;N8%{Y}^Tv8B2!Cp_!vM9yQ} zxvmRc-hM2!Xk21Z<>vO$7!Tt;Pn-PaO=VS4Lv5|9mYJhZ@Y6@(_6uE~p~XTIc}MEi zVwYo^?VDPPks6XMbXyv%r30-htlJ{_dByRZV!<&?nE=-VnONt#nC>=`a9Q9VEa^VK zQ^s;#Jj6st$Momc4xi#)yLQn48XI9QA+9&4nR^^^{|vuhD!C_UeFSvC-O~@l!vly0 znb-FFth{tbvO(P~fRii;3pif}$Oh!M#oZf*@9kdxx7S4fthve(<;vs` z6QXIR7RG;c6m|7hHF6*`%axVM-;@7+?V5w5sLY$-GEN?DRrj!nl>udt@AP8~E(^cc zYRSbyA|l$M3wVBIGZLV!Ep2W6QMUEbS@!bs?zZJ8vw-n%a|!*JLQAvf(saU z1%*V_Gx{LOQRzc3XrB1q#;z9i9H12ln8d@XrT^8ZnIHA_^#ckCz=8cGjPsUpr#y^xyT!x|;_5W9o-yoShGw-5oB-iD0Ui z>3q$x>3^II!{XNdi`%`J32~ruk!$ha*jQ<+_l)3u^q~&lz76P(lCXN)vXpQiM8;xh@rECp!3aA0BCwp z=u$?TI3u;XLwT3a&g9xihh`&DSf|3 z_!p{f@xFz2y2fY1#ORB6loHlEze9$_>zj_*lDrnT0JKYNA0e9Yz}}f9WO{MNR6)Az z^uM1WBfE2pxzSQU{PnszTxlHw3cUY*{!+D)z=F6C^K?!9EA8K(-PzboDRWj+GYtbW z&_fD($y&cXPDUV%fIYKT!f6Dg*EjZkJ`bNf*%wo9d+KyzgC+6?L!@v_{lvpl`Tssa zR=ZUA=mb)g2z_11*XJd@M~@%hsHFclIg8ZGh5k(SPght^zSb}h+yCF6y!^TD`8E0F z%gK_rOQ-0mzFtOe3tnHSC#5pSfN-sZK4oN>Wwd>J@$UqhJ52phhDlZXu4TX-aMb~_ zzw^2NyP8ZN_XsS5`}XYmj2x`ng2EIQr^;DJ8TLO`ry;d%xha%WLLeR z7$ltsX&C(HKL-n$WlWab>c1=AF%DcDj{5Jh6gU4LK4Is7_RIgaBYXb8TyTsgc=6BJ zSm)25We4ie@d>#KOWpk{NkJYVO}CrVh{xy7G!&e$vpC6DFAl?NF3MR1ZpUhKFg9$5qe?E1(hTdF0-mRaOSlK!LC()_8T4#i{ZbTpdwTo*pPJ#O5>8(;aTz zTCe-NetHV~X@VbsqXYQ@IDs=0IMCD%-y&*hJWfP-_}W<9S~0Ny&E}FnxL(#3)??BnPJl_s;Edz zOWV!T^z9oO2M{PG3vfCMyvyPlwO_wRNxJ9ZXE<3#QE_{hGcX(2Mx+5~6>GDN>L}RB zrJqMcz*id4Y2RDyTU1m;h(!++YLo@y-(yX*t1`nefA)xwP&2YDijT4~-!aPXV8S48!(f|c)yBWc_c6L? zPoKU6c!vrMzWR$HY&kI~A~{qeP();1`|gkFHE4Sl$~Wwa92 zetve%hAx|wGy;U$N+WGQ)ET*DDoJ(lYzR@*b^bm2Q}Fz#I>9h>Jr4^T!i~fDV{Q&Y zv&=M2WV)fT@eDyVQixkrl$PZQ2!C``160Dhh?>857DYcAlHt>T!Eb&aT`HEAM?>!FSb!BB%LLAC3Ec+inGGD%A78C1$BL(A1 zE{)@(w33=|en|dh^edr+Qn0}ih2Gg$8UPLn&x0?-z#btS=H*q_)SSYgp$35#z$YX` zwPOb>!4#eXctxGNA*7%(1+v~tegbz+O&x;%KJ=*Ld=St$cKdJ^k{GyYPtOh92#Q2d z9NnLsLX1aN4bB@Gy^o6nDLRc#1C$$3A4yL8;|vxy78bA*w|)Ee0SqM?BZCca2@r}T zGWpY|NaNVCx)%~+@C87`1$+12FuM*9b6TpO^5CIE;D`o>hQvffKvPfF_*9v-cXZUF zsR!nH3_)?RDWpqs>DKmkR4{CCmB6%|nTf7OJi|;)t}sQPR^-x z!;9H&9li()zJquahzO7yFuH7PW>bA-tMa?0iIBZMI}A|%%{`}yX>pf288sU%m@1xxp%}u2&(mVSWBGM1|jgF1s{6RAvY) zITkpH#$n+8-MgCt%MP=8yomSzn=2QM-JKbv*xA?+WTd#^he1i|tZZ*T1!3H8=OM3+ z^BNjBDhEEdsyCYPF5!tN8a-J47T&vMFappn;CQgam*C~$A$d_51g}!UIZ(>rf^2{0 z4fOQfIsOImV^C1r3>R#9=aPQKfE7Z>0Akn(U=sCdiN6t6mnsKU7kmha(mX7CEL7CD zKu?9=(W-EtNQ;WL3+HzQv{X%&q-tQD@Ylj;k3)md0*HTs39Cd;1*&ZAWsY)Dzz zS7`9IUFffOVj1W1)_na)WF<=81cl-jS25Jk)X+vjf{B4t#)}2QU1Iyn@2aafa-$wPW&~ z?%yM2+Ol!95j&u{gv1(FDsnWAZJC7$<&>94u*ZSDdrNqa?z@j(43PNsDy5~Ri|)4p zRe$A1iw$+r`>R{?Qv`ea?!}=Ppj;6f=Cil$Jov4~!JggunAFNHvc=Juhu=23U0E;v zd+dkH^UKF^cR;o-;#m?e#WQye-NxQS*ap8$;u|2_@&5W^3trgl z%9V?Gj*2+U#`py=GIV0D1J{v%zzyu*ySD>pQB+90gxEY*AJUz6nWA7|A=F?N>H`cR zI7S3#9vwSzLi4Ytk}I6B<8*o3Dy6x)8{$S&(|HJB2s9WWY-b$$vtxV+M>jdR>gv)2 z$@hl`z{m$roT}xG!VdAYgVmJD@WQ}i}k<#b{FDrqoO)NE0HE} zdK#`S#04-X_&N9%C%ER2npa_hfH(1T{S8n^sJ8I}O(c%v?I642xV%Y2^p4}eE%XVI zUHtA%giG@qx+@WBfwz>ElyFt-#e39DbuVz{+6)i~!U5=d=x6B6INtLpaMgf~o&5kL zSTt$?gP|cAV*&47*At#EARZB_VYMqt)tE0uenkU8C3@#lQVLw=IDKVM0qpLqhm33q zo06?9H6l4m=)u( ztcbByR=$p|3sM7r$~^WTybIvV!P@`|bG>xj#EnCXGH@(`j*gI^palH1cfOzES65X< zm-%4I4>0utf`U^gy%zT?;cyb1T2@|O4p@TFw~VH5^4XIqU!d<;TUp`$Tapc15HXlT zVV8zqkwip%`Em&eBPScH7Xsehy>^|sHPJVCsY^Ko!zJ9$oqG%%pX-h>LU3BVsiV^j z;|OjK6ARlWR#VOlEV(evP*GEJ5c=R!MCUlYlt+G2(p6bm^3W-%<-lTNdlzWR54lkJO}SPfAoTTNu+;6NMGi&g4>^_!%+l+lm>N;KyG z=>s|Kx$T|H-;_f(T;D_c-vOv=|LfS(S&RRxx;GEYac$#&AB3lfCkiPlk&H!#A{tPJ zWC}|m6d_bXDHRDNWiFvf<|&FYG>DQ+6%tA_MQM`eVSgU$eSiD6_iz8Pk7FPEIQH(3 z^{(|w-OqjB*L9uecRK$YcA63TKmDEm_HqBmZ``kO8EhOpv+@49a|(V&;*5;a!|)Zp zK0Y$X!s6psQDWuho-cjOszUSxrIVl75qeEod;w1qJI`z_z<>7Q%#@v*H*ENxJ>qsk zf;&Vp71OuCFhUDC1Uau-`ydtDC_Uu-zov`RE>*b=Rk8*;xnE>U%rX8D8SOAEc z*Jgwn=;l+&6MEnZXR%k2mx8a3pf7(U{SzBICMUrg|Sv7 z&NQ7ca4Y+siJI2v(R6ku)QHK+DCWGA))dsC7!A+d2qP*C=N(5016K*XfDpI9L}Z8t z9P0&}u2_J&WXZYl>!ntNQu2wzxG3lVF3=pQM26+Z?d}^Z(-A}=&Ktw~#K8+ji=e@4 zAx)Z}kyt4S0mz@Q!y(DzcRhH#NWZJdkVcb077o~nU8gz+o z96kETp2=g!ir)j8*eO${IQvFMM$&?kiUZ?>Len)UoCYc+WHpE-S3;8Rwryh#g>3 zDbo!>vwor$gAt8!TLy!S+fWx_WgU#e&F?Qy7+leg_JRcaqSBvw?wudzV#LSRk+9D!h(yJA#7; zHJol2Q+aA?j~+g(u^s)GH@sd=Uc6BBEoarOVBbN5$G)#BZkLYEy)b0v-o;T{qT zp(n{|+?}w+*Z2n0E5K7DPh(6q5zSb)Tu*stHWGldU;pfP?+jyvPBc!|-A`B@jL)CV&em38AQV5A>Z


)LgTd4(()GvaJr)pYo_tzDsIf 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