Azure 함수 데이터베이스 연결 문자열
추하거나방법는을 .app.config데이터베이스 연결 문자열을 추가하기 위한 Azure 함수의 파일?
▁if▁you'▁supposed▁to을▁not▁addre지.app.config그리고 기능을 실행하기 위해 외부 데이터베이스에 접근하는 더 좋은 방법이 있습니다. 베스트 프랙티스를 알려주세요.감사합니다!
Jan_V는 거의 못박을 뻔했고, 그래서 저는 이것을 실험하게 되었습니다.local.settings.json
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true;",
"AzureWebJobsDashboard": ""
},
"ConnectionStrings": {
"MyConnectionString": "[YourConnectionStringHere]"
}
}
이기사면하를 할 수 있습니다.ConfigurationManager.ConnectionStrings[]우리는 모두 익숙합니다.
var sqlConnection = ConfigurationManager
.ConnectionStrings["MyConnectionString"].ConnectionString;
이렇게 하는 가장 좋은 방법은 Azure 포털에서 연결 문자열을 추가하는 것입니다.
- 기능 앱 UI에서 기능 앱 설정을 클릭합니다.
- 설정 / 응용 프로그램 설정
- 연결 문자열 추가
그런 다음 web.config에 있는 것과 동일한 논리를 사용하여 사용할 수 있습니다.
var conn = System.Configuration.ConfigurationManager
.ConnectionStrings["MyConn"].ConnectionString;
아니면 비-를 사용하는 경우.NET 언어를 사용하면 앱 설정을 대신 사용할 수 있습니다. 앱 설정은 런타임에 기능이 액세스할 수 있는 간단한 환경 변수가 됩니다.
구성 관리자가 새 Asp로 대체됩니다.함수 런타임 v2의 NetCore 구성 시스템.
그래서 만약 당신이 사용한다면.Net Core 당신은 John Gallants 블로그 기사를 따라야 합니다. https://blog.jongallant.com/2018/01/azure-function-config/
- 로컬과 함께 작동합니다.settings.json 및 Azure 함수의 설정
- 앱 설정 및 연결 문자열과 함께 작동
Todd De Land의 대답은 지역 환경에만 적용됩니다.그러나 이 문서에 따르면 게시된 Azure Function은 앱 설정으로 저장된 연결 문자열을 검색해야 합니다.GetEnvironmentVariable.
추가하기System.Configuration어셈블리 참조가 필요하지 않습니다.
string cs = Environment.GetEnvironmentVariable("MyConnectionString",EnvironmentVariableTarget.Process);
다음은 로컬 환경과 게시된 환경 모두에서 환경 문자열을 검색할 수 있도록 만드는 단계입니다.
- 환경을 로컬환을위해기하에서,
local.settings.json연문지정 안에 연결 합니다.Values
- 환경을 하려면 게된환경지면오시십이하로 하십시오.
portal.azure.com > your Azure Function > function node > Application Settings
- 마막으로콜, 지콜로 전화하세요.
GetEnvironmentVariableAzure 함수에서 (이 코드를 올바르게 표시하기 위해 스택 오버플로를 가져올 수 없음)
바로 그거야.
저는 여기서 비슷한 질문과 대답을 몇 번 거쳤습니다.그들 중 많은 사람들이 오해의 소지가 있거나 모든 사람들이 동일한 수준에 있고 방위 기능이 어떻게 작동하는지 이해하고 있다고 가정합니다.저 같은 신입생은 답이 없습니다.저는 여기에 저의 해결책을 단계별로 요약하고 싶습니다.
가장 중요한 것은 우리가 현지를 이해한다는 것입니다.settings.json 파일은 AZURE용이 아닙니다. 이름이 분명히 말하는 것처럼 로컬에서 앱을 실행하기 위한 것입니다.따라서 솔루션은 이 파일과 무관합니다.
App.Config 또는 Web.Azure 함수 연결 문자열에 대한 구성이 작동하지 않습니다.데이터베이스 계층 라이브러리가 있는 경우 As에서 수행하는 것처럼 이러한 라이브러리를 사용하여 연결 문자열을 덮어쓸 수 없습니다.넷 애플리케이션.
의 Azure에서 연결 .
Application Settings당신의 Azure 함수에서.연결문이있습다니열. 의 DB 연결 .거기서 당신은 당신의 DB 컨텍스트의 연결 문자열을 복사해야 합니다.edmx이면 아래와 같이 보일 것입니다.연결 유형이 있습니다. SQLAzure를 사용하지만 Custom(사용자 지정에서만 작동한다고 주장함)으로 테스트했습니다.
metadata=res://Models.myDB.csdl|res:///Models.myDB.ssdl|res://*/Models.myDB.msl;provider=System.Data.SqlClient; 공급자 연결 문자열='data source=[yourdb]URL];초기 카탈로그=myDB;영구 보안 정보=참, 사용자 ID=xxxx, 암호=xxx;다중 활성 결과 집합 = 참;App=프로세서 프레임워크
- 설정한 후에는 응용프로그램의 URL을 읽고 DB 컨텍스트를 제공해야 합니다.DbContext는 연결 문자열 매개 변수가 있는 생성자를 구현합니다.기본적으로 생성자에는 매개 변수가 없지만 이 매개 변수를 확장할 수 있습니다.POCO 클래스를 사용하는 경우 DbContext 클래스를 간단히 수정할 수 있습니다.저처럼 Database generated Edmx 클래스를 사용하는 경우 자동 생성된 edmx 클래스를 건드리지 않고 동일한 네임스페이스에 부분 클래스를 만들고 아래와 같이 이 클래스를 확장하고자 합니다.
자동 생성된 DbContext입니다.
namespace myApp.Data.Models
{
public partial class myDBEntities : DbContext
{
public myDBEntities()
: base("name=myDBEntities")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new UnintentionalCodeFirstException();
}
}
이것은 당신이 만드는 새로운 부분 클래스입니다.
namespace myApp.Data.Models
{
[DbConfigurationType(typeof(myDBContextConfig))]
partial class myDBEntities
{
public myDBEntities(string connectionString) : base(connectionString)
{
}
}
public class myDBContextConfig : DbConfiguration
{
public myDBContextConfig()
{
SetProviderServices("System.Data.EntityClient",
SqlProviderServices.Instance);
SetDefaultConnectionFactory(new SqlConnectionFactory());
}
}
}
- 결국 Zure 설정에서 연결 문자열을 가져올 수 있으며 아래 코드로 Azure Function 프로젝트에서 DbContext myDB 엔티티를 제공하는 것이 연결 문자열에 대해 Zure 포털에서 지정한 이름입니다.
var connString = ConfigurationManager.ConnectionStrings["myDBEntities"].ConnectionString;
using (var dbContext = new myDBEntities(connString))
{
//TODO:
}
@ToddDeLand의 답변에 추가.
과 함께local.settings.json다음과 같이:
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true;",
"AzureWebJobsDashboard": ""
},
"ConnectionStrings": {
"MyConnectionString": "[YourConnectionStringHere]"
}
}
그런 다음 NuGets가 필요 없는 연결 문자열에 액세스할 수 있습니다.
var connectionString = Environment.GetEnvironmentVariable("ConnectionStrings:MyConnectionString");
Microsoft는 다음과 같은 방법을 권장합니다.
연결 문자열을 값에 추가하는 경우:
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true;",
"AzureWebJobsDashboard": "",
"MyConnectionString": "[YourConnectionStringHere]"
}
}
다음과 같이 연결 문자열에 액세스할 수 있습니다.
var connectionString = Environment.GetEnvironmentVariable("MyConnectionString");
출처:
https://stackoverflow.com/a/52219491/3850405
https://github.com/Azure/Azure-Functions/issues/717#issuecomment-400098791
일반적으로 Azure 함수에 환경 변수를 사용한 후 Azure 함수에서 환경 변수를 설정할 수 있습니다.
(기능앱 설정 -> 앱 설정 구성 -> 앱 설정 섹션)
혹시 어떤 언어를 사용하는지도 알려주시면 더 도움이 될까요?
함수 런타임 v3를 사용하는 경우 다음과 같은 접근 방식이 사용자에게 효과적입니다.
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true;",
"AzureWebJobsDashboard": ""
},
"ConnectionStrings": {
"MyConnectionString": "[YourConnectionStringHere]"
}
}
함수의 시작 파일에서
public override void ConfigureAppConfiguration(IFunctionsConfigurationBuilder builder)
{
var config = builder.ConfigurationBuilder.Build();
var connectionString = config.GetConnectionString("MyConnectionString");
}
나는 내 로컬 데이터베이스에서 아래 코드 조각을 시도해 보았는데 쉬워 보입니다.어디 한번 볼까요?
Nuget 확장:
참다위에서 다음 하십시오.Nuget Package Manager에 관하여Dependencies
using System.Data.SqlClient;
local.vmdk.json:
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"FUNCTIONS_WORKER_RUNTIME": "dotnet",
"sqldb_connection": "Data Source=.;Initial Catalog=DatabaseName;Connection Timeout=30;Integrated Security=True;"
}
}
기능 본체의 연결을 읽습니다.
//데이터베이스 연결 읽기
var sqlConnection = Environment.GetEnvironmentVariable("sqldb_connection");
연결 문자열을 사용한 기능 읽기 쓰기 작업:
// Convert all request perameter into Json object
var content = req.Content;
string jsonContent = content.ReadAsStringAsync().Result;
dynamic requestPram = JsonConvert.DeserializeObject<AzureSqlTableClass>(jsonContent);
// Validate required param
if (string.IsNullOrEmpty(requestPram.FirstName))
{
return req.CreateResponse(HttpStatusCode.OK, "Please enter First Name!");
}
if (string.IsNullOrEmpty(requestPram.LastName))
{
return req.CreateResponse(HttpStatusCode.OK, "Please enter Last Name!");
}
//Read database Connection
var sqlConnection = Environment.GetEnvironmentVariable("sqldb_connection");
var responseResults = 0;
//Read Write Uisng Connection String
using (SqlConnection conn = new SqlConnection(sqlConnection))
{
conn.Open();
var text = "INSERT INTO AzureSqlTable VALUES ('" + requestPram.FirstName + "', '" + requestPram.LastName + "', '" + requestPram.Email + "') ";
using (SqlCommand cmd = new SqlCommand(text, conn))
{
responseResults = await cmd.ExecuteNonQueryAsync();
}
conn.Close();
}
return req.CreateResponse(HttpStatusCode.OK, responseResults);
참고: 기능을 게시하는 동안
azure portal결문을바다꿉니열자냥▁replace에 있는 연결 만 하면 .local.settings.json파일입니다. 그에 따라 작동할 것입니다.아래 스크린샷을 참조하십시오.
이 방법을 사용해 보십시오.
public static string GetConnectionString(string name)
{
string conStr = System.Environment.GetEnvironmentVariable($"ConnectionStrings:{name}",
EnvironmentVariableTarget.Process);
// Azure Functions App Service naming
if (string.IsNullOrEmpty(conStr))convention
conStr = System.Environment.GetEnvironmentVariable($"SQLAZURECONNSTR_{name}",
EnvironmentVariableTarget.Process);
return conStr;
}
위의 제안 중 일부는 효과가 있습니다.그러나 연결 문자열을 설정하는 더 간단한 방법이 있습니다.게시 설정을 누른 후 '게시' 화면을 사용하는 것입니다.여기 설명서에서 사진 참조하십시오.
연결 문자열을 처리하는 가장 좋은 방법은 "Azure Key Vault"를 사용하는 것입니다.모든 중요한 암호를 키 볼트에 저장하고 응용 프로그램에서 사용할 수 있습니다.다른 구성원이 제안한 대로 응용프로그램 설정을 사용할 수 있습니다.
도움말 전체 링크: https://learn.microsoft.com/en-us/azure-stack/user/azure-stack-key-vault-manage-portal?view=azs-2002
https://learn.microsoft.com/en-us/aspnet/core/security/key-vault-configuration?view=aspnetcore-3.1
아래는 코스모스 db를 쿼리하는 http 트리거 함수에 대해 로컬과 Azure 모두에서 저를 위해 일했습니다.
Microsoft가 추가했습니다.애저, 웹잡스내선 번호.프로젝트에 대한 CosmosDB nugget 패키지
연결 문자열 설정:
로컬.j.json
{
"ConnectionStrings": {
"CosmosDBConnection": "AccountEndpoint=foobar;"
}
}
Azure 포털 > 기능 앱 > 플랫폼 기능 > 구성 > 애플리케이션 설정 > 새 애플리케이션 설정 >Name: CosmosDBConnection Value: AccountEndpoint=foobar; 업데이트 > 저장
표본 c# Azure 함수
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "get")] HttpRequest req,
[CosmosDB(databaseName:"dbName",
collectionName:"collectionName",
ConnectionStringSetting = "CosmosDBConnection")] DocumentClient documentClient,
ILogger log){
.....
}
연결 문자열을 Zure 키 볼트에 저장하고 MSI on zure 기능을 활성화하고 키 값을 읽으려면 zure 키 볼트에 액세스 정책을 추가해야 합니다.
Azure Functions Version 4: 연결 문자열 구성 방법
개념:
A. Azure 함수에는 네 가지 버전이 있습니다.아래는 버전 4용으로 작성되었습니다.사용 중인 버전이 확실하지 않으면 프로젝트 파일을 편집합니다. <AzureFunctionsVersion>v4</AzureFunctionsVersion>
B. 로컬 개발 환경과 서버 환경을 모두 별도로 구성해야 합니다.이들은 서로 다르며 다른 구성이 필요하지만 구성을 사용하는 코드는 동일합니다.
C. 환경 변수를 사용합니다.일반적인 appconfig.json 파일은 가벼운 실행 환경인 Azure Functions에서 지원되지 않습니다. (AzureKey 볼트를 사용할 수도 있지만 다른 주제입니다.)
개발 환경 변수를 설정하려면 로컬에 추가합니다.settings.json 이 파일은 게시되지 않으며 이름이 의미하는 대로 로컬 컴퓨터에만 적용됩니다.
"암호화됨": false, "Values": {"AzureWebJobsStorage": "개발 스토리지=true 사용", "FUNCTION_WORKER_RUNtime": "dotnet", "DefaultConnectionString": "MyConnectionString" }
게시된 환경의 경우 Azure 포털로 이동하여 설정합니다.
언급URL : https://stackoverflow.com/questions/37215069/azure-functions-database-connection-string
'programing' 카테고리의 다른 글
| Where 절의 SQL Row_Number() 함수 (0) | 2023.05.12 |
|---|---|
| Windows 10 콘솔에서 인피니티가 "8"로 인쇄되는 이유는 무엇입니까? (0) | 2023.05.12 |
| 엔티티 프레임워크에서 저장 프로시저를 호출하는 중 오류 발생 (0) | 2023.05.12 |
| 커밋 ID가 주어지면 현재 분기에 커밋이 포함되어 있는지 확인하는 방법은 무엇입니까? (0) | 2023.05.12 |
| Visual Studio 2015 및 IFormat Provider(CA1305)의 문자열 보간 (0) | 2023.05.12 |




