プログラマメモ2 - programmer no memo2

servelessでstepfunctionsをデプロイしてそのarnをパラメーターストアに保存したい。 2024/10/13

表題の通りなのですが、プラグインを使わないとえらく大変で、結局プラグインを用意して実現しました。
プラグイン自体はクロード(Claude)さんに生成してもらっています。
プラグインって大変だなーとはじめ思ってたのですが、やってみると案外簡単で、プラグインってデプロイ時のイベントで動いていると思えば、そのタイミングでやりたいことをやればよし。ここでは、'after:deploy:deploy'ですね。


import { SSMClient, PutParameterCommand } from "@aws-sdk/client-ssm";
import { CloudFormationClient, DescribeStacksCommand } from "@aws-sdk/client-cloudformation";

class StoreArnsPlugin {
  constructor(serverless, options) {
    this.serverless = serverless;
    this.options = options;
    this.hooks = {
      'after:deploy:deploy': this.storeArns.bind(this),
    };
  }

  async storeArns() {
    const region = this.serverless.service.provider.region;
    const ssmClient = new SSMClient({ region });
    const cfClient = new CloudFormationClient({ region });
    const stackName = `${this.serverless.service.service}-${this.serverless.service.provider.stage}`;

    try {
      // CloudFormationスタックの出力を取得
      const { Stacks } = await cfClient.send(new DescribeStacksCommand({ StackName: stackName }));
      const outputs = Stacks[0].Outputs;

      // Step FunctionsのARNを見つける
      const stepFunctionOutput = outputs.find(output => 
        output.OutputValue.startsWith('arn:aws:states:') && 
        output.OutputValue.includes(':stateMachine:')
      );

      if (!stepFunctionOutput) {
        throw new Error('Step Functions ARN not found in CloudFormation outputs');
      }

      const stepFunctionArn = stepFunctionOutput.OutputValue;

      // ARNをParameter Storeにセキュアに保存
      const parameterName = `/my-service/${this.serverless.service.provider.stage}/step-function-arn`;
      await ssmClient.send(new PutParameterCommand({
        Name: parameterName,
        Value: stepFunctionArn,
        Type: 'SecureString',
        Overwrite: true,
      }));

      this.serverless.cli.log(`Securely stored Step Functions ARN in Parameter Store: ${parameterName}`);
      this.serverless.cli.log(`Step Functions ARN: ${stepFunctionArn}`);
    } catch (error) {
      this.serverless.cli.log(`Error storing ARN: ${error.message}`);
    }
  }
}

export default StoreArnsPlugin;

リソースが増える一方なこの世界 2024/10/13

生成AIすごいですよね。アイデアがあれば、コードさくっとね。 いろいろやっていきたいところです。
さて、たいした話ではないですが、クラウドフロントのオリジンは複数用意できるよというのと、ドメインも複数つけれる? で、なぜ、そういうことをいまさらなのかといいますと、リソースが増える一方なので、工夫というか設計というか、そのあたりでね。

Bloggerのテンプレート変更していくぞ計画 2024/09/21

ここでメモをしておけば、あとで見返すであろう(自分)。
https://blogger-learning-rab.blogspot.com/2020/08/blogger-jisaku-02.html#chapter-10
mustacheを使って細かくファイルにしていくのはうまくいきそうな感じなので、これはこれでよくて。
構造(テンプレー)にたいする理解がないからそっち補強しつつ。
記事ならpartial/postに記事用のデザイン部品とか集めておきたいよね。
とは思ったのだけど、テンプレートタグでフォルダきる?
includableは定義でidが必要。includeでincludableを取り込む。取り込む際に指定するのはname。
section>widget、includable、includeって感じなのか
整理しないと何年やってもピンとこないなー
sectionにはガジェットを乗せることができる。
Bloggerガジェット(=ウィジェット)ということらしい。
「セクションは主に「ヘッダー」「メイン」「サイドバー」「フッター」で使われる。」ということらしい
なのでpartial/*section*/でフォルダを作成してそこセクションにのせるものの管理をするとか。









本日の方式メモ - CSV一括登録 2024/09/16

https://docs.aws.amazon.com/ja_jp/step-functions/latest/dg/avoid-exec-failures.html
よくあるCSV一括登録をラムダ単体でなくstepfunctionsで組むはなし。
はじめ、stateからそのままデータを次に渡してやろうとしてはじめて256kbの壁にぶちあたったのであった。
クロードさんにお尋ねして、S3で小分けにしなよ、という話で、そういうふうにやったらうまくいった。おそらく、実行時間もいい感じなのだろう。
serverlessでやっていて、そこでつまずいて数時間時間を費やしたのは内緒でもない。
おもしろかったのは、ラムダの中でs3から値をとるのではなく、stepfunctionsのtaskを使って前段で値をとってそのまま流すという作り。後段のラムダは引数でもらったペイロードを処理するという感じ。切り分けでできているな。

僕はコピペマシン 2024/09/16

クロードさんは、僕の中ではどちらかといえば、フェミニンな感じがしているのだが、生成AIに性別があるわけはないので、まあ、そう僕が信じたいだけなんだとは思う。 午前中は、プロンプト考えて、あーいえば、こーかえってくるかなと考えるけど、夕方あたりになると、コピペして、コンパイルエラーを告げて、またコピペしての繰り返しで、僕はコピペしかしていないなと思うのであった。 自分でコード書くよりはるかに生成がはやい。おまけにいいアドバイスをくれるのだけど、だんだん読まなくなってしまう。

Bloggerのテンプレートをいじるのがつらい 2024/09/14

一年に3度はブログのデザインを変えたい思うわけですが、そのたびにBloggerのテンプレートひらいて絶望にかられるわけです。
記事書きたくても見た目を思い通りにできないだけで気持ちがしゅんとなりますよね...
ChatGPT o1-previewを使ってまえまえからもっているアイデアをそろそろ取り掛かってみたいなと思ったわけです。
ずばりあのつらいXMLをなんとかするぞということで、Mustacheテンプレートをつかって、いくつかのパートに分けてレンダリングして最終的なXMLするというものです。うまくいくのだろうか...いったんとりかかることにします。

ios import でモジュールの補完がでてこない場合は、実機が必要かもよというはなし 2024/07/28

暑いですね。みなさまいかがおすごしのことでしょうか。フジロックとかにいってたりするのでしょうか。 さて、17.2から使えるようになったジャーナルの提案機能を調査しているところです。 それで、xocdeのバージョンをあげて、さあコードでしらべようとしているて、 import JournalingSuggestions でそんなのないよ(No such module)とエラーに... そんな場合は、実機をmacにつなげましょうという話