Open shankersumit opened 2 weeks ago
@vhvb1989 could you advise on this please ?
Hello @shankersumit , Terraform is not compatible for deploying .NET Aspire projects.
When you use .NET Aspire, you can only deploy using bicep
. You can run azd infra synth
to generate the bicep files out of the AppHost project.
Hi @vhvb1989
I was referring to the below documentation from Microsoft:
https://learn.microsoft.com/en-us/dotnet/aspire/deployment/azure/aca-deployment-azd-in-depth?tabs=windows https://learn.microsoft.com/en-us/azure/developer/azure-developer-cli/use-terraform-for-azd
Hence, i was trying to use terraform in my .net aspire project as infra provider(azure.yaml)
Is this something not supported for longer run ?
/unresolve
Hello @shankersumit
Yes, AZD supports deploying Terraform, but the .NET Aspire model works different.
Aspire uses an AppHost project to define the infrastructure with C# code. When deploying Aspire to Azure, the C# code is translated to bicep during runtime for Azure to understand it.
There are some implementation details around how to create and set up the Azure Container Environment, User Managed Identity and the Azure Container Registry for the deployment to work with azd.
If you run azd infra synth
to your Aspire project, you can find the details about how resources are defined and what outputs are set. The outputs are super important because it provides azd the information for running azd deploy
.
In theory, after running azd infra synth, you could translate all the bicep files to terraform and, assuming the translation is 100% equivalent (resources and outputs), you could run azd up
and things should work.
However, some Aspire+AZD features can't be translated to Terraform. Aspire leverages an AZD feature that allows you to set metadata for the bicep input parameters. This metadata tells azd to handle the inputs in some specific ways. For example, some input parameters are expected to be auto-generated by azd based on rules provided by Aspire. So, when using Terraform, there's no currently a way to set that metadata information for the terraform cli
to handle the inputs. You would need to create your own strategy to make that work.
But, even if you managed to translate bicep to Terraform, as soon as you make new changes to your AppHost, like adding a new resource or project there, you would need to run azd infra synth
again and go thru the translation all over again.
Hi @vhvb1989
Thanks for such a elaborative response .
I did tried translating the biceps files to terraform but somehow azd deploy is unable to find the container app environment name .I have already updated these resource names under .azure/.env file still It gives me below message :
ERROR: could not determine container app environment for service integrationservice, have you set AZURE_CONTAINER_ENVIRONMENT_NAME or SERVICE_INTEGRATIONSERVICE_CONTAINER_ENVIRONMENT_NAME as an output of your infrastructure?
I have already set infra provider as terraform in azure.yml file , still it starts generating biceps file and looks for outputs .
Also, is it required to run azd provision each time before running azd deploy ?
As I have already tagged all rhe resources correctly, I don't require to run azd provision to run everytime before azd deploy in CI/CD pipeline since there are no infra changes . So how outputs will be leveraged by azd deploy in this scenario?
You can try running azd provision
and looking at how the .azure/.env looks like. Then use that as a reference for when you run azd provision
with terraform. Once the output is the same, move on to azd deploy
But, I recommend looking at this as a non-supported scenario by design. Aspire+Terraform has never been designed, tested or expected.
Also, is it required to run azd provision each time before running azd deploy ?
No. If nothing changed to your infra folder (or to your infra inputs), you don't need to run provision again. You can just switch to azd deploy.
When working with bicep, azd has a built-in cache feature to validate if there are new changes in your infra and skip in case not.
But, for terraform, azd would only call terraform cli
and you depend on how deployment is handled by terraform
Hi @vhvb1989
Yes I have tried provisioning infra using azd provision for terraform configuration under infra folder This works pretty much well
Only after this when I run azd deploy , it starts generating biceps files automatically , and gives me above mentioned error.
Not sure why it is generating biceps configs and looking for outputs from biceps .
Not sure why it is generating biceps configs and looking for outputs from biceps .
This is how aspire works, what you want to do is not use the aspire +azd integration and instead manually write and wire up all of the terrform files. In that case, you can't use whatever is built into aspire, so following those docs will lead you down the wrong path.
Thanks @davidfowl
So in this case , only option to use aspire is with biceps only.
Terraform is not supported for dot aspire
I have configure my azure.yaml to use terraform as provider also, configured all the terraform configuration in infra folder.
But still when I run azd deploy it starts downloading biceps files and gives me below error. I have already updated container environment name for the service in .env file but still i get the below error.
Logged in to Azure. Analyzing Aspire Application (this might take a moment...) Downloading Bicep (✓) Done: Downloading Bicep
Deploying services (azd deploy)
(x) Failed: Deploying service integrationservice
ERROR: could not determine container app environment for service integrationservice, have you set AZURE_CONTAINER_ENVIRONMENT_NAME or SERVICE_INTEGRATIONSERVICE_CONTAINER_ENVIRONMENT_NAME as an output of your infrastructure?
I have also generated service configuration