📌
go言語でaws-samを使用し、lambda関数を作成する
go1.xのランタイムがaws-samでのサポートを終了したため、go言語でaws-samを使う方法があまり世の中に出回っていない気がします。なので今回簡単な方法をまとめてみました。
以下のコマンドをDownloadsディレクトリなどで実行
sam init
以下のように設定。ここに記述されていないものは基本デフォルトでOK。あとはプロジェクト名をつける。
Which template source would you like to use?
1 - AWS Quick Start Templates
2 - Custom Template Location
Choice: 1
Choose an AWS Quick Start application template
1 - Hello World Example
2 - Multi-step workflow
3 - Serverless API
4 - Scheduled task
5 - Standalone function
6 - Data processing
7 - Hello World Example With Powertools
8 - Infrastructure event management
9 - Serverless Connector Hello World Example
10 - Multi-step workflow with Connectors
11 - Lambda EFS example
12 - DynamoDB Example
13 - Machine Learning
Template: 1
Use the most popular runtime and package type? (Python and zip) [y/N]: N
Which runtime would you like to use?
1 - dotnet8
2 - dotnet6
3 - go (provided.al2)
4 - go (provided.al2023)
5 - graalvm.java11 (provided.al2)
6 - graalvm.java17 (provided.al2)
7 - java21
8 - java17
9 - java11
10 - java8.al2
11 - nodejs20.x
12 - nodejs18.x
13 - nodejs16.x
14 - python3.9
15 - python3.8
16 - python3.12
17 - python3.11
18 - python3.10
19 - ruby3.3
20 - ruby3.2
21 - rust (provided.al2)
22 - rust (provided.al2023)
Runtime: 3
What package type would you like to use?
1 - Zip
2 - Image
Package type: 1
VSCodeで作成したフォルダを開く。
以下の2点を行う
①以下のコードをtemplate.yamlに貼り付ける。
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: Lambda function using Go
Resources:
HelloWorldFunction:
Type: AWS::Serverless::Function
Properties:
Handler: bootstrap # Handlerとして 'bootstrap' を指定
Runtime: provided.al2 # provided.al2 を指定
CodeUri: ./hello-world # hello-worldディレクトリを指定
PackageType: Zip
MemorySize: 512
Timeout: 900
Policies:
- AWSLambdaBasicExecutionRole
②Makefileをhello-worldディレクトリに移動させる。
buildの実行
以下のコマンドを実行。
sam build
そしてhello-worldディレクトリに移動して以下のコマンドを打つ
GOOS=linux GOARCH=amd64 go build -o bootstrap main.go
そして次に以下のコマンドを実行
zip function.zip bootstrap
この2つのbootstrap、function.zipファイルをHelloWorldFunctionディレクトリに移動させる。
デプロイ
以下のコマンドでデプロイ
sam deploy guided
最後に以下のコマンドをターミナルでうち、環境変数を登録して終了
aws lambda update-function-configuration \
--function-name 関数名 \
--environment "Variables={API_USERNAME=aaa,API_PASSWORD=aaa,API_CLIENT_ID=aaa,API_CLIENT_SECRET=aaa}"
Discussion