AWS Lambda 함수 .NET 컨테이너를 Amazon DynamoDB에 연결
21303 단어 serverlessdotnetawsdocker
프로젝트 시작
this commit에서 프로젝트를 계속하십시오. 즉, this project을 사용하여 직접 탐색할 수 있습니다. 변경 사항을 확인하려면 here을 방문하십시오.
Lambda 함수 코드 업데이트
기존 프로젝트에 종속성 설치
사용하기 전에 Amazon DynamoDB 종속성을 설치해야 합니다. 다음 명령을 사용하십시오:
dotnet add src/SimpleAPI/ package AWSSDK.DynamoDBv2 --version 3.7.3.57
. 버전3.7.3.57
을 사용합니다.모델 추가
이 모델 파일을
src/SimpleAPI/Models/Note.cs
에 추가하십시오. 이 경우 개념 증명을 위해 간단한 모델을 사용합니다.namespace SimpleAPI.Models;
using Amazon.DynamoDBv2.DataModel;
[DynamoDBTable("Notes")]
public class Note
{
[DynamoDBHashKey]
public Guid Id {get; set;}
public String Message {get; set;}
}
메모 컨트롤러 추가
API를 처리하려면 새 컨트롤러를 추가해야 합니다.
using Microsoft.AspNetCore.Mvc;
using Amazon.DynamoDBv2.DataModel;
using SimpleAPI.Models;
using Amazon.DynamoDBv2;
namespace SimpleAPI.Controllers;
[Route("api/[controller]")]
public class NotesController : ControllerBase
{
private readonly AmazonDynamoDBClient _dynamoDBClient;
private readonly DynamoDBContext _dbContext;
public NotesController()
{
AmazonDynamoDBConfig clientConfig = new AmazonDynamoDBConfig();
_dynamoDBClient = new AmazonDynamoDBClient(clientConfig);
_dbContext = new DynamoDBContext(_dynamoDBClient);
}
[HttpGet]
public async Task<IEnumerable<Note>> Get()
{
var notes = _dbContext.ScanAsync<Note>(new List<ScanCondition>());
var results = await notes.GetRemainingAsync();
return results;
}
[HttpGet("{id}")]
public async Task<Note?> Get(Guid id)
{
var notes = _dbContext.QueryAsync<Note>(id);
var results = await notes.GetRemainingAsync();
return results.FirstOrDefault();
}
[HttpPost]
public async Task<Note> Post([FromBody] Note value)
{
var batch = _dbContext.CreateBatchWrite<Note>();
value.Id = Guid.NewGuid();
batch.AddPutItem(value);
await batch.ExecuteAsync();
return value;
}
[HttpPut("{id}")]
public async Task<IResult> Put(Guid id, [FromBody] Note value)
{
var notes = _dbContext.QueryAsync<Note>(id);
var results = await notes.GetRemainingAsync();
var first = results.FirstOrDefault();
if (first == null)
{
return Results.NotFound();
}
first.Message = value.Message;
var batch = _dbContext.CreateBatchWrite<Note>();
batch.AddPutItem(first);
await batch.ExecuteAsync();
return Results.Ok(first);
}
[HttpDelete("{id}")]
public async Task<IResult> Delete(Guid id)
{
var notes = _dbContext.QueryAsync<Note>(id);
var results = await notes.GetRemainingAsync();
var first = results.FirstOrDefault(); if (first == null)
{
return Results.NotFound();
}
var batch = _dbContext.CreateBatchWrite<Note>();
batch.AddDeleteItem(first);
await batch.ExecuteAsync();
return Results.Ok();
}
}
Terraform 코드 업데이트
inline_policy {
name = "lambda-custom"
policy = jsonencode({
Version = "2012-10-17"
Statement = [{
Effect = "Allow"
Action = [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
]
Resource = "*"
}, {
Effect = "Allow",
Action = [
"dynamodb:DescribeTable",
"dynamodb:GetRecords",
"dynamodb:GetShardIterator",
"dynamodb:ListTables",
"dynamodb:Scan",
"dynamodb:Query",
"dynamodb:BatchWriteItem",
"dynamodb:PutItem",
"dynamodb:UpdateItem",
"dynamodb:DeleteItem"
]
Resource = ["*"]
}] })
}
tracing_config {
mode = "Active"
}
timeout = 60
aws_lambda_function_url
가 이미 모든 방법을 허용하는지 확인하십시오.allow_methods = ["*"]
resource "aws_dynamodb_table" "lambda_container_demo_dev" {
name = "Notes"
billing_mode = "PROVISIONED"
read_capacity = 20
write_capacity = 20
hash_key = "Id"
attribute {
name = "Id"
type = "S"
}
attribute {
name = "Message"
type = "S"
}
global_secondary_index {
name = "NoteMessageIndex"
hash_key = "Message"
write_capacity = 10
read_capacity = 10
projection_type = "INCLUDE"
non_key_attributes = ["Id"]
}
ttl {
attribute_name = "TimeToExist"
enabled = true
}
tags = {
Name = "dynamodb-table-1"
Environment = "dev"
}
}
완료!
bervProject / 람다 샤프
Lambda는 C#(.NET) 도커 이미지를 사용합니다.
Lambda 샤프 데모
Lambda Containerized .NET 데모
특허
MIT
View on GitHub
리소스가 프로비저닝되도록 코드를 Amazon ECR에 배포하고 실행terraform apply
할 시간입니다.
Notes 기능의 CRUD를 테스트하기 위해 이 스크린샷을 볼 수 있습니다.
MIT
View on GitHub
리소스가 프로비저닝되도록 코드를 Amazon ECR에 배포하고 실행
terraform apply
할 시간입니다.Notes 기능의 CRUD를 테스트하기 위해 이 스크린샷을 볼 수 있습니다.
고맙습니다!
그래서 당신은 어떻게 생각하십니까? 아주 간단하죠? 당신의 생각을 공유합시다!
Reference
이 문제에 관하여(AWS Lambda 함수 .NET 컨테이너를 Amazon DynamoDB에 연결), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/aws-builders/connecting-aws-lambda-function-net-container-to-amazon-dynamodb-2cbk텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)