Интеграция AWS SAM CLI с Terraform: подробное руководство

В мире управления облачной инфраструктурой интерфейс командной строки AWS SAM (модель бессерверных приложений) и Terraform — это два мощных инструмента, которые обеспечивают возможности плавного развертывания и оркестрации. В то время как AWS SAM CLI ориентирован на разработку и развертывание бессерверных приложений, Terraform предлагает предоставление инфраструктуры и управление ею через нескольких поставщиков облачных услуг. В этой статье мы рассмотрим интеграцию AWS SAM CLI с Terraform и обсудим различные методы достижения этой интеграции с примерами кода.

Методы интеграции AWS SAM CLI и Terraform:

  1. Использование AWS SAM CLI и Terraform отдельно:

    • При таком подходе вы можете использовать интерфейс командной строки AWS SAM для упаковки и развертывания бессерверного приложения, а Terraform управляет ресурсами инфраструктуры, необходимыми для приложения.
  2. Использование Terraform для развертывания AWS SAM CLI:

    • Terraform можно использовать для автоматизации развертывания приложений AWS SAM CLI. Вы можете определить необходимые ресурсы AWS, такие как функции Lambda, шлюз API и роли IAM, с помощью файлов конфигурации Terraform.
  3. Использование интерфейса командной строки AWS SAM для развертывания Terraform:

    • Вы можете использовать интерфейс командной строки AWS SAM для развертывания ресурсов инфраструктуры, управляемых Terraform. AWS SAM CLI обеспечивает упрощенный способ развертывания и управления стеками AWS CloudFormation, который можно использовать для предоставления и управления инфраструктурой, созданной Terraform.

Примеры кода:
Метод 1: использование AWS SAM CLI и Terraform отдельно

# Deploy serverless application using AWS SAM CLI
sam package --template-file sam-template.yaml --output-template-file packaged-template.yaml --s3-bucket my-bucket
sam deploy --template-file packaged-template.yaml --stack-name my-stack --capabilities CAPABILITY_IAM
# Provision infrastructure resources using Terraform
terraform init
terraform plan
terraform apply

Метод 2. Использование Terraform для развертывания AWS SAM CLI

# Define AWS resources using Terraform
resource "aws_lambda_function" "my_function" {
  function_name = "my-function"
  role          = aws_iam_role.my_role.arn
  runtime       = "python3.8"
  handler       = "lambda_function.handler"
  filename      = "my-function.zip"
}
# Deploy AWS SAM CLI application using Terraform
resource "null_resource" "deploy_sam_app" {
  provisioner "local-exec" {
    command = "sam package --template-file sam-template.yaml --output-template-file packaged-template.yaml --s3-bucket my-bucket"
  }
  provisioner "local-exec" {
    command = "sam deploy --template-file packaged-template.yaml --stack-name my-stack --capabilities CAPABILITY_IAM"
  }
  depends_on = [aws_lambda_function.my_function]
}

Метод 3. Использование интерфейса командной строки AWS SAM для развертывания Terraform

# Provision infrastructure resources using Terraform
terraform init
terraform plan
terraform apply
# Deploy Terraform-managed infrastructure using AWS SAM CLI
sam deploy --template-file .terraform/terraform.tfstate --stack-name my-stack --capabilities CAPABILITY_IAM