この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
西澤です。今回.Net Core on Lambdaの開発環境をCloud9で用意する機会がありましたので、手順をまとめておこうと思います。
Cloud9環境の構築
まずは、環境のインフラとなるEnvironment
を作っていきます。
Name
は任意のものを指定して、Next step
をクリックします。
今回の環境は、Platform=Amazon Linux
で手順を用意しました。それ以外のパラメータはコストをかけずに必要最低限のものが良いというところだったので、ほぼデフォルトのままで設定しています。
最後に確認をしたら、Create environment
します。
しばらく待てば、ブラウザからアクセス可能な開発環境が利用できるようになります。
.Net Core 2.1インストール
インフラが整ったところで、環境を整備していきます。まずは、必要なパッケージやツールを揃えておきます。
cm-nishizawa.tetsunori:~/environment $ mkdir ~/downloads
cm-nishizawa.tetsunori:~/environment $ mkdir ~/dotnet
cm-nishizawa.tetsunori:~/environment $ cd ~/downloads
cm-nishizawa.tetsunori:~/downloads $ curl -O https://download.visualstudio.microsoft.com/download/pr/1ac0b9ff-cfb8-4ccc-a2e8-81188af12b54/c94d82d604ac0d16b26843f8fdade618/dotnet-sdk-2.1.700-linux-x64.tar.gz
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 159M 100 159M 0 0 19.0M 0 0:00:08 0:00:08 --:--:-- 20.3M
cm-nishizawa.tetsunori:~/downloads $ tar zxf dotnet-sdk-2.1.*-linux-x64.tar.gz -C ~/dotnet/
cm-nishizawa.tetsunori:~/downloads $ ls -la ~/dotnet/
total 156
drwxr-xr-x 5 ec2-user ec2-user 4096 May 16 01:30 .
drwx------ 15 ec2-user ec2-user 4096 May 24 12:53 ..
-rwxr-xr-x 1 ec2-user ec2-user 105872 Apr 17 23:56 dotnet
drwxr-xr-x 3 ec2-user ec2-user 4096 May 16 01:30 host
-rw-r--r-- 1 ec2-user ec2-user 1083 Apr 17 23:52 LICENSE.txt
drwxr-xr-x 3 ec2-user ec2-user 4096 May 16 01:30 sdk
drwxr-xr-x 5 ec2-user ec2-user 4096 May 16 01:30 shared
-rw-r--r-- 1 ec2-user ec2-user 27700 Apr 17 23:52 ThirdPartyNotices.txt
cm-nishizawa.tetsunori:~/downloads $ cat << \EOF >> ~/.bash_profile
> export PATH=$PATH:$HOME/dotnet:$HOME/.dotnet/tools
> export DOTNET_ROOT=$HOME/dotnet
> EOF
cm-nishizawa.tetsunori:~/downloads $ source ~/.bash_profile
function
cm-nishizawa.tetsunori:~/downloads $ dotnet --version
2.1.700
cm-nishizawa.tetsunori:~/environment/lambda_s3/src/lambda_s3 $ dotnet --info
.NET Core SDK (reflecting any global.json):
Version: 2.1.700
Commit: c2ef055a0f
Runtime Environment:
OS Name: amzn
OS Version: 2018.03
OS Platform: Linux
RID: linux-x64
Base Path: /home/ec2-user/dotnet/sdk/2.1.700/
Host (useful for support):
Version: 2.1.11
Commit: d6a5616240
.NET Core SDKs installed:
2.1.700 [/home/ec2-user/dotnet/sdk]
.NET Core runtimes installed:
Microsoft.AspNetCore.All 2.1.11 [/home/ec2-user/dotnet/shared/Microsoft.AspNetCore.All]
Microsoft.AspNetCore.App 2.1.11 [/home/ec2-user/dotnet/shared/Microsoft.AspNetCore.App]
Microsoft.NETCore.App 2.1.11 [/home/ec2-user/dotnet/shared/Microsoft.NETCore.App]
To install additional .NET Core runtimes or SDKs:
https://aka.ms/dotnet-download
Amazon Linux用のパッケージは存在しなかった為、下記サイトから、Lambdaのランタイムとして対応している.Net Core 2.1
の最新のものから、NET Core Binaries: x64
をダウンロードしました。
Amazon.Lambda.ToolsとLambdaテンプレートのインストール
Amazon.Lambda.Tools
プラグインを利用してデプロイを行う為、インストールしておきます。
cm-nishizawa.tetsunori:~/downloads $ dotnet tool install -g Amazon.Lambda.Tools
Welcome to .NET Core!
---------------------
Learn more about .NET Core: https://aka.ms/dotnet-docs
Use 'dotnet --help' to see available commands or visit: https://aka.ms/dotnet-cli-docs
Telemetry
---------
The .NET Core tools collect usage data in order to help us improve your experience. The data is anonymous and doesn't include command-line arguments. The data is collected by Microsoft and shared with the community. You can opt-out of telemetry by setting the DOTNET_CLI_TELEMETRY_OPTOUT environment variable to '1' or 'true' using your favorite shell.
Read more about .NET Core CLI Tools telemetry: https://aka.ms/dotnet-cli-telemetry
Configuring...
--------------
A command is running to populate your local package cache to improve restore speed and enable offline access. This command takes up to one minute to complete and only runs once.
Decompressing 100% 9382 ms
Expanding 100% 30250 ms
ASP.NET Core
------------
Successfully installed the ASP.NET Core HTTPS Development Certificate.
To trust the certificate run 'dotnet dev-certs https --trust' (Windows and macOS only). For establishing trust on other platforms refer to the platform specific documentation.
For more information on configuring HTTPS see https://go.microsoft.com/fwlink/?linkid=848054.
You can invoke the tool using the following command: dotnet-lambda
Tool 'amazon.lambda.tools' (version '3.2.3') was successfully installed.
続けて、Amazon.Lambda.Templates
をインストールして、雛形となるテンプレートを利用できるようにしておきます。
cm-nishizawa.tetsunori:~/downloads $ dotnet new -i Amazon.Lambda.Templates
Getting ready...
Restore completed in 1.78 sec for /home/ec2-user/.templateengine/dotnetcli/v2.1.700/scratch/restore.csproj.
Usage: new [options]
Options:
-h, --help Displays help for this command.
-l, --list Lists templates containing the specified name. If no name is specified, lists all templates.
-n, --name The name for the output being created. If no name is specified, the name of the current directory is used.
-o, --output Location to place the generated output.
-i, --install Installs a source or a template pack.
-u, --uninstall Uninstalls a source or a template pack.
--nuget-source Specifies a NuGet source to use during install.
--type Filters templates based on available types. Predefined values are "project", "item" or "other".
--force Forces content to be generated even if it would change existing files.
-lang, --language Filters templates based on language and specifies the language of the template to create.
Templates Short Name Language Tags
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
Order Flowers Chatbot Tutorial lambda.OrderFlowersChatbot [C#] AWS/Lambda/Function
Lambda Custom Runtime Function lambda.CustomRuntimeFunction [C#], F# AWS/Lambda/Function
Lambda Detect Image Labels lambda.DetectImageLabels [C#], F# AWS/Lambda/Function
Lambda Empty Function lambda.EmptyFunction [C#], F# AWS/Lambda/Function
Lex Book Trip Sample lambda.LexBookTripSample [C#] AWS/Lambda/Function
Lambda Simple Application Load Balancer Function lambda.SimpleApplicationLoadBalancerFunction [C#] AWS/Lambda/Function
Lambda Simple DynamoDB Function lambda.DynamoDB [C#], F# AWS/Lambda/Function
Lambda Simple Kinesis Firehose Function lambda.KinesisFirehose [C#] AWS/Lambda/Function
Lambda Simple Kinesis Function lambda.Kinesis [C#], F# AWS/Lambda/Function
Lambda Simple S3 Function lambda.S3 [C#], F# AWS/Lambda/Function
Lambda Simple SQS Function lambda.SQS [C#] AWS/Lambda/Function
Lambda ASP.NET Core Web API serverless.AspNetCoreWebAPI [C#], F# AWS/Lambda/Serverless
Lambda ASP.NET Core Web Application with Razor Pages serverless.AspNetCoreWebApp [C#] AWS/Lambda/Serverless
Serverless Detect Image Labels serverless.DetectImageLabels [C#], F# AWS/Lambda/Serverless
Lambda DynamoDB Blog API serverless.DynamoDBBlogAPI [C#] AWS/Lambda/Serverless
Lambda Empty Serverless serverless.EmptyServerless [C#], F# AWS/Lambda/Serverless
Lambda Giraffe Web App serverless.Giraffe F# AWS/Lambda/Serverless
Serverless Simple S3 Function serverless.S3 [C#], F# AWS/Lambda/Serverless
Step Functions Hello World serverless.StepFunctionsHelloWorld [C#], F# AWS/Lambda/Serverless
Console Application console [C#], F#, VB Common/Console
Class library classlib [C#], F#, VB Common/Library
Unit Test Project mstest [C#], F#, VB Test/MSTest
NUnit 3 Test Project nunit [C#], F#, VB Test/NUnit
NUnit 3 Test Item nunit-test [C#], F#, VB Test/NUnit
xUnit Test Project xunit [C#], F#, VB Test/xUnit
Razor Page page [C#] Web/ASP.NET
MVC ViewImports viewimports [C#] Web/ASP.NET
MVC ViewStart viewstart [C#] Web/ASP.NET
ASP.NET Core Empty web [C#], F# Web/Empty
ASP.NET Core Web App (Model-View-Controller) mvc [C#], F# Web/MVC
ASP.NET Core Web App razor [C#] Web/MVC/Razor Pages
ASP.NET Core with Angular angular [C#] Web/MVC/SPA
ASP.NET Core with React.js react [C#] Web/MVC/SPA
ASP.NET Core with React.js and Redux reactredux [C#] Web/MVC/SPA
Razor Class Library razorclasslib [C#] Web/Razor/Library/Razor Class Library
ASP.NET Core Web API webapi [C#], F# Web/WebAPI
global.json file globaljson Config
NuGet Config nugetconfig Config
Web Config webconfig Config
Solution File sln Solution
Examples:
dotnet new mvc --auth Individual
dotnet new webapi
dotnet new --help
- C# .NET の Lambda デプロイパッケージをビルドする
- NuGet Gallery | Amazon.Lambda.Tools 3.2.3
- .NET Core CLI - AWS Lambda
- NuGet Gallery | Amazon.Lambda.Templates 3.7.1
プロジェクト作成とLambdaデプロイ
ここまで準備ができていまえば、下記記事の通りですが、念の為、動作確認をしておきます。
cm-nishizawa.tetsunori:~/downloads $ cd ~/environment/
cm-nishizawa.tetsunori:~/environment $ dotnet new lambda.S3 --name lambda_s3
The template "Lambda Simple S3 Function" was created successfully.
cm-nishizawa.tetsunori:~/environment $ cd lambda_s3/src/lambda_s3/
cm-nishizawa.tetsunori:~/environment/lambda_s3/src/lambda_s3 $ ls -l
total 24
-rw-rw-r-- 1 ec2-user ec2-user 706 May 24 13:51 aws-lambda-tools-defaults.json
drwxrwxr-x 3 ec2-user ec2-user 4096 May 24 14:09 bin
-rw-rw-r-- 1 ec2-user ec2-user 2438 May 24 13:51 Function.cs
-rw-rw-r-- 1 ec2-user ec2-user 581 May 24 13:51 lambda_s3.csproj
drwxrwxr-x 3 ec2-user ec2-user 4096 May 24 14:09 obj
-rw-rw-r-- 1 ec2-user ec2-user 2381 May 24 13:51 Readme.md
cm-nishizawa.tetsunori:~/environment/lambda_s3/src/lambda_s3 $ dotnet lambda deploy-function lambda_s3
Amazon Lambda Tools for .NET Core applications (3.2.3)
Project Home: https://github.com/aws/aws-extensions-for-dotnet-cli, https://github.com/aws/aws-lambda-dotnet
Executing publish command
Deleted previous publish folder
... invoking 'dotnet publish', working folder '/home/ec2-user/environment/lambda_s3/src/lambda_s3/bin/Release/netcoreapp2.1/publish'
... Disabling compilation context to reduce package size. If compilation context is needed pass in the "/p:PreserveCompilationContext=false" switch.
... publish: Microsoft (R) Build Engine version 16.1.76+g14b0a930a7 for .NET Core
... publish: Copyright (C) Microsoft Corporation. All rights reserved.
... publish: Restore completed in 102.68 ms for /home/ec2-user/environment/lambda_s3/src/lambda_s3/lambda_s3.csproj.
... publish: lambda_s3 -> /home/ec2-user/environment/lambda_s3/src/lambda_s3/bin/Release/netcoreapp2.1/rhel.7.2-x64/lambda_s3.dll
... publish: lambda_s3 -> /home/ec2-user/environment/lambda_s3/src/lambda_s3/bin/Release/netcoreapp2.1/publish/
Changed permissions on published file (chmod +rx AWSSDK.S3.dll).
Changed permissions on published file (chmod +rx Amazon.Lambda.S3Events.dll).
Changed permissions on published file (chmod +rx Newtonsoft.Json.dll).
Changed permissions on published file (chmod +rx lambda_s3.pdb).
Changed permissions on published file (chmod +rx lambda_s3.runtimeconfig.json).
Changed permissions on published file (chmod +rx lambda_s3.deps.json).
Changed permissions on published file (chmod +rx Amazon.Lambda.Serialization.Json.dll).
Changed permissions on published file (chmod +rx lambda_s3.dll).
Changed permissions on published file (chmod +rx AWSSDK.Core.dll).
Changed permissions on published file (chmod +rx Amazon.Lambda.Core.dll).
Zipping publish folder /home/ec2-user/environment/lambda_s3/src/lambda_s3/bin/Release/netcoreapp2.1/publish to /home/ec2-user/environment/lambda_s3/src/lambda_s3/bin/Release/netcoreapp2.1/lambda_s3.zip
... zipping: adding: AWSSDK.S3.dll (deflated 65%)
... zipping: adding: Amazon.Lambda.S3Events.dll (deflated 46%)
... zipping: adding: Newtonsoft.Json.dll (deflated 60%)
... zipping: adding: lambda_s3.pdb (deflated 32%)
... zipping: adding: lambda_s3.runtimeconfig.json (deflated 23%)
... zipping: adding: lambda_s3.deps.json (deflated 81%)
... zipping: adding: Amazon.Lambda.Serialization.Json.dll (deflated 49%)
... zipping: adding: lambda_s3.dll (deflated 53%)
... zipping: adding: AWSSDK.Core.dll (deflated 67%)
... zipping: adding: Amazon.Lambda.Core.dll (deflated 46%)
Created publish archive (/home/ec2-user/environment/lambda_s3/src/lambda_s3/bin/Release/netcoreapp2.1/lambda_s3.zip).
Updating code for existing function lambda_s3
テンプレートから作成されたプロジェクトを無事にデプロイすることができました!こちらをベースに要件に合わせてコードを修正していけば、Lambdaの開発も捗りそうです。
ちなみに、--region
指定なしでもCloud9環境が動作する環境のリージョンが指定され、--profile
指定なしでAWS Management ConsoleにログインしたIAM権限の一時クレデンシャルにて動作することが確認できました!
cm-nishizawa.tetsunori:~/environment/lambda_s3/src/lambda_s3 $ aws configure list
Name Value Type Location
---- ----- ---- --------
profile <not set> None None
access_key ****************YO5K shared-credentials-file
secret_key ****************h1kV shared-credentials-file
region us-west-2 config-file ~/.aws/config
まとめ
今回はこれまであまり触れたことの無かった".Net Core on Lambda"の開発環境を作ることになったのですが、ローカル環境に依存せず共有または環境を再現できるようにしておきたかったので、Cloud9がぴったりハマりました。
どこかの誰かのお役に立てば嬉しいです。