14
18

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Lambda関数をアプリ化して、Serverless Application Repositoryで公開しよう [15分で完成編]

Last updated at Posted at 2019-05-08

🔶 はじめに

業務の中で、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を使います。

🔶 作業手順

  1. サーバレスアプリケーションの作成
  2. Lambda関数から、ソースコードとSAMファイルを取得
  3. S3にソースコードを格納
  4. SAMファイルの修正
  5. Serverless Application Repositoryに、サーバレスアプリケーションを登録

🔶 サーバレスアプリケーションの作成

まずは、Lambda関数をサーバレスアプリケーション化します。
何でも良いですが、今回は用意されているサンプルの関数を使用します。

サンプルの関数を用意する方法が分からなければ、以下を参照してください。
参考:[API Gateway + LambdaでREST API開発を体験しよう [10分で完成編]]
(https://qiita.com/tamura_CD/items/46ba8a2f3bfd5484843f)

🔷 Lambda関数から、ソースコードとSAMファイルを取得

1. Lambda関数を選択して、画面上部の [アクション] → [関数のエクスポート] をクリックする。
001.png

2. 以下のダイアログが表示されるので、[AWS SAMファイルのダウンロード] [デプロイパッケージのダウンロード]の両方をクリックする。
002.png

⬛ SAMファイル

  • AWSにはサーバーレスアプリケーションを構築するために使用するフレームワークがあるのですが、そこで構築するために必要な定義情報が書かれたファイル。
  • 開いてみたらわかりますが、今回はLambda関数のプロジェクト情報が書かれています。

⬛ デプロイパッケージ

  • 関数のソースコード一式を、ZIPで圧縮したもの。
  • 開いてみたら分かりますが、今回はJSファイルが圧縮されているだけです。

🔷 S3にソースコードを格納

1. S3のバケットを作成して、 ポリシーを設定する。

[アクセス権限] → [バケットポリシー] を開く。
003.png
以下のようにポリシーを記述します。

バケットポリシー
 {
    "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のバケットに、先程ダウンロードしたデプロイパッケージをアップロードします。
アップロードしたら、以下の[コピーパス]をクリックして、ファイルのパスを取得します。
004.png

🔷 SAMファイルの修正

1. 先程ダウンロードしたSAMファイルを開いて、設定情報を記載する。

SAMファイルを開いて、以下のCodeUriに先程コピーしたファイルパスを貼り付けます。

sample_Hello.yaml
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で、公開したいアプリの情報を登録する。
[マイアプリケーション] → [アプリケーションの公開] をクリックする。
005.png

以下の画面に遷移するので、公開したいアプリの情報を入力します。
006.png
一点注意したいのが、登録の際に指定したリージョンでしか、アプリケーションを利用する事はできないという点です。(今回で言えば、アプリの利用はオハイオ限定になります)
変更したい場合は、ここで変更します。

⬛アプリケーション名
任意の名称をセットします。

⬛筆者
任意の名称をセットします。

⬛Home page
Github等の、アプリについてのサイトがあればセットします。

⬛アプリケーションの説明
利用者が分かりやすいうように、アプリケーションについての説明をセットします。

⬛アプリケーション名
任意の名称をセットします。

⬛Labels
任意のラベル名をセットする。
管理の事を考えると、何かしらの単語をセットする事を推奨します。

⬛SPDXライセンス
本アプリをどのうように公開するか、ライセンスを設定します。

続き
007.png

⬛ライセンス
SPDXライセンスを選択すると、自動的にセットされます。
任意のファイルをアップロードしたり、直接ライセンスを記述する事もできます。

⬛Readme
前述までを入力すると、雛形の内容が自動的にセットされます。
任意のファイルをアップロードしたり、直接ライセンスを記述する事もできます。

⬛セマンティックバージョン
アプリのバージョンを、セマンティックバージョンの書式(1.0.0のような書き方)でセットします。

⬛ソースコードURL
ソースコードをGithub等で公開している場合、URLをセットします。

続き
008.png

⬛SAMテンプレート
先程修正した、SAMファイルをアップロードします。

上記を一通り入力したら、[アプリケーションの公開]をクリックします。

以下の画面に遷移すると、Lambda関数がサーバレスアプリケーションとして公開されます。
009.png

🔶 動作確認

1. Serverless Application Repositoryで、公開したアプリをデプロイする。

[Available applications] → [Private applications] を開いて、先程登録した[helloApps]をクリックします。
010.png

Lambda画面に遷移するので、最下部にある[デプロイ]をクリックします。
011.png

しばらく待つとデプロイが終わり、以下の画面に遷移します。
012.png

左のメニューの[アプリケーション]をクリックすると、アプリケーションがデプロイされている事が確認できます。
013.png

2. デプロイしたアプリを削除する。
デプロイしたアプリケーション、[serverlessrepo-helloApps]をクリックします。
014.png

[CloudFormationスタック]をクリックします。
015.png

CloudFormationの画面に遷移するので、右上の [その他のアクション] → [スタックの削除] をクリックする。
016.png

確認ダイアログが表示されるので、[はい、削除する]をクリックします。
017.png

これで、しばらく待つとアプリは完全に削除されます。

🔶 まとめ

以上の手順で、Lambda関数をサーバレスアプリケーションとして、AWSアカウント内に公開する事ができます。

難しいポイントは、SAMファイルの設定で、今回はアプリとして利用しているサービスがLambdaのみだったのでシンプルでしたが、API GatewayやRDS等、他のサービスが絡む程、記載内容が膨らみます。

ただ、今回のようなちょっとしたアプリであれば、SAMファイルの最低限の修正で、簡単に公開する事ができます。
ぜひ、作ったLambda関数をみんなに公開してみてください。

🔶 応用編

今回はアカウント内でのアプリ公開でしたが、他のAWSアカウントに公開する事もできます。
興味があれば挑戦してみてください。

🔶 参考

14
18
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
18

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?