11
6

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 3 years have passed since last update.

serverless framework (AWS) のプラグインについて

Posted at

最近 AWS Lambda を開発・デプロイするにあたり、serverless framework を使っているのですが、多くのnpmプラグインがあります。

今回は今まで利用したプラグインを備忘録としてまとめておきます。

serverless-domain-manager

API Gatewayのカスタムドメインを作ることができます

amplify-education/serverless-domain-manager: Serverless plugin for managing custom domains with API Gateways.

設定例

下記で、ACMによる証明書の発行、Route53へのレコード登録、カスタムドメイン設定の追加を行えます。

serverless.yml
custom:
  defaultStage: dev
  customDomain:
    domainName: hogehoge.fugafuga.com
    basePath: ${self:provider.stage}
    stage: ${self:provider.stage}
    certificateName: '*.fugafuga.com'
    createRoute53Record: true

serverless-offline

serverless framework の設定を使って、ローカルで Lambda と APIGateway をエミュレートするためのプラグインになります。

dherault/serverless-offline: Emulate AWS λ and API Gateway locally when developing your Serverless project

設定例

plugins に以下を追加して実行するだけで起動します。

servereless.yml

plugins:
  - serverless-offline
serverless offline start

あとは APIGateewayのようにリクエストを投げればOKです

curl -H 'x-api-key:<offline実行時に発行されたキー>' <URL>

serverless-offline-ssm-provider

serverless framework上で環境変数に SSM からの値を適応したい時、ローカル上でも再現する場合に使います。

.env ファイルをSSMのリソースと見立てて読み込むことができます。

serverless-plugins/packages/serverless-offline-ssm-provider at master · CoorpAcademy/serverless-plugins

設定例

serverless.yml

plugins:
  - serverless-offline-ssm-provider
  - serverless-offline

functions:
  ssm_sample:
    name: ${self:service}_${self:provider.stage}
    handler: lambda.handler
    role: <Lambdaに設定するロール>
    environment:
      SSM_PARAMETER_VALUE: ${ssm:sample_ssm_parameter}
.env
sample_ssm_parameter=plain_text

serverless-s3-local

serverless-offline で ローカルで S3 をエミュレートするためのツールです。S3のEventにも対応してます。

ar90n/serverless-s3-local

設定例

(リポジトリ内にもサンプルがあります)

serverless.yml
service: local-s3

plugins:
  - serverless-offline
  - serverless-s3-local

provider:
  name: aws
  runtime: python3.7
  stage: ${opt:stage, self:custom.defaultStage}
  s3:
    port: 4569
    directory: /tmp # ホストマシンでファイルを配置したいディレクトリを指定します

custom:
  defaultStage: dev
functions:
  s3hook:
    name: ${self:service}_${self:provider.stage}
    handler: lambda.handler
    role: <Lambdaに設定するロール>
    events:
      - s3:
          bucket: local-bucket
          events:
            - s3:ObjectRemoved:*
          rules:
            - suffix: .txt

ローカルS3の AWS-CLI によるアクセス方法

  • ~/.aws/config~/.aws/credential を編集しておきます。(別 profileで分けておきます)
~/.aws/config
[s3local]
region=<Lambdaと同じregion>
~/.aws/credential
[s3local]
aws_access_key_id=S3RVER
aws_secret_access_key=S3RVER
  • serverless offline を用いて、Lambdaを実行します
serverelss offline start
  • ローカルS3のファイルを操作するには、エンドポイントを指定します(AWS CLIが必要です)
    • S3はオブジェクトストレージなので、指定したホストマシン側のS3ファイル保存先パスにファイルコピーするだけだとダメです。ホストマシンはファイルシステムなので、保存形式が異なります。
# コピーの例です
aws --endpoint="localhost:4569" s3 cp ~/tmp/data.csv s3://local-bucket/userdata.csv --profile s3local

serverless-existing-s3

S3が既にある場合にS3イベントを紐付けするためのプラグイン。

serverless framework v1.48~ はS3が既にある場合も紐付けが可能ですが、こちらの方法だと内部で IAMロール を作成しないため、一応紹介しておきます。

matt-filion/serverless-external-s3-event: Deprecated: No longer needed as serverless.com natively supports external buckets now.

設定例

serverless.yml
plugins:
  - serverless-plugin-existing-s3

provider:
  name: aws

custom:
  defaultStage: dev
functions:
  integrationS3:
    name: ${self:service}_${self:provider.stage}
    handler: lambda.handler
    role: <Lambdaに設定するロール>
    events:
      - existingS3:
          bucket: hogehoge-s3-bucket
          events:
            - s3:ObjectCreated:PUT

終わりに

今回紹介したのは、ローカルにAWSをエミュレートするようなプラグインばかりでした。。。

serverless framework はアップデートも周辺プラグインの更新も早いので、今後の動向に注意して使いたいですね。

11
6
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
11
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?