🛌

NewRelicリソースをCfnで作れるというのでCFnレジストリに挑戦してみたが結果理解不足でリソース作成完了までいけなかった話。

2023/09/28に公開

NewRelicリソースをCfnで作れるという記事を発見

面白そうなUpdateは高い割合で入眠寸前に目に入る気がします。

https://newrelic.com/blog/how-to-relic/streamline-provisioning-with-new-relic-resource-types-on-the-cloudformation-registry?sc_channel=sm&sc_campaign=AWS_CloudFormation&sc_publisher=TWITTER&sc_country=global&sc_geo=GLOBAL&sc_outcome=awareness&trkCampaign=AWSCloudFormation&sc_content=AWSCloudFormation&sc_category=AWS CloudFormation&trk=AWSCloudFormation&linkId=237867677

NewRelicの存在と概要はざっくりとだけわかっていますが、なかなか触る機会も作れず今に至ります。
単純に興味が湧いた為、上記記事にある以下のYamlを実行する為に、CloudFormationレジストリに初挑戦してみます。

AWSTemplateFormatVersion: 2010-09-09
Description: Sample New Relic Workloads Template
Resources:
  Resource1:
    Type: 'NewRelic::Observability::Workloads'
    Properties:
      Workload: >-
         {name: "CloudFormationTest-Create"}
Outputs:
  CustomResourceGuid:
    Value: !GetAtt Resource1.Guid
  BaselineConditionId:
    Value: !GetAtt BaselineConditionResource.Id
  BaselineConditionEntityGuid:
    Value: !GetAtt BaselineConditionResource.EntityGuid

※潔くお伝えすると、タイトルにもある通り最終的に理解不足で上手くいきませんでした。
後日知識が更新された場合その旨追記の上記事更新いたしますが、その前提の上お付き合いください。

※記事内の引用元は以下ドキュメントに派生するページからそれぞれ抜粋しております。
https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/registry-public.html


早速挑戦

CFnコンソールに移動。







赤帯いただきました。


以下ドキュメントにあるようにロールを作成してARNを入力してみます。
https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/registry-public.html?icmpid=docs_cfn_console#registry-public-enable-execution-role

これで次の画面には進めたものの、「拡張機能を設定」ボタンを押下して次に進もうとするとエラーが発生。


一旦わからないので断念。

公式ドキュメントから、

拡張機能は、AWS CLI の register-type コマンドを使用するか、CloudFormation CLI の submit コマンドを使用して登録できます。
CLIを使用してプライベートエクステンションを登録するには、CloudFormation CLIユーザーガイドの「CloudFormationエクステンションの登録」を参照してください。

という一文を発見。

ちなみに、以下のような注意書きも目に入る。

プライベート拡張、およびサードパーティーパブリッシャーからのアクティブ化されたパブリック拡張は、作成、読み取り、更新、一覧表示、および削除オペレーション中に実行されるイベントハンドラーを実装する場合があります。そのため、CloudFormationスタックでこれらの拡張機能を使用すると、アカウントに課金されます。これは、作成されたリソースに対して発生した料金に追加されます。詳細については、「AWS CloudFormation 料金表」を参照してください。

との事です。

実際に飛び先のページを確認した所、

無料利用枠 1,000 件のハンドラーオペレーション/月/アカウント **
ハンドラーオペレーション ハンドラーオペレーションごとに 0.0009 USD
ハンドラーオペレーション期間 1 秒あたり 0.00008 USD *

この料金部分の事であれば、個人的にあまり気にする必要のある金額ではないと感じた為、そのまま実行する事に。

とここで、触っている内容について為になりそうなクラメソさんブログも発見したので参考にさせていただく事に。
https://dev.classmethod.jp/articles/cloudformation-supports-modules/

$pip install cloudformation-cli-python-plugin

$cfn init

