Terraform을 사용하여 Azure Functions Python 배포
15188 단어 terraformpythonazurefunctionsazure
전제 조건
개요
Azure Functions은 Microsoft Azure의 FaaS(function-as-a-service)입니다. 서버리스 서비스이기 때문에 흥미로운 서비스를 더 빠르게 만들 수 있습니다. 코드에만 집중하면 되고 OS 업데이트 및 미들웨어에 신경 쓸 필요가 없습니다.
또한 Azure Functions는 외부 이벤트에 의해 트리거되는 이벤트 기반입니다.
그러나 모든 서비스를 배포하고 Azure Portal에서 구성하는 데 시간이 오래 걸리고 실수가 발생합니다.
생산성을 높이고 안전하게 배포하려면 Azure Portal에서 각 리소스를 배포하는 것보다 ARM Template 또는 Terraform 와 같은 IaC(Infrastructure as Code) 도구를 사용하고 싶습니다. 특히 프로덕션 환경에서는 인프라를 코드로 관리하는 것이 정말 중요합니다.
환경 설정
리소스 정의
리소스를 정의해 봅시다. Terraform에서는
.tf
파일에 리소스를 정의합니다.main.tf
# https://github.com/terraform-providers/terraform-provider-azurerm/issues/7960
provider "azurerm" {
version = ">=2.21.0"
features {}
}
resource "azurerm_resource_group" "funcdeploy" {
name = "rg-${var.prefix}-function"
location = var.location
}
resource "azurerm_storage_account" "funcdeploy" {
name = "${var.prefix}storage"
resource_group_name = azurerm_resource_group.funcdeploy.name
location = azurerm_resource_group.funcdeploy.location
account_tier = "Standard"
account_replication_type = "LRS"
}
resource "azurerm_storage_container" "funcdeploy" {
name = "contents"
storage_account_name = azurerm_storage_account.funcdeploy.name
container_access_type = "private"
}
resource "azurerm_application_insights" "funcdeploy" {
name = "${var.prefix}-appinsights"
location = azurerm_resource_group.funcdeploy.location
resource_group_name = azurerm_resource_group.funcdeploy.name
application_type = "web"
# https://github.com/terraform-providers/terraform-provider-azurerm/issues/1303
tags = {
"hidden-link:${azurerm_resource_group.funcdeploy.id}/providers/Microsoft.Web/sites/${var.prefix}func" = "Resource"
}
}
resource "azurerm_app_service_plan" "funcdeploy" {
name = "${var.prefix}-functions-consumption-asp"
location = azurerm_resource_group.funcdeploy.location
resource_group_name = azurerm_resource_group.funcdeploy.name
kind = "FunctionApp"
reserved = true
sku {
tier = "Dynamic"
size = "Y1"
}
}
resource "azurerm_function_app" "funcdeploy" {
name = "${var.prefix}func"
location = azurerm_resource_group.funcdeploy.location
resource_group_name = azurerm_resource_group.funcdeploy.name
app_service_plan_id = azurerm_app_service_plan.funcdeploy.id
storage_account_name = azurerm_storage_account.funcdeploy.name
storage_account_access_key = azurerm_storage_account.funcdeploy.primary_access_key
https_only = true
version = "~3"
os_type = "linux"
app_settings = {
"WEBSITE_RUN_FROM_PACKAGE" = "1"
"FUNCTIONS_WORKER_RUNTIME" = "python"
"APPINSIGHTS_INSTRUMENTATIONKEY" = "${azurerm_application_insights.funcdeploy.instrumentation_key}"
"APPLICATIONINSIGHTS_CONNECTION_STRING" = "InstrumentationKey=${azurerm_application_insights.funcdeploy.instrumentation_key};IngestionEndpoint=https://japaneast-0.in.applicationinsights.azure.com/"
}
site_config {
linux_fx_version= "Python|3.8"
ftps_state = "Disabled"
}
# Enable if you need Managed Identity
# identity {
# type = "SystemAssigned"
# }
}
variables.tf
variable "location" {
type = string
default = "japaneast"
}
variable "prefix" {
type = string
default = "my"
}
다음은 성공적인 배포를 위한 몇 가지 팁입니다.
azurerm >= 2.21.0
version = ~3
설정(기본값은 v1)Azure 리소스 배포
위의 파일을 생성했으면 배포하자!
로컬 PC에 Terraform을 설치하지 않으려면 테스트로 Azure Cloud Shell을 사용하십시오.
각 리소스 이름이 고유한지 확인하십시오.
$ terraform init
...
Terraform has been successfully initialized!
...
$ terraform plan
$ terraform apply
...
Apply complete! Resources: 6 added, 0 changed, 0 destroyed.
Fig.1
terraform apply
의 결과그러면 Azure Portal에 Azure Functions가 표시됩니다.
Fig.2 Azure Portal의 리소스
기능 배포
terrafrom apply
이후에 코드를 Function with Visual Studio Code에 업로드할 수 있습니다.함수 앱에 코드를 배포하면 Azure Portal에서 함수를 볼 수 있습니다.
Fig.3 Azure Portal의 기능
.tf
파일에서 다양한 리소스를 관리하고 버전을 제어할 수 있습니다. 프로덕션에서는 GitHub Actions 또는 Azure DevOps 과 같은 CI/CD 도구를 사용해야 합니다.참조
Reference
이 문제에 관하여(Terraform을 사용하여 Azure Functions Python 배포), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/kemurayama/deploying-azure-functions-for-python-with-terraform-n텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)