[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」のお世話になりましょう。
今回のお話はここまで!
読んでくださってありがとうございました。またお会いしましょう!