Skip to content

EMR Deployment Instructions

The following steps enable Tecton to access your control plane account to manage AWS and Spark resources.

These instructions assume you are using EMR as the Spark provider. If you are using Databricks, please see the Databricks deployment instructions.

Terraform Templates

If your organization uses Terraform to manage AWS resources, you can build on our sample terraform setup repository in place of manually entering these values. This page may still be a valuable reference when adapting the template to your needs, especially the networking section. Once you've applied the configuration to your account, please see the request your installation step.

Before you get started:

  • Decide on a name for your deployment (e.g. mycompany-production), which will eventually turn into the url for your Tecton UI (mycompany-production.tecton.ai). Note: This name must be less than 22 characters.
  • Determine which AWS region you'd like Tecton deployed into (e.g. us-west-2).
  • Tecton will require the following tag to be attached to all security groups and subnets that it should have access to. Optionally you can can add this tag to roles, policies, and s3 buckets to track what is accessible to Tecton.
    key: tecton-accessible:DEPLOYMENT_NAME
    value: true
    

Create a Tecton S3 Bucket

Tecton will use a single S3 bucket to store all of your offline materialized feature data.

To configure the S3 bucket:

  1. Create an S3 bucket called tecton-[DEPLOYMENT_NAME] (e.g. tecton-mycompany-production).
  2. Ensure the bucket's region is the same as the region in which you'd like to deploy Tecton (e.g. us-west-2).
  3. Enable default encryption using the Amazon S3 key (SSE-S3).

Configure IAM roles

In this section we'll configure the roles and policies required for Tecton to manage S3, Dynamo, and Spark resources. After completing this section, you should have:

  1. A Spark role (tecton-{DEPLOYMENT_NAME}-spark-role) with the following policies

    • tecton-{DEPLOYMENT_NAME}-spark-policy
    • tecton-spark-scoped-secrets-policy
    • AmazonSSMManagedInstanceCore policy
  2. An EMR Manager(tecton-{DEPLOYMENT_NAME}-emr-manager-role) role with the following policies

    • tecton-{DEPLOYMENT_NAME}-spark-policy
    • tecton-emr-manager-policy
  3. A cross-account role (tecton-{DEPLOYMENT_NAME}-cross-account-role) with the following policies

    • tecton-cross-account-spark-policy
    • tecton-{DEPLOYMENT_NAME}-cross-account-policy

