В мире управления облачной инфраструктурой интерфейс командной строки AWS SAM (модель бессерверных приложений) и Terraform — это два мощных инструмента, которые обеспечивают возможности плавного развертывания и оркестрации. В то время как AWS SAM CLI ориентирован на разработку и развертывание бессерверных приложений, Terraform предлагает предоставление инфраструктуры и управление ею через нескольких поставщиков облачных услуг. В этой статье мы рассмотрим интеграцию AWS SAM CLI с Terraform и обсудим различные методы достижения этой интеграции с примерами кода.
Методы интеграции AWS SAM CLI и Terraform:
-
Использование AWS SAM CLI и Terraform отдельно:
- При таком подходе вы можете использовать интерфейс командной строки AWS SAM для упаковки и развертывания бессерверного приложения, а Terraform управляет ресурсами инфраструктуры, необходимыми для приложения.
-
Использование Terraform для развертывания AWS SAM CLI:
- Terraform можно использовать для автоматизации развертывания приложений AWS SAM CLI. Вы можете определить необходимые ресурсы AWS, такие как функции Lambda, шлюз API и роли IAM, с помощью файлов конфигурации Terraform.
-
Использование интерфейса командной строки 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