hero_picture
Cover Image for Amplify CLIのamplify add custom でyaml形式のCloudFormationテンプレートを使う

Amplify CLIのamplify add custom でyaml形式のCloudFormationテンプレートを使う

2023/03/03

こんにちは、クラウドソリューション事業部の本田です。気づけば今年ももう三月、今年一発目の更新になります。今更ですが本年もどうぞよろしくお願いします。今日は、AWS Amplifyに関連するネタを書こうと思います。

注意点

本記事の内容は自身の環境で動作確認を行なった内容になります。yamlフォーマットに関しては、現時点ではAmplifyのドキュメント等に記載されておらず、またAWSサポートからも可能であれば、jsonファイルをお使いくださいとのことでした。ですので利用については検証の上、自己責任でお願いいたします。

AWS Amplifyについて

公式サイトより引用しますと以下とあります。

AWS Amplify は、フロントエンドのウェブ/モバイルデベロッパーが AWS でフルスタックアプリケーションを簡単に構築、出荷、ホストできるようにする完全なソリューションであり、ユースケースの進化に合わせて幅広い AWS サービスを活用できる柔軟性を備えています。クラウドの専門知識は不要。https://aws.amazon.com/jp/amplify/

実際チュートリアルなどをしてみますと、ローカル環境で簡単なReactで作成したアプリケーションをデプロイすれば、例えばEC2などを建てずともインターネット経由で確認できるアプリを作る(ホスティング)ことができます。マネージドサービスですので、インフラ側の管理不要で開発者はアプリ側の開発だけに注力することができます。

カスタムリソースについて

AWS AmplifyではAWS Cloud Development Kit(CDK)またはAWS CloudFormationを使用し、Amplifyが作成したバックエンドに175以上のAWSサービスを追加することができます。AWS Amplifyでアプリを作成する際に、Amplify CLIを使うことで、ユーザーログイン用のサービスを使いたい場合はamplify add authと実行するとAmazon Cognitoが、APIの作成であればamplify add api と実行するとAWS Appsyncなど簡単に他のAWSサービスを構築することができるのですが、それらで用意されていないサービス(例えば通知用にAmazon SNSを使いたい、DBはAmazon RDSを使いたい)に関してはamplify add customを使うことで作成することができます。

実際に使ってみると以下のような感じなります。

ローカルのターミナルなどで

1.amplify add customを実行

2.How do you want to define this custom resource?でCFnテンプレートか、CDKかを定義

3.Provide a name for your custom resource でリソース名を定義

4.amplify/backend/custom/<リソース名>のディレクトリ名が作成される

5.4で作成されたディレクトリに、CFnテンプレートかCDKでリソースを定義する

6.amplify push -yでデプロイ

2でCFnテンプレートを選択すると、amplify/backend/custom/リソース名のディレクトリに<リソース名>-cloudformation-template.jsonのテンプレートファイルが作成されます。そしてこのまま作成されたjsonファイルを編集して、pushすればデプロイできるのですが、ふと思ったのがjsonでなくyamlを使いたいということです。jsonでも良いのですが、個人的なyamlの方が見やすくそちらを使いたいという個人的な思考です。色んな方のブログやチュートリアルを見ていてもjsonでやられている方が多く、方法がないか調べてみました。

結論:yamlを使えた

初めにxxx.yamlと任意の名前を使ってテンプレートを試してみたのですが、pushをしても何の変化もなくという感じでした。色々と調べてみたのですが特にそれらしき情報は見当たらずでして、試行錯誤してファイル名を<リソース名>-cloudformation-template.yamlにしてみたら無事カスタムリソースをデプロイすることができました。ちなみに追加したリソースは以下です。SNSを追加するだけのテンプレートです。

1AWSTemplateFormatVersion: '2010-09-09'
2Parameters:
3  env:
4    Type: String
5Resources:
6  Topic:
7    Type: AWS::SNS::Topic
8    Properties:
9      Subscription:
10        - Endpoint: hoge@hogehoge.com
11          Protocol: email
12      TopicName:
13        Ref: env
14Outputs:
15  TopicArn:
16    Value:
17      Ref: Topic
18

パラメーターのenvは設定が必須なようでした。試し時にパラメーターを削除してpushをするとエラーになりました。

1Parameter values specified for a template which does not require them.

最後に

https://docs.amplify.aws/cli/custom/cloudformation/

Amplify CLI資料を見ていたのですが、特にyamlに関する記載がありませんでした。動作検証をして使えそうなことは検証できましたが正式にはまだ使えることは明記されていません。今後のバージョンアップで正式に使えることを期待しましょう。