Configure the EMR Manager and Spark Roles

  1. In the AWS Console of the account you want to deploy Tecton into, go to the IAM service.
  2. Click the Policies tab in the sidebar.
  3. Create the Tecton Spark Policy

    1. Click Create Policy.

    2. Paste in the following JSON policy, replacing ${REGION} with the AWS region you selected for your deployment, ${ACCOUNT_ID} with the account ID of your Tecton Data Plane account, and ${DEPLOYMENT_NAME} with your Tecton deployment name

      {
          "Version": "2012-10-17",
          "Statement": [
              {
                  "Sid": "DynamoDB",
                  "Effect": "Allow",
                  "Action": [
                      "dynamodb:ConditionCheckItem",
                      "dynamodb:DescribeTable",
                      "dynamodb:PutItem"
                  ],
                  "Resource": [
                      "arn:aws:dynamodb:${REGION}:${ACCOUNT_ID}:table/tecton-${DEPLOYMENT_NAME}*"
                  ]
              },
              {
                  "Sid": "DynamoDBGlobal",
                  "Effect": "Allow",
                  "Action": [
                      "dynamodb:ListTables"
                  ],
                  "Resource": "*"
              },
              {
                  "Sid": "S3Bucket",
                  "Effect": "Allow",
                  "Action": "s3:ListBucket",
                  "Resource": [
                      "arn:aws:s3:::tecton-${DEPLOYMENT_NAME}",
                      "arn:aws:s3:::tecton.ai.databricks-init-scripts",
                      "arn:aws:s3:::tecton.ai.public",
                      "arn:aws:s3:::tecton-materialization-release"
                  ]
              },
              {
                  "Sid": "S3Object",
                  "Effect": "Allow",
                  "Action": [
                      "s3:GetObject",
              "s3:PutObject",
                      "s3:DeleteObject"
                  ],
                  "Resource": [
                      "arn:aws:s3:::tecton-${DEPLOYMENT_NAME}/*"
                  ]
              },
          {
                  "Sid": "TectonPublicS3",
                  "Effect": "Allow",
                  "Action": [
                      "s3:GetObject"
                  ],
                  "Resource": [
                      "arn:aws:s3:::tecton.ai.databricks-init-scripts/*",
                      "arn:aws:s3:::tecton.ai.public/*",
                      "arn:aws:s3:::tecton-materialization-release/*"
                  ]
              }
          ]
      }
      
    3. Click Next: Tags

    4. Click Next: Review

    5. Give the policy an easy to remember name starting with tecton-, like tecton-{DEPLOYMENT_NAME}-spark-policy

  4. Create the Tecton EMR Manager policy

    1. Click Create Policy.

    2. Paste in the following JSON policy, replacing ${SPARK_ROLE} with the name you plan to use for the role (such as tecton-{DEPLOYMENT_NAME}-spark-role), and ${DEPLOYMENT_NAME} with your Tecton deployment name

      {
          "Version": "2012-10-17",
          "Statement": [
              {
                  "Sid": "CreateInTaggedNetwork1",
                  "Effect": "Allow",
                  "Action": [
                      "ec2:CreateNetworkInterface",
                      "ec2:RunInstances",
                      "ec2:CreateFleet",
                      "ec2:CreateLaunchTemplate",
                      "ec2:CreateLaunchTemplateVersion"
                  ],
                  "Resource": [
                      "arn:aws:ec2:*:*:security-group/*"
                  ],
                  "Condition": {
                      "StringEquals": {
                          "aws:ResourceTag/tecton-accessible:${DEPLOYMENT_NAME}": "true"
                      }
                  }
              },
              {
                  "Sid": "CreateInTaggedNetwork2",
                  "Effect": "Allow",
                  "Action": [
                      "ec2:CreateNetworkInterface",
                      "ec2:RunInstances",
                      "ec2:CreateFleet",
                      "ec2:CreateLaunchTemplate",
                      "ec2:CreateLaunchTemplateVersion"
                  ],
                  "Resource": [
                      "arn:aws:ec2:*:*:subnet/*"
                  ],
                  "Condition": {
                      "StringEquals": {
                          "aws:ResourceTag/tecton-accessible:${DEPLOYMENT_NAME}": "true"
                      }
                  }
              },
              {
                  "Sid": "CreateWithEMRTaggedLaunchTemplate",
                  "Effect": "Allow",
                  "Action": [
                      "ec2:CreateFleet",
                      "ec2:RunInstances",
                      "ec2:CreateLaunchTemplateVersion"
                  ],
                  "Resource": "arn:aws:ec2:*:*:launch-template/*",
                  "Condition": {
                      "StringEquals": {
                          "aws:ResourceTag/tecton-accessible:${DEPLOYMENT_NAME}": "true"
                      }
                  }
              },
              {
                  "Sid": "CreateEMRTaggedLaunchTemplate",
                  "Effect": "Allow",
                  "Action": "ec2:CreateLaunchTemplate",
                  "Resource": "arn:aws:ec2:*:*:launch-template/*",
                  "Condition": {
                      "StringEquals": {
                          "aws:RequestTag/tecton-accessible:${DEPLOYMENT_NAME}": "true"
                      }
                  }
              },
              {
                  "Sid": "CreateEMRTaggedInstancesAndVolumes",
                  "Effect": "Allow",
                  "Action": [
                      "ec2:RunInstances",
                      "ec2:CreateFleet"
                  ],
                  "Resource": [
                      "arn:aws:ec2:*:*:instance/*",
                      "arn:aws:ec2:*:*:volume/*",
                      "arn:aws:ec2:*:*:fleet/*"
                  ],
                  "Condition": {
                      "StringEquals": {
                          "aws:RequestTag/tecton-accessible:${DEPLOYMENT_NAME}": "true"
                      }
                  }
              },
              {
                  "Sid": "ResourcesToLaunchEC2",
                  "Effect": "Allow",
                  "Action": [
                      "ec2:RunInstances",
                      "ec2:CreateFleet",
                      "ec2:CreateLaunchTemplate",
                      "ec2:CreateLaunchTemplateVersion"
                  ],
                  "Resource": [
                      "arn:aws:ec2:*:*:network-interface/*",
                      "arn:aws:ec2:*::image/ami-*"
                  ]
              },
              {
                  "Sid": "ManageEMRTaggedResources",
                  "Effect": "Allow",
                  "Action": [
                      "ec2:CreateLaunchTemplateVersion",
                      "ec2:DeleteLaunchTemplate",
                      "ec2:DeleteNetworkInterface",
                      "ec2:ModifyInstanceAttribute",
                      "ec2:TerminateInstances"
                  ],
                  "Resource": "*",
                  "Condition": {
                      "StringEquals": {
                          "aws:ResourceTag/tecton-accessible:${DEPLOYMENT_NAME}": "true"
                      }
                  }
              },
              {
                  "Sid": "ManageTagsOnEMRTaggedResources",
                  "Effect": "Allow",
                  "Action": [
                      "ec2:CreateTags",
                      "ec2:DeleteTags"
                  ],
                  "Resource": [
                      "arn:aws:ec2:*:*:instance/*",
                      "arn:aws:ec2:*:*:volume/*",
                      "arn:aws:ec2:*:*:network-interface/*",
                      "arn:aws:ec2:*:*:launch-template/*"
                  ],
                  "Condition": {
                      "StringEquals": {
                          "aws:ResourceTag/tecton-accessible:${DEPLOYMENT_NAME}": "true"
                      }
                  }
              },
              {
                  "Sid": "CreateNetworkInterfaceNeededForPrivateSubnet",
                  "Effect": "Allow",
                  "Action": [
                      "ec2:CreateNetworkInterface"
                  ],
                  "Resource": [
                      "arn:aws:ec2:*:*:network-interface/*"
                  ],
                  "Condition": {
                      "StringEquals": {
                          "aws:RequestTag/tecton-accessible:${DEPLOYMENT_NAME}": "true"
                      }
                  }
              },
              {
                  "Sid": "TagOnCreateTaggedEMRResources",
                  "Effect": "Allow",
                  "Action": [
                      "ec2:CreateTags"
                  ],
                  "Resource": [
                      "arn:aws:ec2:*:*:network-interface/*",
                      "arn:aws:ec2:*:*:instance/*",
                      "arn:aws:ec2:*:*:volume/*",
                      "arn:aws:ec2:*:*:launch-template/*"
                  ],
                  "Condition": {
                      "StringEquals": {
                          "ec2:CreateAction": [
                              "RunInstances",
                              "CreateFleet",
                              "CreateLaunchTemplate",
                              "CreateNetworkInterface"
                          ]
                      }
                  }
              },
              {
                  "Sid": "ListActionsForEC2Resources",
                  "Effect": "Allow",
                  "Action": [
                      "ec2:DescribeAccountAttributes",
                      "ec2:DescribeCapacityReservations",
                      "ec2:DescribeDhcpOptions",
                      "ec2:DescribeInstances",
                      "ec2:DescribeLaunchTemplates",
                      "ec2:DescribeNetworkAcls",
                      "ec2:DescribeNetworkInterfaces",
                      "ec2:DescribePlacementGroups",
                      "ec2:DescribeRouteTables",
                      "ec2:DescribeSecurityGroups",
                      "ec2:DescribeSubnets",
                      "ec2:DescribeVolumes",
                      "ec2:DescribeVolumeStatus",
                      "ec2:DescribeVpcAttribute",
                      "ec2:DescribeVpcEndpoints",
                      "ec2:DescribeVpcs"
                  ],
                  "Resource": "*"
              },
              {
                  "Sid": "ManageSecurityGroups",
                  "Effect": "Allow",
                  "Action": [
                      "ec2:AuthorizeSecurityGroupEgress",
                      "ec2:AuthorizeSecurityGroupIngress",
                      "ec2:RevokeSecurityGroupEgress",
                      "ec2:RevokeSecurityGroupIngress"
                  ],
                  "Resource": "*",
                  "Condition": {
                      "StringEquals": {
                          "aws:ResourceTag/tecton-accessible:${DEPLOYMENT_NAME}": "true"
                      }
                  }
              },
              {
                  "Sid": "PassRoleForEC2",
                  "Effect": "Allow",
                  "Action": "iam:PassRole",
                  "Resource": "arn:aws:iam::*:role/${SPARK_ROLE}",
                  "Condition": {
                      "StringLike": {
                          "iam:PassedToService": "ec2.amazonaws.com*"
                      }
                  }
              }
          ]
      }
      
    3. Click Next: Tags

    4. Click Next: Review

    5. Give the policy an easy to remember name starting with tecton-, like tecton-emr-manager-policy

    6. Click Create Policy

  5. Create the Tecton Spark Scoped Secrets policy

    1. Click Create Policy.

    2. Paste in the following JSON policy, replacing ${ACCOUNT_ID} with the account ID of your AWS account, and ${DEPLOYMENT_NAME} with your Tecton deployment name

      {
          "Version": "2012-10-17",
          "Statement": [
              {
                  "Sid": "AccessTectonScopedSecrets",
                  "Effect": "Allow",
                  "Action": "secretsmanager:GetSecretValue",
                  "Resource": "arn:aws:secretsmanager:*:${ACCOUNT_ID}:secret:tecton-${DEPLOYMENT_NAME}/*"
              }
          ]
      }
      
    3. Click Next: Tags

    4. Click Next: Review

    5. Give the policy an easy to remember name starting with tecton-, like tecton-spark-scoped-secrets-policy

    6. Click Create Policy

  6. Click the Roles tab in the sidebar.

  7. Create the Spark Role

    1. Click Create role.

    2. Select EC2 under Common Use Cases

    3. Click the Next: Permissions button

    4. Attach the Tecton Spark Policy by searching for the policy you created earlier, such as tecton-spark-policy, and click the check box next to that policy to attach the policy to the new role.

    5. Attach the Tecton Spark Scoped Secrets Policy by searching for the policy you created earlier, such as tecton-spark-scoped-secrets-policy, and click the check box next to that policy to attach the policy to the new role.

    6. Attach the AmazonSSMManagedInstanceCore policy by searching for the AmazonSSMManagedInstanceCore policy, and click the check box next to the policy to attach the policy to the new role.

    7. Click the Next: Tags button.

    8. Click the Next: Review button.

    9. In the Role name field, enter a role name starting with tecton-, such as tecton-{DEPLOYMENT_NAME}-spark-role.

    10. Click Create role. You will see a list of roles displayed.

    11. Ensure that the role has an Instance Profile associated with it, and that the Instance Profile has the same name as the role. If you created this role through the console, the Instance Profile should have been created automatically.

  8. Create the EMR Manager role

    1. Click Create role.

    2. Select EMR under Use Cases

    3. At the bottom of the page, select the default EMR role.

    4. Click the Next: Permissions button

    5. Search for the Tecton Spark policy you created earlier, such as tecton-spark-policy, and click the check box next to that policy to attach the policy to the new role.

    6. Search for the Tecton EMR Manager policy you created earlier, such as tecton-emr-manager-policy, and click the check box next to that policy to attach the policy to the new role.

    7. Click the Next: Tags button.

    8. Click the Next: Review button.

    9. In the Role name field, enter a role name starting with tecton-, such as tecton-{DEPLOYMENT_NAME}-emr-manager-role.

    10. Click Create role. You will see a list of roles displayed.

