Skip to content

Commit

Permalink
All services should run in any region
Browse files Browse the repository at this point in the history
  • Loading branch information
adelaydeelsevier committed Jun 10, 2023
1 parent 5d61d6c commit 8fad25d
Show file tree
Hide file tree
Showing 17 changed files with 52 additions and 45 deletions.
24 changes: 12 additions & 12 deletions fabfile.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,7 @@


@task
def terraform(context, account_number="", contact="", distribution_bucket="terraform-deployments",
project_name="clams", region="", environment="nonprod", lambdas="yes",
def terraform(context, account_number="", contact="", product="clams", region="", environment="nonprod", lambdas="yes",
frontend="yes", flywayonly="no", database="yes", mode="plan"):
if mode not in ['init', 'plan', 'apply', 'destroy']:
print("No action to take. Try passing --mode init|plan|apply|destroy")
Expand All @@ -22,27 +21,27 @@ def terraform(context, account_number="", contact="", distribution_bucket="terra
if mode == 'apply' and lambdas == 'yes':
build_lambdas()

bucket = '{account_number}-{distribution_bucket}' \
.format(account_number=account_number, distribution_bucket=distribution_bucket)
bucket = '{account_number}-{region}-terraform-deployments' \
.format(account_number=account_number, region=region)

key = 'tfstate/{region}/{environment}-{project_name}.json' \
.format(region=region, environment=environment, project_name=project_name)
key = 'tfstate/{environment}/{product}.json' \
.format(environment=environment, product=product)

print("Remote state is {bucket}/{key}".format(bucket=bucket, key=key))

if mode == 'init':
terraform_init(bucket, key, 'us-east-1')
terraform_init(bucket, key, region)
exit(0)

command = 'terraform {mode} -input=false ' \
'-var "product={project_name}" -var "region={region}" ' \
'-var "contact={contact}" -var "distribution_bucket={distribution_bucket}" ' \
'-var "account_number={account_number}" -var "environment={environment}" --refresh=true' \
.format(mode=mode,
project_name=project_name,
project_name=product,
region=region,
contact=contact,
distribution_bucket=distribution_bucket,
distribution_bucket=bucket,
account_number=account_number,
environment=environment)

Expand Down Expand Up @@ -90,9 +89,10 @@ def build_lambdas():
def terraform_init(bucket, key, region):
remove_local_terraform_state_files_to_prevent_deploying_in_wrong_environment()
with do_in_directory('terraform'):
local('terraform init -backend-config="bucket={bucket}" -backend-config="key={key}" ' \
'-backend-config="region={region}"'
.format(bucket=bucket, key=key, region=region))
command = 'terraform init -backend-config="bucket={bucket}" -backend-config="key={key}" ' \
'-backend-config="region={region}"'.format(bucket=bucket, key=key, region=region)
print("Executing: ", command)
local(command)


def remove_local_terraform_state_files_to_prevent_deploying_in_wrong_environment():
Expand Down
3 changes: 2 additions & 1 deletion functions/attendee-writer/dynds/dynds.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,12 @@ import (
type DynamoDatastore struct {
Table string
Endpoint string
Region string
dbClient *dynamodb.Client
}

func (d *DynamoDatastore) Init() {
awsConfig := awscfg.GetAwsConfig(dynamodb.ServiceID, d.Endpoint)
awsConfig := awscfg.GetAwsConfig(dynamodb.ServiceID, d.Endpoint, d.Region)
d.dbClient = dynamodb.NewFromConfig(*awsConfig)
}

Expand Down
1 change: 1 addition & 0 deletions functions/attendee-writer/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ func main() {
ds := dynds.DynamoDatastore{
Table: os.Getenv("ATTENDEES_TABLE_NAME"),
Endpoint: os.Getenv("DYNAMO_ENDPOINT_OVERRIDE"),
Region: os.Getenv("AWS_REGION"),
}
ds.Init()

Expand Down
2 changes: 1 addition & 1 deletion functions/attendees-api/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import (
)

func main() {
awsConfig := awscfg.GetAwsConfig(dynamodb.ServiceID, os.Getenv("DYNAMO_ENDPOINT_OVERRIDE"))
awsConfig := awscfg.GetAwsConfig(dynamodb.ServiceID, os.Getenv("DYNAMO_ENDPOINT_OVERRIDE"), os.Getenv("AWS_REGION"))

lambdaHandler := handler.Handler{
AttendeesStore: &attendee.AttendeesStore{
Expand Down
4 changes: 2 additions & 2 deletions functions/authorizer/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -53,8 +53,8 @@ func mustDecodeBase64ToString(base64Encoded string) string {
}

func newSsmClient() *ssm.Client {
awscfg.GetAwsConfig(ssm.ServiceID, os.Getenv("SSM_ENDPOINT_OVERRIDE"))
return ssm.NewFromConfig(*awscfg.GetAwsConfig(ssm.ServiceID, os.Getenv("SSM_ENDPOINT_OVERRIDE")))
awscfg.GetAwsConfig(ssm.ServiceID, os.Getenv("SSM_ENDPOINT_OVERRIDE"), os.Getenv("AWS_REGION"))
return ssm.NewFromConfig(*awscfg.GetAwsConfig(ssm.ServiceID, os.Getenv("SSM_ENDPOINT_OVERRIDE"), os.Getenv("AWS_REGION")))
}

func getParameterValue(ssmClient *ssm.Client, parameterName string) string {
Expand Down
10 changes: 3 additions & 7 deletions functions/awscfg/aws_config.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,6 @@ import (
"github.com/aws/aws-sdk-go-v2/config"
)

const (
awsRegion = "us-east-1"
)

var loadDefaultConfig = config.LoadDefaultConfig

func awsConfigForBespokeServiceEndpoint(awsRegion string, awsService string, endpoint string) (*aws.Config, error) {
Expand All @@ -28,13 +24,13 @@ func awsConfigForBespokeServiceEndpoint(awsRegion string, awsService string, end
return &cfg, nil
}

func GetAwsConfig(id string, endpoint string) *aws.Config {
func GetAwsConfig(id string, endpoint string, region string) *aws.Config {
var awsConfig *aws.Config
if len(endpoint) == 0 {
cfg, _ := config.LoadDefaultConfig(context.Background(), config.WithRegion(awsRegion))
cfg, _ := config.LoadDefaultConfig(context.Background(), config.WithRegion(region))
awsConfig = &cfg
} else {
awsConfig, _ = awsConfigForBespokeServiceEndpoint(awsRegion, id, endpoint)
awsConfig, _ = awsConfigForBespokeServiceEndpoint(region, id, endpoint)
}
return awsConfig
}
6 changes: 3 additions & 3 deletions functions/awscfg/awscfg_test/awscfg_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,10 @@ import (

func TestShouldReturnDifferentConfigurationWhenDynamoDbEndpointIsOverridden(t *testing.T) {
// Given
defaultConfig := awscfg.GetAwsConfig("", "")
defaultConfig := awscfg.GetAwsConfig("", "", "")

// When
configWithEndpointOverride := awscfg.GetAwsConfig("", "some-overridden-dynamodb-endpoint")
configWithEndpointOverride := awscfg.GetAwsConfig("", "some-overridden-dynamodb-endpoint", "us-east-1")

// Then
assert.NotEqual(t, defaultConfig, configWithEndpointOverride)
Expand All @@ -21,7 +21,7 @@ func TestShouldReturnDifferentConfigurationWhenDynamoDbEndpointIsOverridden(t *t
func TestShouldReturnDefaultConfigurationWhenDynamoDbEndpointIsNotOverridden(t *testing.T) {
// Given
// When
configWithEndpointOverride := awscfg.GetAwsConfig("", "")
configWithEndpointOverride := awscfg.GetAwsConfig("", "", "us-east-1")

// Then
assert.NotNil(t, configWithEndpointOverride)
Expand Down
2 changes: 1 addition & 1 deletion functions/db-trigger/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ func main() {
dbConx := getDatabaseConnexion()
defer dbConx.Close()

awsConfig := awscfg.GetAwsConfig(sqs.ServiceID, os.Getenv("SQS_ENDPOINT_OVERRIDE"))
awsConfig := awscfg.GetAwsConfig(sqs.ServiceID, os.Getenv("SQS_ENDPOINT_OVERRIDE"), os.Getenv("AWS_REGION"))

lambdaHandler := handler{
dbConx: dbConx,
Expand Down
3 changes: 2 additions & 1 deletion functions/processor/dynds/dynds.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,12 @@ import (
type DynamoDatastore struct {
Table string
Endpoint string
Region string
dbClient *dynamodb.Client
}

func (d *DynamoDatastore) Init() {
awsConfig := awscfg.GetAwsConfig(dynamodb.ServiceID, d.Endpoint)
awsConfig := awscfg.GetAwsConfig(dynamodb.ServiceID, d.Endpoint, d.Region)
d.dbClient = dynamodb.NewFromConfig(*awsConfig)
}

Expand Down
1 change: 1 addition & 0 deletions functions/processor/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ func main() {
ds := dynds.DynamoDatastore{
Table: os.Getenv("WORKSHOP_SIGNUPS_TABLE_NAME"),
Endpoint: os.Getenv("DYNAMO_ENDPOINT_OVERRIDE"),
Region: os.Getenv("AWS_REGION"),
}
ds.Init()

Expand Down
3 changes: 2 additions & 1 deletion terraform/modules/lambda/attendee-api.tf
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ data "archive_file" "attendees_api_lambda_function_distribution" {
}

resource "aws_s3_object" "attendees_api_lambda_function_distribution_bucket_object" {
bucket = "${var.account_number}-${var.distribution_bucket}"
bucket = var.distribution_bucket
key = "lambdas/${var.product}-attendees-api/${var.product}-attendees-api.zip"
source = data.archive_file.attendees_api_lambda_function_distribution.output_path
etag = filemd5(data.archive_file.attendees_api_lambda_function_distribution.output_path)
Expand All @@ -78,6 +78,7 @@ resource "aws_lambda_function" "attendees_api_lambda_function" {
environment {
variables = {
ATTENDEES_TABLE_NAME = var.attendees_table_name
AWS_REGION = var.region
}
}

Expand Down
3 changes: 2 additions & 1 deletion terraform/modules/lambda/attendee-writer.tf
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ data "archive_file" "attendee_writer_lambda_function_distribution" {
}

resource "aws_s3_object" "attendee_writer_lambda_function_distribution_bucket_object" {
bucket = "${var.account_number}-${var.distribution_bucket}"
bucket = var.distribution_bucket
key = "lambdas/${var.product}-attendee-writer/${var.product}-attendee-writer.zip"
source = data.archive_file.attendee_writer_lambda_function_distribution.output_path
etag = filemd5(data.archive_file.attendee_writer_lambda_function_distribution.output_path)
Expand All @@ -41,6 +41,7 @@ resource "aws_lambda_function" "attendee_writer_lambda_function" {
environment {
variables = {
ATTENDEES_TABLE_NAME = var.attendees_table_name
AWS_REGION = var.region
}
}

Expand Down
3 changes: 2 additions & 1 deletion terraform/modules/lambda/authorizer.tf
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@
#}
#
#resource "aws_s3_object" "api_authorizer_lambda_function_distribution_s3_object" {
# bucket = "${var.environment}-${var.distribution_bucket}"
# bucket = "${var.environment}-${var.region}-${var.distribution_bucket}"
# key = "${var.product}-api/api-authorizer.zip"
# source = data.archive_file.api_authorizer_lambda_function_distribution.output_path
# etag = filemd5(data.archive_file.api_authorizer_lambda_function_distribution.output_path)
Expand All @@ -91,6 +91,7 @@
# environment {
# variables = {
# ENVIRONMENT = var.environment
# AWS_REGION = var.region
# }
# }
#
Expand Down
11 changes: 6 additions & 5 deletions terraform/modules/lambda/db-trigger.tf
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ data "archive_file" "db_trigger_lambda_function_distribution" {
}

resource "aws_s3_object" "db_trigger_lambda_function_distribution_bucket_object" {
bucket = "${var.account_number}-${var.distribution_bucket}"
bucket = var.distribution_bucket
key = "lambdas/${var.product}-db-trigger/${var.product}-db-trigger.zip"
source = data.archive_file.db_trigger_lambda_function_distribution.output_path
etag = filemd5(data.archive_file.db_trigger_lambda_function_distribution.output_path)
Expand All @@ -76,10 +76,11 @@ resource "aws_lambda_function" "db_trigger_lambda_function" {

environment {
variables = {
DB_HOST : var.db_host,
DB_NAME : var.db_name,
DB_USER : var.db_username,
DB_PASSWORD : var.db_password,
AWS_REGION = var.region
DB_HOST = var.db_host,
DB_NAME = var.db_name,
DB_USER = var.db_username,
DB_PASSWORD = var.db_password,
}
}

Expand Down
11 changes: 6 additions & 5 deletions terraform/modules/lambda/processor.tf
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ data "archive_file" "processor_lambda_function_distribution" {
}

resource "aws_s3_object" "processor_lambda_function_distribution_bucket_object" {
bucket = "${var.account_number}-${var.distribution_bucket}"
bucket = var.distribution_bucket
key = "lambdas/${var.product}-processor/${var.product}-processor.zip"
source = data.archive_file.processor_lambda_function_distribution.output_path
etag = filemd5(data.archive_file.processor_lambda_function_distribution.output_path)
Expand All @@ -88,10 +88,11 @@ resource "aws_lambda_function" "processor_lambda_function" {
environment {
variables = {
ATTENDEES_TABLE_NAME = var.attendees_table_name
DB_HOST : var.db_host,
DB_NAME : var.db_name,
DB_USER : var.db_username,
DB_PASSWORD : var.db_password,
AWS_REGION = var.region
DB_HOST = var.db_host,
DB_NAME = var.db_name,
DB_USER = var.db_username,
DB_PASSWORD = var.db_password,
}
}

Expand Down
2 changes: 1 addition & 1 deletion uploader/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ To build the uploader:
To test it use the _example-data.csv_ file. Note you'll need to provide AWS credentials sufficient to write to SQS:

```shell
% ./uploader -csv example-data.csv -sqs clams-nonprod-attendee-input-queue
% ./uploader -csv example-data.csv -sqs clams-nonprod-attendee-input-queue -region=eu-west-2
Reading from example-data.csv and writing to clams-nonprod-attendee-input-queue
Queued message # 1 : {123456 Cyder Punk [email protected] 29 0 04000000 01234 567 890 Fri 0 0 Milk allergy - but that's not a problem with vegan food :)}
Queued message # 2 : {612297 Rudy Jenkins [email protected] 40 0 00000000 07811671893 Fri 0 1 None}
Expand Down
8 changes: 5 additions & 3 deletions uploader/uploader.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,8 @@ type Message struct {
var csvFile = flag.String("csv", "", "input csv file name")
var sqsQueue = flag.String("sqs", "", "output sqs queue")

var region = flag.String("region", "", "aws region")

func main() {
flag.Parse()

Expand All @@ -50,7 +52,7 @@ func main() {
return
}

sqs, err := newSqsClient()
sqs, err := newSqsClient(*region)

fmt.Println("Reading from", *csvFile, "and writing to", *sqsQueue)
for row, record := range records {
Expand Down Expand Up @@ -89,8 +91,8 @@ type SqsClient struct {
sqsHandle *sqs.Client
}

func newSqsClient() (SqsClient, error) {
cfg, err := config.LoadDefaultConfig(context.Background(), config.WithRegion("us-east-1"))
func newSqsClient(region string) (SqsClient, error) {
cfg, err := config.LoadDefaultConfig(context.Background(), config.WithRegion(region))
if err != nil {
panic(err)
}
Expand Down

0 comments on commit 8fad25d

Please sign in to comment.