エンジニア

2021.09.29

[Tips]Serverless Frameworkでプラグイン「serverless-pseudo-parameters」にさよならバイバイしたお話

[Tips]Serverless Frameworkでプラグイン「serverless-pseudo-parameters」にさよならバイバイしたお話

ごきげんよう!ハンズラボの小川です。

昔からServerless Frameworkを使用されていた方であれば、みなさんきっと一度は「serverless-pseudo-parameters」のお世話になったことでしょう。そう、テンプレートに#{AWS::AccountId}と書いておけばデプロイ時に自動でAWSアカウントIDに置換してくれたりする、あのプラグインです。アカウントIDやリージョンのようなAWS固有情報の違いを意識せずに一つのテンプレートを使いまわせるのは、このプラグインのおかげでもありました。

そんな素敵プラグイン「serverless-pseudo-parameters」ですが、なんとServerless Framework 2.50.0 以降には同機能が標準搭載されました。というわけで、本当にプラグインを使用せずにAWSアカウントID等のAWS固有情報が自動変換されるか、実際に試してみました。

環境


macOS Big Sur
Framework Core: 2.59.0

やってみよう


ということで、実際に書いたserverless.ymlです。
今回は自動変換が試せれば良いので、ごく簡単にバケット名にAWSアカウントIDとリージョンを含んだS3バケットを作成します。

service: example
frameworkVersion: '>=1.53.0 <3.0.0'

plugins:

provider:
  name: aws
  runtime: python3.7
  region: ap-northeast-1
  stage: ${opt:stage, 'dev'}
  profile: ${env:AWS_PROFILE, 'sandbox'}
  environment:
    TZ: Asia/Tokyo
    STAGE: ${self:provider.stage}

custom:

package:

functions:

resources:
  Resources:
    ExampleBucket:
      Type: AWS::S3::Bucket
      Properties:
        BucketName: ${self:service}-${aws:accountId}-${aws:region}

注目していただきたいのは、${aws:accountId}と${aws:region}です。
ここに、AWSアカウントIDとリージョンが入ります。
「serverless-pseudo-parameters」を使用していた方であれば、「書き方がちょっと違うな?」とお気づきになるでしょう。

「serverless-pseudo-parameters」を使用する場合は、以下のルールで記述します。
  AWSアカウントIDを入れたい部分 → #{AWS::AccountId}
  リージョンを入れたい部分     → #{AWS::Region}

それに対し、Serverless Frameworkの標準機能を使用する場合は以下のルールで記述します。
  AWSアカウントIDを入れたい部分 → ${aws:accountId}
  リージョンを入れたい部分     → ${aws:region}

記述方法については、以下のサイトもご参照くださいね。
serverless-pseudo-parametersの公式サイト
Serverless Frameworkの公式サイト

さて、テンプレートが書けたので、slsコマンドを使ってデプロイします……正常終了しました!
AWS CLIでバケット名を確認してみます。

% aws s3 ls --profile sandbox
YYYY-MM-DD HH:mm:ss example-************-ap-northeast-1

(注)************部分は、実際はAWSのアカウントIDが入ります

(アカウントIDをマスクしているので分かりづらいですが)期待通りのバケット名になっていますね!
大成功です!

というわけで、Serverless Frameworkの標準機能でAWS固有情報を自動変換してみたお話でした。
ただし、この機能が使用できるのは、最初の方にも書いた通りServerless Framework 2.50.0 以降ですのでご注意を。訳あってServerless Frameworkをアップデートできない方は、引き続き「serverless-pseudo-parameters」のお世話になりましょう。

今回のお話はここまで!
読んでくださってありがとうございました。またお会いしましょう!

一覧に戻る