userdata script home example ec2 east data cloudformation aws advanced linux amazon-ec2 asp.net-core-mvc kestrel-http-server

script - Cómo ejecutar un sitio.NET Core MVC en una instancia de AWS Linux



user data aws (4)

La respuesta de @ user326608 casi lo consigue, pero voy a agregar los pasos que estoy usando ahora después del lanzamiento de .NET Core 1.0.0.

  1. Cree una plantilla de aplicación web principal de ASP.NET (.NET Core) - C # - Proyecto de aplicación web MVC en Visual Studio 2015. Compile y ejecute la aplicación en IIS Express. No se realizaron cambios en ninguna configuración (web.confg, project.json, etc.).
  2. Sube toda la solución de la aplicación web a GitHub. No incluya project.lock.json en la carga de Git.
  3. Inicie una instancia de Amazon Linux AMI (2016.09.0). Grupo de seguridad con tráfico SSH, HTTP y HTTPS permitido.
  4. Use PuTTY para SSH en la instancia de Linux. Inicie sesión con ec2-user .
  5. Actualizar la instancia sudo yum update -y
  6. Instale libunwind sudo yum install libunwind -y
  7. Descargue .NET Core curl -sSL -o dotnet.tar.gz https://go.microsoft.com/fwlink/?LinkID=809131
  8. Instale .NET Core sudo mkdir -p /opt/dotnet && sudo tar zxf dotnet.tar.gz -C /opt/dotnet
  9. Enlace sudo ln -s /opt/dotnet/dotnet /usr/local/bin
  10. Configure las tablas de IP sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 5000
  11. Instalar Git sudo yum install git -y
  12. Configure git config --global user.name "myUserName"
  13. Configure git config --global user.email "[email protected]"
  14. Hacer directorio mkdir /var/coreapp
  15. Mover al directorio cd /var/coreapp
  16. Obtenga el proyecto de Git git clone https://github.com/myUsername/myRepository.git
  17. Cambiar propietario sudo chown -R ec2-user /var/coreapp
  18. Mover a direcotry cd /var/coreapp/solution-name/src/web-project-name
  19. Restaure la dotnet restore , dotnet build compilación de dotnet build y ejecútela en segundo plano nohup dotnet run > /dev/null 2>&1 &

Esta solución está funcionando bien para mí ahora. Tengo una publicación relacionada que trata de crear una secuencia de comandos de arranque de datos de usuario para intentar que esto sea aún más fácil.

Me gustaría ejecutar un sitio web .NET Core MVC desde una instancia de AMS de Amazon Linux AMI .

