million customers in 51 countries with 145,000 employees • The origin of AXA was an insurance company founded in 1817 in Normandy, Ancienne Mutuelle de Rouen, which was rebranded to AXA in 1985 • AXA entered Japan in 1994, and expanded by acquisition of Nichidan, established in 1934 • AXA acquired XL Group in 2018 to create the #1 global P&C commercial lines insurance platform S&P Rating AA- ※Figures are actual results for AXA Group in 2024, Ratings are as of February 25, 2025 About AXA Asset Under Management Revenues €110bn Underlying Earnings €8.1bn €879bn
Key Indicators AXA Life Insurance AXA General Insurance AXA Holdings Japan 7.12Mn Number of Policies 8,980 Employees 839.8Bn Premiums (3Q,2024) AXA Group in Japan
10,000 Lines in a Single CloudFormation Template ◦ Manual operations are required from code changes to deployment ◦ AWS and Databricks use different IaC tools • What we wanted to solve ◦ Split the FAT template to make development easier ◦ Automate from code changes to deployment to improve development productivity ◦ Manage AWS and Databricks with a common IaC tool
due to manual changes ◦ Databricks was deployed without an IaC tool Without IaC, updates risk overwriting changes without detecting differences ◦ Many manually created Lambda packages are approaching EOL • What we wanted to solve ◦ Eliminate differences between code and deployed resources ◦ Difference detection and safe deployment with IaC tool ◦ Automate package creation and make the version up easier
"build_lambda_package" { for_each = local.lambda-inputs # build only if lambda_version is updated triggers_replace [ each.value.lambda_version ] provisioner "local-exec" { # Default build command is zip operation.This can be overwrite by BuildCommand in lambda.yaml. BuildCommand will be used for requirements.txt installation.. lambda layer creation etc. command = <<-EOF cd ../../${each.value.code_dir_path} && ${each.value.build_command} EOF on_failure = fail } } Triggers execute only on config version tag changes Create Lambda packages(zip) Processing input with a loop
"lambda_function" { for_each = local.lambda-inputs depends_on = [ null_resource.upload_lambda_package, aws_lambda_layer_version.lambda_layer ] function_name = each.value.function_name s3_key = "lambda_build_packages/${each.value.function_name}/${each.value.package_name}_${each.value.lambda_version}.zip" dynamic "vpc_config" { for_each = { for key, val in each.value : key => val if key == "vpc_config" && val != null } content { security_group_ids = vpc_config.value.SecurityGroupIds subnet_ids = vpc_config.value.SubnetIds } } lifecycle { ignore_changes = [ last_modified, tags, tags_all ] } Specify the version tag in the S3_key, deploy only when it changes Exclude tags managed by the audit team Dynamically generate blocks based on the configuration file parameters
in-place ~ resource "aws_lambda_function" "lambda_function" { id = "sample_1" tags = {} ~ timeout = 900 -> 3 # (28 unchanged attributes hidden) # (3 unchanged blocks hidden) } Plan: 0 to add, 1 to change, 0 to destroy. If resources have changed manually, differences can be detected with terraform plan including default value
"s3" { bucket = "terraform-state" key = "terraform.tfstate" use_lockfile = true dynamodb_table = "state-lock-table" } } DynamoDB is no longer need from v1.10 and this aligns with our organizations policy - terraform force-unlock <LOCK_ID> Manually unlock the state file State locking prevents conflicts by allowing only one operation to modify the state file at a time
forcibly delete Event Bridge Rules ▪ https://github.com/hashicorp/terraform-provider-aws/pull/34905 • terraform-provider-databricks ◦ Sort based on the Task Key specified in the 'Depends On' field ▪ https://github.com/databricks/terraform-provider-databricks/pull/3000 ▪ https://github.com/databricks/terraform-provider-databricks/pull/3183 ◦ Fix sql table column type upper and lower mismatch error ▪ https://github.com/databricks/terraform-provider-databricks/pull/3501 ◦ Added an item to check if the ticket opener wants to do a bug fix ▪ https://github.com/databricks/terraform-provider-databricks/pull/3020
Terraform provided the following benefits: ◦ Improved development productivity through automation and standardization of IaC tools ◦ Resolve operational issues by automating processes and using Terraform features ◦ Terraform now enables us to quickly and safely manage manually created resources • AXA uses Terraform to keep delivering value and contribute to the Terraform community