Shogo's Blog

Oct 1, 2021 - 2 minute read - Comments - aws

AWS Lambda の Arm64 対応試してみた

AWS Lambda の ARM サポートが発表されましたね。

というわけで早速触ってみました。

祝日 API で試してみる

先日公開した祝日API で試してみました。

変更は実質2行です。簡単ですね!

diff --git a/holidays-api/Makefile b/holidays-api/Makefile
index a39a3fa..0908902 100644
--- a/holidays-api/Makefile
+++ b/holidays-api/Makefile
@@ -1,6 +1,6 @@
 .PHONY: build-HolidaysFunction
 build-HolidaysFunction:
-	GOOS=linux GOARCH=amd64 go build -o $(ARTIFACTS_DIR)/bootstrap -tags lambda.norpc ./cmd/bootstrap
+	GOOS=linux GOARCH=arm64 go build -o $(ARTIFACTS_DIR)/bootstrap -tags lambda.norpc ./cmd/bootstrap
 
 .PHONY: test
 test:
diff --git a/template.yaml b/template.yaml
index 73fe7bb..06db749 100644
--- a/template.yaml
+++ b/template.yaml
@@ -16,6 +16,7 @@ Resources:
       CodeUri: holidays-api/
       Handler: holidays-api
       Runtime: provided.al2
+      Architectures: [ arm64 ]
       Events:
         CatchAll:
           Type: HttpApi

APIを叩いてみましたが、問題なく動いているようですね。

% curl https://holidays-jp.shogo82148.com/2021/10/ | jq .
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100    15  100    15    0     0     90      0 --:--:-- --:--:-- --:--:--    90
{
  "holidays": []
}

・・・今年の10月は祝日がないだと・・・?

AWS SAM でのやり方

2021-10-02 9:38 追記

今朝確認したらドキュメントに追加されてました。

Architectures

The instruction set architecture for the function.

For more information about this property, see Lambda instruction set architectures in the AWS Lambda Developer Guide.

Valid values: One of x86_64 or arm64

Type: List

Required: No

Default: x86_64

AWS CloudFormation compatibility: This property is passed directly to the Architectures property of an AWS::Lambda::Function resource.

なお日本語版はまだない。

追記ここまで

2021-10-01 21:37 現在、最新の AWS SAM CLI で ARM が追加されています。

aws-sam-cli-bot released this 17 hours ago

リリースから 17 時間とできたてホヤホヤなので、今の所 CPUアーキテクチャーの指定方法は Undocumented でした・・・。

困ったので、 AWS Lambda の API ドキュメントを見ると、それっぽい項目がすでに追加されていますね。

Architectures

The instruction set architecture that the function supports. Enter a string array with one of the valid values. The default value is x86_64.

Type: Array of strings

Array Members: Fixed number of 1 item.

Valid Values: x86_64 | arm64

Required: No

AWS SAM の基盤となっている CloudFormation のテンプレートは、ほとんど API のリクエスト形式を流用しているので、ドキュメント通り Architectures に “Array of strings” を渡せば行けるんじゃ?とやってみたら行けました!

diff --git a/template.yaml b/template.yaml
index 73fe7bb..06db749 100644
--- a/template.yaml
+++ b/template.yaml
@@ -16,6 +16,7 @@ Resources:
       CodeUri: holidays-api/
       Handler: holidays-api
       Runtime: provided.al2
+      Architectures: [ arm64 ]
       Events:
         CatchAll:
           Type: HttpApi

スクリプト言語だとソースコードに変更がなく面白みに欠けるので、Go のバイナリをデプロイしてみました。 GOARCH=arm64 を指定して ARM64 のバイナリにクロスコンパイルします。

diff --git a/holidays-api/Makefile b/holidays-api/Makefile
index a39a3fa..0908902 100644
--- a/holidays-api/Makefile
+++ b/holidays-api/Makefile
@@ -1,6 +1,6 @@
 .PHONY: build-HolidaysFunction
 build-HolidaysFunction:
-	GOOS=linux GOARCH=amd64 go build -o $(ARTIFACTS_DIR)/bootstrap -tags lambda.norpc ./cmd/bootstrap
+	GOOS=linux GOARCH=arm64 go build -o $(ARTIFACTS_DIR)/bootstrap -tags lambda.norpc ./cmd/bootstrap
 
 .PHONY: test
 test:

まとめ

祝日を返して

参考