[Terraform]re:Inventで発表されたサービスを早くもサポート #reinvent

2019.12.05

こんにちは、AWS事業本部の島川です。

Terraformがre:Invent期間中に発表されたいくつかのAWSサービスに対応していましたので、紹介します!

アップデートまとめ

AWS BranchConnect(VPC Ingress Routing)

サービス概要

[VPC Ingress Routing]IGWとVGWにルートテーブルをアタッチ!全ての通信をEC2経由へ。サードパーティIDS製品などの通信をシンプルに #reinvent

サンプルコード

resource "aws_route_table_association" "example" {
    gateway_id = aws_internet_gateway.example.id
    route_table_id = aws_route_table.example.id
}

Amazon EKS Managed Node Groups

こちらだけre:Inventの前の週くらいにアップデートが発表されたサービスです。

サービス概要

[アップデート] EKSがマネジメントコンソールおよびCLIでのワーカーノードの作成・管理をサポートしました

サンプルコード

resource "aws_iam_role" "example" {
  name = "eks-node-group-example"

  assume_role_policy = jsonencode({
    Statement = [{
      Action    = "sts:AssumeRole"
      Effect    = "Allow"
      Principal = {
        Service = "ec2.amazonaws.com"
      }
    }]
    Version = "2012-10-17"
  })
}

resource "aws_iam_role_policy_attachment" "example-AmazonEKSWorkerNodePolicy" {
  policy_arn = "arn:aws:iam::aws:policy/AmazonEKSWorkerNodePolicy"
  role       = aws_iam_role.example.name
}

resource "aws_iam_role_policy_attachment" "example-AmazonEKS_CNI_Policy" {
  policy_arn = "arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy"
  role       = aws_iam_role.example.name
}

resource "aws_iam_role_policy_attachment" "example-AmazonEC2ContainerRegistryReadOnly" {
  policy_arn = "arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryReadOnly"
  role       = aws_iam_role.example.name
}

# Example Subnets for EKS Node Group

data "aws_availability_zones" "available" {
  state = "available"
}

resource "aws_subnet" "example" {
  count = 3

  availability_zone = data.aws_availability_zones.available.names[count.index]
  cidr_block        = cidrsubnet(aws_vpc.example.cidr_block, 8, count.index)
  vpc_id            = aws_vpc.example.id

  tags = {
    "kubernetes.io/cluster/${aws_eks_cluster.example.name}" = "shared"
  }
}

# Example EKS Node Group

resource "aws_eks_node_group" "example" {
  cluster_name    = aws_eks_cluster.example.name
  node_group_name = "example"
  node_role_arn   = aws_iam_role.example.arn
  subnet_ids      = aws_subnet.example[*].id

  scaling_config {
    desired_size = 1
    max_size     = 1
    min_size     = 1
  }
}

Amazon EKS for AWS Fargate

サービス概要

[速報] Fargete for EKSがGAされました!!! #reinvent

サンプルコード

resource "aws_eks_fargate_profile" {
  cluster_name           = aws_eks_cluster.example.name           
  name                   = "example_fargate_profile"                   
  pod_execution_role_arn = aws_iam_role.example.arn 
  subnet_ids             = aws_subnet.example[*].id          
  tags = {
    TagKey1 = “TagValue1”
  }                   

  selectors { 
    labels = {
      LabelKey1 = “LabelValue1”
    }    
    namespace = "example-namespace" 
  }
}

AWS Lambda Provisioned Concurrency

サービス概要

[速報]コールドスタート対策のLambda定期実行とサヨナラ!! LambdaにProvisioned Concurrencyの設定が追加されました  #reinvent

サンプルコード

resource "aws_lambda_alias" "example" {
  function_name    = aws_lambda_function.example.function_name
  function_version = aws_lambda_function.example.version
  name             = "example"
}

resource "aws_lambda_provisioned_concurrency_config" "example" {
  function_name                     = aws_lambda_alias.example.function_name
  provisioned_concurrent_executions = 100
  qualifier                         = aws_lambda_alias.example.name
}

まとめ

対応力の速さにビックリです。今回の目玉アップデートの一つであるAmazon EKS for AWS Fargateに対応しているのには嬉しい方も多いのではないでしょうか。

参考URL

HashiCorp at re:Invent ‘19: Terraform Supports Newly Announced AWS Services