Hola, espero que estén bien. Este post es una continuación al post anterior, en el cual revisamos como podemos realizar el deploy de un api en un AWS Lambda. Ahora seguiremos con lo que es más lógico que suceda luego de hacer esto, automatizar este proceso. En post anteriores, he mostrado el uso de Azure Devops para los procesos de devops que uso, veamos como realizamos en este caso.
Primero, debemos tener creado un rol en IAM para que nuestro pipeline de devops se pueda authenticar. Con esto realizado, ingresar a azure devops y nos dirigimos a la siguientes opción.
Con esto hecho, vamos a AWS para crear un bucket, que es donde configuraremos luego para que nuestra pipeline deje los archivos.
En nuestro pipeline, vamos a seleccionar la siguiente tarea.
Para que funcione nuestro proceso de devops, es necesario crear una serie de archivos en nuestro proyecto, son dos los archivos, el primero es «serverless.template» y «aws-lambda-tools-defaults.json». Les dejo el detalle de la información que va en cada archivo y les comento cual es la información que debe variar.
serverless.template
{
"AWSTemplateFormatVersion": "2010-09-09",
"Transform": "AWS::Serverless-2016-10-31",
"Description": "An AWS Serverless Application that uses the ASP.NET Core framework running in Amazon Lambda.",
"Parameters": {},
"Conditions": {},
"Resources": {
"AspNetCoreApi": {
"Type": "AWS::Serverless::Api",
"Properties": {
"StageName": "Prod",
"BinaryMediaTypes": [
"*~1*"
]
}
},
"AspNetCoreFunction": {
"Type": "AWS::Serverless::Function",
"Properties": {
"Handler": "Exphadis.Services.WebApi::Exphadis.Services.WebApi.LambdaEntryPoint::FunctionHandlerAsync",
"Runtime": "dotnetcore3.1",
"CodeUri": "",
"MemorySize": 512,
"Timeout": 30,
"Role": null,
"Policies": [
"AWSLambda_FullAccess"
],
"Environment" : {
"Variables" : {
"ASPNETCORE_ENVIRONMENT" : "",
"SENTRY_CONNECTION" : "",
"DATABASE_CONNECTION" : "",
"JWT_KEY" : "",
"JWT_EXPIRATION" : ""
}
},
"Events": {
"ProxyResource": {
"Type": "Api",
"Properties": {
"Path": "/{proxy+}",
"Method": "ANY",
"RestApiId": {
"Ref": "AspNetCoreApi"
}
}
},
"RootResource": {
"Type": "Api",
"Properties": {
"Path": "/",
"Method": "ANY",
"RestApiId": {
"Ref": "AspNetCoreApi"
}
}
}
}
}
}
},
"Outputs": {
"ApiURL": {
"Description": "Site for Exphadis Support",
"Value": {
"Fn::Sub": "https://${AspNetCoreApi}.execute-api.${AWS::Region}.amazonaws.com/site/"
}
}
}
}
Consideren, que deben modificar de esta plantilla:
- Handler
- Environment – Variables
aws-lambda-tools-defaults.json
{
"Information" : [
"All the command line options for the Lambda command can be specified in this file."
],
"profile" : "default",
"region" : "us-east-1",
"configuration" : "Release",
"framework" : "netcoreapp3.1",
"s3-prefix" : "exphadis-service/",
"template" : "serverless.template",
"template-parameters" : "",
"s3-bucket" : "exphadis-service",
"stack-name" : "Exphadis-Service-Serverless"
}
Consideren modificar la información que visualizan, de-acuerdo al escenario que tengan.
Veamos como tendría que quedar nuestro archivo «pipeline.yml».
trigger:
- feature/deploy-lambda
pool:
vmImage: 'windows-latest'
variables:
solution: '**/*.sln'
buildPlatform: 'Any CPU'
buildConfiguration: 'Release'
steps:
- task: LambdaNETCoreDeploy@1
name: 'Deploy_Lambda'
displayName: 'Deploy to lambda'
inputs:
awsCredentials: 'AWS Admin'
regionName: 'us-east-1'
command: 'deployServerless'
packageOnly: false
lambdaProjectPath: '$(System.DefaultWorkingDirectory)\\Exphadis.Services.WebApi'
stackName: 'Exphadis-Service-Serverless'
s3Bucket: 'exphadis-service'
s3Prefix: 'Exphadis.Services.WebApi/'
Notemos especificamente estas partes.
Fuera de elegir las credenciales que ya hemos configurado previamente, la región, es necesario indicar:
- lambdaProjectPath: La ruta en nuestro proyecto donde está nuestro entrypoint para lambda.
- stackName: El nombre de nuestro lambda
- s3Bucket: El nombre del bucket en S3 que hemos creado
- s3Prefix: El prefijo de la carpeta en la que se va a desplegar nuestra proyecto compilado.
Probemos ahora toda nuestra configuración.
Finalmente, validamos en AWS este cambio.
La demo de todo lo anteriormente explicado, pueden revisarla en el siguiente video.
Espero que les sea util, si tienen alguna duda, los espero en la sección de comentarios.
Saludos.
Sé el primero en comentar