Aquí están los pasos que he tomado hasta ahora:

  1. Cree una plantilla de aplicación web principal de ASP.NET (.NET Core) - C # - Proyecto de aplicación web MVC en Visual Studio 2015. Compile y ejecute la aplicación en IIS Express. No se realizaron cambios en ninguna configuración (web.confg, project.json, etc.).
  2. Sube toda la solución de la aplicación web a GitHub.
  3. Inicie una instancia de Amazon Linux AMI (2016.03.2). El Grupo de seguridad tiene acceso de "todo el tráfico" abierto por ahora por simplicidad.
  4. Use PuTTY para SSH en la instancia de Linux. Inicie sesión con ec2-user .
  5. Actualizar la instancia sudo yum update -y
  6. Instale libunwind sudo yum install libunwind -y
  7. Instalar gettext sudo yum install gettext -y
  8. Instale .NET Core curl -sSL https://raw.githubusercontent.com/dotnet/cli/rel/1.0.0-preview1/scripts/obtain/dotnet-install.sh | bash /dev/stdin --version 1.0.0-preview1-002702 --install-dir ~/dotnet curl -sSL https://raw.githubusercontent.com/dotnet/cli/rel/1.0.0-preview1/scripts/obtain/dotnet-install.sh | bash /dev/stdin --version 1.0.0-preview1-002702 --install-dir ~/dotnet
  9. Enlace sudo ln -s ~/dotnet/dotnet /usr/local/bin
  10. Instale .NET Version Manager (DNVM) curl -sSL https://raw.githubusercontent.com/aspnet/Home/dev/dnvminstall.sh | DNX_BRANCH=dev sh && source ~/.dnx/dnvm/dnvm.sh curl -sSL https://raw.githubusercontent.com/aspnet/Home/dev/dnvminstall.sh | DNX_BRANCH=dev sh && source ~/.dnx/dnvm/dnvm.sh
  11. Ejecute el comando source /home/ec2-user/.dnx/dnvm/dnvm.sh
  12. Instale .NET Execution Environment (DNX) dnvm upgrade -r coreclr
  13. Instale libuv para ser usado por Kestrel sudo yum install automake libtool wget -y wget http://dist.libuv.org/dist/v1.8.0/libuv-v1.8.0.tar.gz tar -zxf libuv-v1.8.0.tar.gz cd libuv-v1.8.0 sudo sh autogen.sh sudo ./configure sudo make sudo make check sudo make install sudo ln -s /usr/lib64/libdl.so.2 /usr/lib64/libdl sudo ln -s /usr/local/lib/libuv.so.1.0.0 /usr/lib64/libuv.so
  14. Instalar Git sudo yum install git -y
  15. Cree el directorio en el directorio ''/ home / ec2-user'' para la aplicación. Mover a ese directorio. mkdir director-name cd directory-name
  16. Clonar la aplicación web con git config user.name "myUserName" git config user.email "myEmail" git clone https://github.com/username/repositoryname.git
  17. Vaya al directorio ''proyecto'' cd solution-name/src/web-project-name .
  18. Restaurar paquetes dotnet restore
  19. Construir aplicación dotnet build
  20. Ejecutar aplicación dotnet run

En este punto veo lo siguiente en la terminal:

Ahora escuchando en: http: // localhost: 5000