Configure the cross-account role for the Tecton Control Plane

  1. In the AWS Console of the account you want to deploy Tecton into, go to the IAM service.
  2. Click the Policies tab in the sidebar.
  3. Create the cross-account Spark policy

    1. Click Create Policy.

    2. Paste in the following JSON policy, replacing ${SPARK_ROLE} with the same role name you used previously (such as tecton-{DEPLOYMENT_NAME}-spark-role), ${EMR_MANAGER_ROLE} with the name you plan to use for the role (such as tecton-{DEPLOYMENT_NAME}-emr-manager-role), ${REGION} with the AWS region you selected for your deployment, ${ACCOUNT_ID} with the account ID of your Tecton Data Plane account, and ${DEPLOYMENT_NAME} with your Tecton deployment name

      {
          "Version": "2012-10-17",
          "Statement": [
              {
                  "Sid": "CreateEmrServiceLinkedRole",
                  "Effect": "Allow",
                  "Action": [
                      "iam:CreateServiceLinkedRole"
                  ],
                  "Resource": "arn:aws:iam::*:role/aws-service-role/elasticmapreduce.amazonaws.com/AWSServiceRoleForEMRCleanup*",
                  "Condition": {
                      "StringLike": {
                          "iam:AWSServiceName": [
                              "elasticmapreduce.amazonaws.com"
                          ]
                      }
                  }
              },
              {
                  "Sid": "EmrPutRolePolicyForServiceLinkedRole",
                  "Effect": "Allow",
                  "Action": [
                      "iam:AttachRolePolicy",
                      "iam:PutRolePolicy"
                  ],
                  "Resource": "arn:aws:iam::*:role/aws-service-role/elasticmapreduce.amazonaws.com/AWSServiceRoleForEMRCleanup*"
              },
              {
                  "Sid": "Ec2Global",
                  "Effect": "Allow",
                  "Action": [
                      "ec2:DescribeInstanceTypeOfferings",
                      "ec2:DescribeSubnets",
                      "ec2:DescribeInstances",
                      "ec2:DescribeSecurityGroups"
                  ],
                  "Resource": "*"
              },
              {
                  "Sid": "EmrGlobal",
                  "Effect": "Allow",
                  "Action": [
                      "elasticmapreduce:ListClusters",
                      "elasticmapreduce:ListInstances"
                  ],
                  "Resource": "*"
              },
              {
                  "Sid": "EmrResourceTag",
                  "Effect": "Allow",
                  "Action": [
                      "ec2:Describe*",
                      "elasticmapreduce:DescribeCluster",
                      "elasticmapreduce:ListSteps",
                      "elasticmapreduce:ListBootstrapActions",
                      "elasticmapreduce:TerminateJobFlows",
                      "ssm:StartSession"
                  ],
                  "Resource": "*",
                  "Condition": {
                      "StringEquals": {
                          "aws:ResourceTag/tecton-accessible:${DEPLOYMENT_NAME}": "true"
                      }
                  }
              },
              {
                  "Sid": "EmrRequestTag",
                  "Effect": "Allow",
                  "Action": "elasticmapreduce:RunJobFlow",
                  "Resource": "*",
                  "Condition": {
                      "StringEquals": {
                          "aws:ResourceTag/tecton-accessible:${DEPLOYMENT_NAME}": "true"
                      }
                  }
              },
              {
                  "Sid": "PassRoleForEMR",
                  "Effect": "Allow",
                  "Action": "iam:PassRole",
                  "Resource": "arn:aws:iam::${ACCOUNT_ID}:role/${EMR_MASTER_ROLE}",
                  "Condition": {
                      "StringEquals": {
                          "iam:PassedToService": [
                              "elasticmapreduce.amazonaws.com"
                          ]
                      }
                  }
              },
              {
                  "Sid": "PassRoleForEC2",
                  "Effect": "Allow",
                  "Action": "iam:PassRole",
                  "Resource": "arn:aws:iam::${ACCOUNT_ID}:role/${SPARK_ROLE}",
                  "Condition": {
                      "StringEquals": {
                          "iam:PassedToService": [
                              "ec2.amazonaws.com"
                          ]
                      }
                  }
              },
              {
                  "Sid": "SSMForControlPlaneToConnectToTectonEMRCluster",
                  "Effect": "Allow",
                  "Action": "ssm:StartSession",
                  "Resource": "arn:aws:ssm:${REGION}::document/AWS-StartPortForwardingSession"
              }
          ]
      }
      
    3. Click Next: Tags

    4. Click Next: Review

    5. Give the policy an easy to remember name, like tecton-cross-account-spark-policy

    6. Click Create Policy

  4. Create the cross-account policy

    1. Click Create Policy.

    2. Paste in the following JSON policy, replacing ${REGION} with the AWS region you selected for your deployment, ${ACCOUNT} with the account ID of your AWS account, ${DEPLOYMENT_NAME} with your Tecton deployment name, and ${SPARK_ROLE} with the name of your spark role, such as tecton-{DEPLOYMENT_NAME}-spark-role.

      {
          "Version": "2012-10-17",
          "Statement": [
              {
                  "Sid": "DynamoDB",
                  "Effect": "Allow",
                  "Action": [
                      "dynamodb:BatchGetItem",
                      "dynamodb:BatchWriteItem",
                      "dynamodb:ConditionCheckItem",
                      "dynamodb:CreateTable",
                      "dynamodb:DeleteItem",
                      "dynamodb:DeleteTable",
                      "dynamodb:DescribeTable",
                      "dynamodb:GetItem",
                      "dynamodb:PutItem",
                      "dynamodb:Query",
                      "dynamodb:TagResource",
                      "dynamodb:UpdateTable"
                  ],
                  "Resource": [
                      "arn:aws:dynamodb:${REGION}:${ACCOUNT_ID}:table/tecton-${DEPLOYMENT_NAME}*"
                  ]
              },
              {
                  "Sid": "DynamoDBGlobal",
                  "Effect": "Allow",
                  "Action": [
                      "dynamodb:ListTables",
                      "dynamodb:DescribeLimits"
                  ],
                  "Resource": "*"
              },
              {
                  "Sid": "S3Bucket",
                  "Effect": "Allow",
                  "Action": "s3:ListBucket",
                  "Resource": [
                      "arn:aws:s3:::tecton-${DEPLOYMENT_NAME}"
                  ]
              },
              {
                  "Sid": "S3Object",
                  "Effect": "Allow",
                  "Action": [
                      "s3:GetObject",
                      "s3:DeleteObject",
                      "s3:PutObject"
                  ],
                  "Resource": [
                      "arn:aws:s3:::tecton-${DEPLOYMENT_NAME}/*"
                  ]
              },
              {
                  "Sid": "VerifyPermissions",
                  "Effect": "Allow",
                  "Action": [
                      "iam:GetPolicy",
                      "iam:GetRole",
                      "iam:GetRolePolicy",
                      "iam:GetPolicyVersion",
                      "iam:ListPolicyVersions",
                      "iam:ListAttachedRolePolicies",
                      "iam:ListInstanceProfilesForRole"
                  ],
                  "Resource": [
                      "arn:aws:iam::${ACCOUNT_ID}:role/${SPARK_ROLE}",
                      "arn:aws:iam::${ACCOUNT_ID}:policy/tecton-*",
                      "arn:aws:iam::${ACCOUNT_ID}:role/tecton-*"
                  ]
              }
          ]
      }
      
    3. Click Next: Tags

    4. Click Next: Review

    5. Give the policy an easy to remember name starting with tecton-, like tecton-{DEPLOYMENT_NAME}-cross-account-policy

    6. Click Create Policy

  5. Create the cross-account role

    1. Click the Roles tab in the sidebar.

    2. Click Create role.

    3. Under Select type of trusted entity, click the Another AWS account tile.

    assets/admin-guide/create-role.png

    1. Specify the Tecton Account ID. Please contact your account executive obtain the correct account ID for you.

    2. Enable the option "Require external ID."

    3. Enter a random External ID of your choice (for example, a UUID works well). Make sure to note down the external ID that you choose -- you'll need to provide this to Tecton to complete the installation.

    4. Click the Next: Permissions button

    5. Search for the policy you created (e.g. tecton-{DEPLOYMENT_NAME}-cross-account-policy), and click the check box next to that policy to attach the policy to the new role.

    6. Search for the cross-account Spark policy you created (e.g. tecton-cross-account-spark-policy), and click the check box next to that policy to attach the policy to the new role.

    7. Click the Next: Tags button.

    8. Click the Next: Review button.

    9. In the Role name field, enter a role name starting with tecton-, such as tecton-{DEPLOYMENT_NAME}-cross-account-role.

    10. Click Create role. You will see a list of roles displayed.

