🔶 はじめに
業務の中で、Lambdaでちょっとした便利な関数を作っても、自分だけが使ってるだけでは勿体無いです。
しかし、他の人にもLambda関数を使ってもらおうと思うと、環境変数や権限設定が煩雑で、「気軽にどうぞ」とはなかなか行きません。
ところが、AWSのServerless Application Repositoryを使う事で、Lambda関数を、ボタンクリックでインストールできるアプリとして、公開する事が可能です。
🔶 利用サービス
🔷 Serverless Application Repository
https://aws.amazon.com/jp/serverless/serverlessrepo/
公式サイトの説明は以下の通りです。
AWS Serverless Application Repository は、サーバーレスアプリケーション用のマネージド型リポジトリです。チーム、組織、開発者個人が、再利用可能なアプリケーションを保存して共有できます。また、強力な新しい方法でサーバーレスアーキテクチャを簡単に組み立ててデプロイすることもできます。
一言で言うと、サーバレスアプリケーションを作成して登録すると、みんながボタンクリックで、登録したアプリをすぐに使えるようにしてくれるサービスです。
アプリを一般公開する事も可能ですが、今回は自分のAWSアカウント内の公開とします。
🔷 Lambda
https://aws.amazon.com/jp/lambda/
様々な言語のコードをデプロイできる実行環境。
ここで作った関数を、サーバレスアプリケーションにします。
🔷 Amazon S3
https://aws.amazon.com/jp/s3/
ストレージサービス。
サーバレスアプリケーションのソースコード置き場として使うので、実際には何でも良いのですが、今回はS3を使います。
🔶 作業手順
- サーバレスアプリケーションの作成
- Lambda関数から、ソースコードとSAMファイルを取得
- S3にソースコードを格納
- SAMファイルの修正
- Serverless Application Repositoryに、サーバレスアプリケーションを登録
🔶 サーバレスアプリケーションの作成
まずは、Lambda関数をサーバレスアプリケーション化します。
何でも良いですが、今回は用意されているサンプルの関数を使用します。
サンプルの関数を用意する方法が分からなければ、以下を参照してください。
参考:[API Gateway + LambdaでREST API開発を体験しよう [10分で完成編]]
(https://qiita.com/tamura_CD/items/46ba8a2f3bfd5484843f)
🔷 Lambda関数から、ソースコードとSAMファイルを取得
1. Lambda関数を選択して、画面上部の [アクション] → [関数のエクスポート] をクリックする。
2. 以下のダイアログが表示されるので、[AWS SAMファイルのダウンロード] [デプロイパッケージのダウンロード]の両方をクリックする。
⬛ SAMファイル
- AWSにはサーバーレスアプリケーションを構築するために使用するフレームワークがあるのですが、そこで構築するために必要な定義情報が書かれたファイル。
- 開いてみたらわかりますが、今回はLambda関数のプロジェクト情報が書かれています。
⬛ デプロイパッケージ
- 関数のソースコード一式を、ZIPで圧縮したもの。
- 開いてみたら分かりますが、今回はJSファイルが圧縮されているだけです。
🔷 S3にソースコードを格納
1. S3のバケットを作成して、 ポリシーを設定する。
[アクセス権限] → [バケットポリシー] を開く。
以下のようにポリシーを記述します。
{
"Version": "2012-10-17",
"Id": "■■■■■■■■■■■■■■■■■",
"Statement": [
{
"Sid": "chouhuku-sinakya-nandemo-yoi",
"Effect": "Allow",
"Principal": {
"Service": "serverlessrepo.amazonaws.com"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::sample-hello-bucket/*"
}
]
}
ポリシーの内容を簡単に解説すると、
- このバケットは、Serverless Application Repositoryで公開するアプリの、ソースコードの格納先になるので、バケットの利用を認める対象はServerless Application Repositoryになります。よって、
"Service": "serverlessrepo.amazonaws.com"
を設定します。 - このバケットに格納したソースコードを利用したいので、バケットの中を取得する
"Action": "s3:GetObject"
権限を設定します。 - 上記の設定の対象範囲としては、本バケット配下としたいので、
"Resource": "arn:aws:s3:::sample-hello-bucket/*"
を設定します。
2. S3のバケットに、ソースコードをアップロードする。
S3のバケットに、先程ダウンロードしたデプロイパッケージをアップロードします。
アップロードしたら、以下の[コピーパス]をクリックして、ファイルのパスを取得します。
🔷 SAMファイルの修正
1. 先程ダウンロードしたSAMファイルを開いて、設定情報を記載する。
SAMファイルを開いて、以下のCodeUri
に先程コピーしたファイルパスを貼り付けます。
AWSTemplateFormatVersion: '2010-09-09'
Transform: 'AWS::Serverless-2016-10-31'
Description: An AWS Serverless Specification template describing your function.
Resources:
sampleHello:
Type: 'AWS::Serverless::Function'
Properties:
Handler: index.handler
Runtime: nodejs8.10
CodeUri: s3://sample-hello-bucket/sample_Hello-cba9fc2c-bd5b-407c-81fa-cc8d832858ad.zip
Description: ''
MemorySize: 128
Timeout: 3
Role: 'arn:aws:iam::■■■■■■:role/service-role/sample_Hello-role-k6eww01p'
🔶 サーバレスアプリケーションの登録
1. Serverless Application Repositoryで、公開したいアプリの情報を登録する。
[マイアプリケーション] → [アプリケーションの公開] をクリックする。
以下の画面に遷移するので、公開したいアプリの情報を入力します。
一点注意したいのが、登録の際に指定したリージョンでしか、アプリケーションを利用する事はできないという点です。(今回で言えば、アプリの利用はオハイオ限定になります)
変更したい場合は、ここで変更します。
⬛アプリケーション名
任意の名称をセットします。
⬛筆者
任意の名称をセットします。
⬛Home page
Github等の、アプリについてのサイトがあればセットします。
⬛アプリケーションの説明
利用者が分かりやすいうように、アプリケーションについての説明をセットします。
⬛アプリケーション名
任意の名称をセットします。
⬛Labels
任意のラベル名をセットする。
管理の事を考えると、何かしらの単語をセットする事を推奨します。
⬛SPDXライセンス
本アプリをどのうように公開するか、ライセンスを設定します。
⬛ライセンス
SPDXライセンスを選択すると、自動的にセットされます。
任意のファイルをアップロードしたり、直接ライセンスを記述する事もできます。
⬛Readme
前述までを入力すると、雛形の内容が自動的にセットされます。
任意のファイルをアップロードしたり、直接ライセンスを記述する事もできます。
⬛セマンティックバージョン
アプリのバージョンを、セマンティックバージョンの書式(1.0.0のような書き方)でセットします。
⬛ソースコードURL
ソースコードをGithub等で公開している場合、URLをセットします。
⬛SAMテンプレート
先程修正した、SAMファイルをアップロードします。
上記を一通り入力したら、[アプリケーションの公開]をクリックします。
以下の画面に遷移すると、Lambda関数がサーバレスアプリケーションとして公開されます。
🔶 動作確認
1. Serverless Application Repositoryで、公開したアプリをデプロイする。
[Available applications] → [Private applications] を開いて、先程登録した[helloApps]をクリックします。
Lambda画面に遷移するので、最下部にある[デプロイ]をクリックします。
左のメニューの[アプリケーション]をクリックすると、アプリケーションがデプロイされている事が確認できます。
2. デプロイしたアプリを削除する。
デプロイしたアプリケーション、[serverlessrepo-helloApps]をクリックします。
CloudFormationの画面に遷移するので、右上の [その他のアクション] → [スタックの削除] をクリックする。
確認ダイアログが表示されるので、[はい、削除する]をクリックします。
これで、しばらく待つとアプリは完全に削除されます。
🔶 まとめ
以上の手順で、Lambda関数をサーバレスアプリケーションとして、AWSアカウント内に公開する事ができます。
難しいポイントは、SAMファイルの設定で、今回はアプリとして利用しているサービスがLambdaのみだったのでシンプルでしたが、API GatewayやRDS等、他のサービスが絡む程、記載内容が膨らみます。
ただ、今回のようなちょっとしたアプリであれば、SAMファイルの最低限の修正で、簡単に公開する事ができます。
ぜひ、作ったLambda関数をみんなに公開してみてください。
🔶 応用編
今回はアカウント内でのアプリ公開でしたが、他のAWSアカウントに公開する事もできます。
興味があれば挑戦してみてください。