Jak ustawić środowisko Serverless AWS
Jeśli to twój pierwszy kontakt z serverless to zapewniam cię, że będzie bezkonfliktowy. Na warsztatach ustawimy sobie lokalne środowisko developerskie, napiszemy niewielki program i wdrożymy do usługi AWS Lambda.
Warsztaty live w ramach AWSowego tygodnia ➡️ https://www.akademiaarchitektait.pl/plan-wydarzen-awsowego-tygodnia/
Przygotowanie środowiska
- Zainstalowany VS Code https://code.visualstudio.com
- Zainstalowany AWS SAM CLI. https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli-install.html
Możecie to sprawdzić wydając komendę:sam --version
- Instalacja Dockera https://docs.docker.com/get-docker/
Sprawdzamy komendą:docker -v
- Instalacja .Net Core 3.1 https://dotnet.microsoft.com/download
Sprawdzamy wersję:dotnet --version
- Zainstalowany Extensions „AWS Toolkit” w VS Code. Po jego instalacji sprawdź możliwość połączenia się do AWSa.
- Zainstalowany Extension C# w VS Code.
Polecenia użyte podczas warsztatu
Zbudowanie programu
sam build
Lokalne wywołanie funkcji
sam local invoke
Zmiana kodu na coś ciekawszego
namespace HelloWorld { public class Joke { public IList<string> Categories { get; set; } public string Created_at { get; set; } public string Icon_url { get; set; } public string Id { get; set; } public string Updated_at { get; set; } public string Url { get; set; } public string Value { get; set; } } public class Function { private static readonly HttpClient client = new HttpClient(); private static async Task<string> GetJoke() { client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Add("User-Agent", "AWS Lambda .Net Client"); var msg = await client.GetStringAsync("https://api.chucknorris.io/jokes/random").ConfigureAwait(continueOnCapturedContext: false); var joke = JsonConvert.DeserializeObject<Joke>(msg); return joke.Value; } public async Task<APIGatewayProxyResponse> FunctionHandler(APIGatewayProxyRequest apigProxyEvent, ILambdaContext context) { var joke = await GetJoke(); var body = new Dictionary<string, string> { { "joke", joke } }; return new APIGatewayProxyResponse { Body = JsonConvert.SerializeObject(body), StatusCode = 200, Headers = new Dictionary<string, string> { { "Content-Type", "application/json" } } }; } } }
Uruchomienie serwera api
sam local invoke HelloWorldFunction --event events/event.json sam local start-api curl http://localhost:3000/hello
Wdrożenie
sam deploy --guided