Initializing new project
Found existing settings - overwrite (y/N)?
[username]::S3::Bucket::MODULE
>> y
Do you want to develop a new resource(r) or a module(m) or a hook(h)?.
>> r
What's the name of your resource type?
(Organization::Service::Resource)
>> NewRelic::Observability::Workloads
Select a language for code generation:
[1] python36
[2] python37
[3] python38
[4] python39
(enter an integer):
>> 4
Use docker for platform-independent packaging (Y/n)?
This is highly recommended unless you are experienced
with cross-platform Python packaging.
>> Y
Initialized a new project in /Users/[username]


実行ディレクトリを確認すると色々ファイルが出来ています。

$cfn submit --region us-east-1

Explicitly specify value for insertionOrder for array: Authors
Explicitly specify value for tagging
Resource schema is valid.
Starting Docker build. This may take several minutes if the image 'public.ecr.aws/sam/build-python3.9' needs to be pulled first.
Successfully submitted type. Waiting for registration with token 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' to complete.
Registration complete.
{'ProgressStatus': 'COMPLETE', 'Description': 'Deployment is currently in DEPLOY_STAGE of status COMPLETED', 'TypeArn': 'arn:aws:cloudformation:us-east-1:123456789012:type/resource/NewRelic-Observability-Workloads', 'TypeVersionArn': 'arn:aws:cloudformation:us-east-1:123456789012:type/resource/NewRelic-Observability-Workloads/00000001', 'ResponseMetadata': {'RequestId': 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': 'xxxxxxxxxxxxx-xxxx-xxxx-xxxxxxxxxxxx', 'date': 'Wed, 27 Sep 2023 18:21:59 GMT', 'content-type': 'text/xml', 'content-length': '711', 'connection': 'keep-alive'}, 'RetryAttempts': 0}}


「build」が増えました。(途中で気づきましたが、恐らくこのタイミング)


awsコマンドで確認。

$aws cloudformation describe-type --type RESOURCE --type-name NewRelic::Observability::Workloads

{
    "Arn": "arn:aws:cloudformation:ap-northeast-1:123456789012:type/resource/NewRelic-Observability-Workloads/00000001",
    "Type": "RESOURCE",
    "TypeName": "NewRelic::Observability::Workloads",
    "DefaultVersionId": "00000001",
    "IsDefaultVersion": true,
    "Description": "An example resource schema demonstrating some basic constructs and validation rules.",
    "Schema": "{\n    \"typeName\": \"NewRelic::Observability::Workloads\",\n 
   ~後略~


マネコンを確認してみます。

さっきはマネコンからは理解不足で頓挫しましたが、どうやらこっちからは上手くいったようです。

この時点で遅れて気づきましたが、それぞれのタイミングでスタックも作成されていたようです。


CFnのテンプレに関するドキュメントのようなものがgithub上にあるようなのでチェック。
https://github.com/newrelic/newrelic-cloudformation-resource-providers-workloads


ここまでを確認して「有効なテンプレート」と記載のあるyamlを実行してみましたが、createfailedのエラー文が↓であり、その意図が掴めませんでした。(前提知識不足)

Properties validation failed for resource Resource1 with message: #: required key [TestCode] not found #: required key [Title] not found #: extraneous key [Workload] is not permitted

NerRelicのリソースタイプで必須の項目が足りないのか、CFnレジストリでなんらかの作業が足りていないのか掴めていない状態ではありましたが、エラー文をそのまま検索した所 恐らくは前者なのではと感じました。

が、NewRelic自体も理解のない状況の為、すぐに解決する事は難しそうという事であえなく断念する事にしました(そこそこ時間使ったが解決せず。悔しい)


終わりに

記事としてこのような終わり方でお恥ずかしいのですが、
・「CloudFormationレジストリ」というものが存在する事(そしてそのなんとなくの雰囲気)
・NewRelicが上記に対応した事。

という二つのみになりますがお持ち帰りいただければ幸いです。

あまり時間が経過しないうちに理解を深めて更新したいと思います。

Discussion