Configure networking

Tecton will need a VPC and subnets to use when creating EMR clusters -- these can be existing resources or you can create them for Tecton. Either way, make sure to tag the resources with the tecton-accessible:DEPLOYMENT_NAME tag.

Configure the VPC and subnet

  1. Add the following tag to the VPC:
    key: tecton-accessible:DEPLOYMENT_NAME
    value: true
    
  2. You'll need a private subnet in each of the availability zones you intend for Tecton to use (at least 2 AZs)
    • Ensure the route table for each of the subnets allows internet access on 0.0.0.0/0. You can accomplish this using NAT Gateways.
  3. Add the follow tag to each subnet:
    key: tecton-accessible:DEPLOYMENT_NAME
    value: true
    

Configure security groups

You'll need to set up two security groups that allow the EMR clusters that Tecton creates to:

  • Communicate internally
  • Connect to other AWS resources
  • Externally pull configuration
  • Install Python packages
  • Push metrics for monitoring and alerts

To do so, complete the following steps:

  1. Navigate to the "Security Groups" service in the AWS console
  2. Click "Create security group"
  3. Name the first security group tecton-emr-security-group, and give it a description (e.g. "A security group that EMR clusters created by Tecton will use to communicate internally")
  4. Ensure the VPC you selected in the previous step is selected here.
  5. Add the following tags to the security group:
    key: tecton-accessible:DEPLOYMENT_NAME
    value: true
    
    key: tecton-security-group-emr-usage
    value: manager,core&task
    
  6. Click "Create Security Group"
  7. Name the second security group tecton-service-emr-security-group, and give it a description (e.g. "A security group that EMR clusters created by Tecton will use to communicate with EMR services")
  8. Ensure the VPC you selected in the previous step is selected here.
  9. Add the following tags to the security group:
    key: tecton-accessible:DEPLOYMENT_NAME
    value: true
    
    key: tecton-security-group-emr-usage
    value: service-access
    
  10. Click "Create Security Group"
  11. Add the following inbound rules to tecton-emr-security-group
    1. Allow "All TCP" from tecton-emr-security-group
    2. Allow "Custom TCP" on port 8443 from tecton-service-emr-security-group
  12. Add the following outbound rules to tecton-emr-security-group
    1. Allow "All Traffic" to destination 0.0.0.0/0
  13. Add the following inbound rules to tecton-service-emr-security-group
    1. Allow "Custom TCP" on port 9443 from tecton-emr-security-group
  14. Add the following outbound rules to tecton-service-emr-security-group
    1. Allow "Custom TCP" on port 8443 to tecton-emr-security-group

Request your Tecton Installation

Once you've completed the above setup, you're ready to request your installation! Send the following information to the Tecton team:

  • Your deployment name (e.g. mycompany-production)
  • The region in which you'd like Tecton deployed (e.g. us-west-2)
  • The ARN and External ID of the Tecton cross-account role (tecton-{DEPLOYMENT_NAME}-cross-account-role)
  • The ARN of the Spark role (tecton-{DEPLOYMENT_NAME}-spark-role) and the matching Instance Profile
  • The ARN of the EMR Manager role (tecton-{DEPLOYMENT_NAME}-emr-manager-role)

After you send this information to Tecton, the team will deploy Tecton into your account.