Intento golpear el DNS / IP de AWS con el puerto 5000 etiquetado al final (http: // aws-ip-or-dns: 5000), pero no obtengo respuesta.

Sé que Docker y Mono son herramientas que puedo usar, pero preferiría que este enfoque funcione.

Los scripts que utilicé para instalar .NET Core, DNVM y DNX son una combinación de las instrucciones de CentOS y Ubuntu de estos enlaces:

  1. https://docs.asp.net/en/latest/getting-started.html
  2. https://www.microsoft.com/net/core#centos
  3. https://docs.asp.net/en/1.0.0-rc1/getting-started/installing-on-linux.html

Descargo de responsabilidad No tengo tanta experiencia con Linux. Es justo decir que no entiendo algunos de los comandos que estoy ejecutando. Pero, estoy aquí para aprender!

Pregunta: ¿Qué debo hacer para obtener una plantilla .NET aplicación web básica que ejecute un entorno de AWS Amazon Linux?

(Supongo que me falta algo al configurar el servidor HTTP)

Necesito más reputación para publicar más de dos enlaces, así que si alguien quiere EDITAR, lo apreciaría.


Para cualquier persona que necesite actualizar lo anterior para la actualización de Microsoft.NETCore.App 1.0.1 de septiembre de 2016, las instrucciones https://www.microsoft.com/net/core#centos funcionaron para mí:

curl -sSL -o dotnet.tar.gz https://go.microsoft.com/fwlink/?LinkID=827529 sudo mkdir -p /opt/dotnet && sudo tar zxf dotnet.tar.gz -C /opt/dotnet sudo rm /usr/local/bin/dotnet sudo ln -s /opt/dotnet/dotnet /usr/local/bin

Posteriormente ejecutando dotnet --info da:

.NET Command Line Tools (1.0.0-preview2-003131) Product Information: Version: 1.0.0-preview2-003131 Commit SHA-1 hash: 635cf40e58 Runtime Environment: OS Name: amzn OS Version: 2016.09 OS Platform: Linux RID: amzn.2016.09-x64

Después de eso borré mi project.lock.json y ejecuté una dotnet restore .

No pude hacer que una dotnet run directamente ya que mi RID no se conocía, pero usar un Dockerfile con microsoft/dotnet:onbuild y esta sección en mi project.json funcionó:

"runtimes": { "debian.8-x64" : {} },


Si está ejecutando su instancia de AWS en modo VPC y no tiene un grupo de seguridad que diga que su regla de entrada tiene "Todo el tráfico" y la Fuente es "En cualquier lugar" o si dice que "Regla de TCP personalizada", el puerto es 5000 y La fuente es "En cualquier lugar", entonces no le permitirá conectarse a ese puerto. En el modo VPC, todos los puertos entrantes se cierran de forma predeterminada y debe permitirlos explícitamente con algunos grupos de seguridad predefinidos o propios.


Si usa Opswork (o Chef) puede usar la siguiente receta de Chef https://supermarket.chef.io/cookbooks/dotnetcore para instalar un núcleo dotnet en AWS Linux, asumiendo que ha cargado un archivo comprimido usando la publicación dotnet. archivo a un cubo S3.
La capa json tiene JSON que tiene el nombre corto de la aplicación, por ejemplo,

{ myapp {} } # The recipe to install # 1) Figure which App needs to be installed using JSON in Opsworks layer # 2) Get the Zip file from S3 and Unzip into /usr/bin/myapp/publish # 3) Create bash file to start # 4) Start the app apps = search(:aws_opsworks_app) apps.sort_by { |v| v["shortname"] }.each do |app| appname = app["shortname"] app_source = app["app_source"] bucket, remote_path = OpsWorks::SCM::S3.parse_uri("#{app_source[''url'']}") filename = remote_path.split("/")[-1] extn = File.extname filename if (!node["#{appname}"].nil? && extn == ''.zip'') apppath = "/usr/bin/#{appname}" dotnetapp = app["environment"]["dotnetapp"] aspnetcore_environment = app["environment"]["aspnetcore_environment"] Chef::Log.info("App dotnet Name:#{app[:environment][:dotnetapp]}") Chef::Log.info("Enviroment:#{aspnetcore_environment}") app_checkout = ::File.join(Chef::Config["file_cache_path"], app["shortname"]) package = "#{app_checkout}/#{filename}" # Use https://github.com/awslabs/opsworks-windows-demo-cookbooks or any s3_file recipe to download the zip file # if you copy the opsworks-windows-cookbooks you will to modify the recipe a little to work on aws linux opsworks_scm_checkout app["shortname"] do destination app_checkout repository app_source["url"] user app_source["user"] password app_source["password"] type app_source["type"] ssh_key app_source["ssh_key"] revision app_source["revision"] end directory "#{apppath}" do end execute ''unzip package'' do command "unzip -o #{app_checkout}/#{filename} -d #{apppath}" end # create a sysvint sh file to manage dotnet service initd_directory = "/etc/init.d" intd_file = File.join(initd_directory, app["shortname"]) template intd_file do mode "744" source ''file.sh.erb'' variables( :service_name => app["shortname"], :dotnetapp => "#{dotnetapp}", :apppath => "#{apppath}/publish" ) end execute "start service #{dotnetapp}" do command ".#{initd_directory}/#{appname} start" environment ({"ASPNETCORE_ENVIRONMENT" => "#{aspnetcore_environment}"}) end Chef::Log.info("End Install #{appname}") end end # The ERB Template: #!/bin/bash # # description: <%= @service_name %> # # Get function from functions library . /etc/init.d/functions # # Start the service <%= @service_name %> # start() { initlog -c "echo -n Starting dotnet <%= @service_name %> server: " cd <%= @apppath %> nohup dotnet <%= @dotnetapp %> /dev/null 2>&1 & ### Create the lock file ### touch /var/lock/subsys/<%= @service_name %> success $"<%= @service_name %> server startup" echo } # Restart the service <%= @service_name %> stop() { initlog -c "echo -n Stopping dotnet <%= @service_name %> server: " killproc dotnet ### Now, delete the lock file ### rm -f /var/lock/subsys/<%= @service_name %> echo } ### main logic ### case "$1" in start) start ;; stop) stop ;; status) status dotnet ;; restart|reload|condrestart) stop start ;; *) echo $"Usage: $0 {start|stop|restart|reload|status}" exit 1 esac exit 0