継続は力なり

タイトル通り定期的な更新を心掛けるブログです。

The next-generation Slack platform に入門する[ローカルで動作編]

タダです.

タイトルの通り The next-generation Slack platform を使ってみたいというモチベーションから試してみた内容を備忘録で何回かに分けて記録していきます.今回はチュートリアルにある Hello World App の開発をやってみます.なお,他にもサンプルはありドキュメントから確認できます.

api.slack.com

事前準備

事前準備として有料の Slack のプランを契約している環境を用意する必要がありますが,加えて Slack の CLI を準備します.インストール後に対象のワークスペースとの認証を完了させ,slack auth listで対象のワークスペースが表示されれば事前準備完了です.

❯ slack version
Using slack v2.16.0
$ slack auth list

taddyteam (Team ID: hogehogehoge)
User ID: hogehoge
Last Updated: 2024-01-13 16:27:37 +09:00
Authorization Level: Workspace
❯ slack       
✨ CLI to create, run, and deploy Slack apps

📚 Get started by reading the docs:
    https://api.slack.com/automation

USAGE
  $ slack <command> <subcommand> [flags]

COMMANDS
  app
    delete      Delete the app
    install     Install the app to a team
    list        List all teams that have installed the app
    uninstall   Uninstall the app from a team
  auth
    list        List all authorized accounts
    login       Log in to a Slack account
    logout      Log out of a team
    revoke      Revoke an authentication token
    token       Collect a service token
  collaborator
    add         Add a collaborator to your app
    list        List all collaborators of an app
    remove      Remove a collaborator from an app
  datastore
    delete      Delete an item from a datastore
    get         Get an item from a datastore
    put         Create or replace an item in a datastore
    query       Query a datastore for items
    update      Create or update an item in a datastore
  env
    add         Add an environment variable to the app
    list        List all environment variables for the app
    remove      Remove an environment variable from the app
  external-auth
    add         Initiate the OAuth2 flow for a provider in your app
    add-secret  Add the client secret for a provider in your app
    remove      Remove provider token(s) from your app
    select-auth Set developer authentication to be used for a specific workflow
  function
    distribute  Manage who can view functions published by your app
  manifest
    info        Display the app manifest when run in a project directory
    validate    Validate the app manifest generated by a project
  platform
    activity    Display the app activity logs from the Slack Platform
    deploy      Deploy the app to the Slack Platform
    run         Start a local server to develop and run the app locally
  trigger
    access      Manage who can use your triggers
    create      Create a trigger for a workflow
    delete      Delete an existing trigger
    info        Get details for a specific trigger
    list        List details of existing triggers
    update      Updates an existing trigger
  create            Create a Slack project
  doctor            Check and report on system and app information
  feedback          Share feedback about your experience or project
  help              Help about any command
  samples           List available sample apps
  upgrade           Checks for available updates to the CLI or SDK
  version           Print the version number

FLAGS
  -a, --app string           use a specific app ID or environment
      --config-dir string    use a custom path for system config directory
  -e, --experiment strings   use the experiment(s) in the command
  -f, --force                ignore warnings and continue executing command
  -h, --help                 help for slack
      --no-color             remove styles and formatting from outputs
  -s, --skip-update          skip checking for latest version of CLI
  -w, --team string          select workspace or organization by team name or ID
      --token string         set the access token associated with a team
  -v, --verbose              print debug logging and additional info
      --version              version for slack

GLOBAL ALIASES
  activity           platform > activity
  delete             app   > delete
  deploy             platform > deploy
  install            app   > install
  list               auth  > list
  login              auth  > login
  logout             auth  > logout
  run                platform > run
  uninstall          app   > uninstall

EXAMPLE
  $ slack login   # Log in to your Slack account
  $ slack create  # Create a new Slack app
  $ slack run     # Start a local development server
  $ slack deploy  # Deploy to the Slack Platform

EXPERIMENTS
  None

ADDITIONAL HELP
  For more information about a specific command, run:
  $ slack <command> <subcommand> --help

  For guides and documentation, head over to https://api.slack.com/automation

インストールのドキュメント

api.slack.com

ローカルのプロジェクト環境構築

slack create hello-world-app --template https://github.com/slack-samples/deno-blank-template でローカルに空のプロジェクトを作ることができます.slack create hello-world-app --template https://github.com/slack-samples/deno-hello-world で pre-built の app も作れるようですが,今回は空のプロジェクトにしました.

❯ slack create hello-world-app --template https://github.com/slack-samples/deno-blank-template
⚙️  Creating a new Slack app in ~/tmp/hello-world-app

📦 Installed project dependencies

✨ hello-world-app successfully created

🧭 Explore the documentation to learn more
   Read the README.md or peruse the docs over at api.slack.com/automation
   Find available commands and usage info with slack help

📋 Follow the steps below to begin development
   Change into your project directory with cd hello-world-app/
   Develop locally and see changes in real-time with slack run
   When you're ready to deploy for production use slack deploy
❯ cd hello-world-app;ls -l
total 56
-rw-r--r--@ 1 tady  staff  1090 Jan 13 16:42 LICENSE
-rw-r--r--@ 1 tady  staff  6280 Jan 13 16:42 README.md
drwxr-xr-x@ 3 tady  staff    96 Jan 13 16:42 assets
-rw-r--r--@ 1 tady  staff   624 Jan 13 16:42 deno.jsonc
-rw-r--r--@ 1 tady  staff   158 Jan 13 16:42 import_map.json
-rw-r--r--@ 1 tady  staff   505 Jan 13 16:42 manifest.ts
-rw-r--r--@ 1 tady  staff   127 Jan 13 16:42 slack.json

まず確認するのは functions, triggers, workflowsディレクトリです.役割は公式記事に解説があったのでそちらのリンクを貼ります.

qiita.com

Slack App のトリガーを作る

Slack App を実行するトリガーを作っていきます.slack trigger create --triger-def "triggers/greeting_trigger.ts" を実行すると事前準備で認証しているワークスペースhello-world-app (local) が表示されます.

❯ slack trigger create --trigger-def "triggers/greeting_trigger.ts"
? Select a team Install to a new team
? Install to a new team taddyteam hogehogehoge

🔔 If you leave this team, you can no longer manage the installed apps
   Installed apps will belong to the team if you leave the workspace

? Choose an app environment Local 
📚 App Manifest
   Created app manifest for "hello-world-app (local)" in "taddyteam"

🏠 App Install
   Installing "hello-world-app (local)" app to "taddyteam"
   Finished in 2.8s

⚡ Trigger successfully created!

   Send a greeting (local) Ft06E4V2M2HF (shortcut)
   Created: 2024-01-13 17:04:06 +09:00 (1 second ago)
   Collaborators:
     Sadayoshi Tada @tada hogehoge
   Can be found and used by:
     everyone in the workspace
   https://slack.com/shortcuts/ABCD1234EFGH/01d8db3db6ea1a9e05012a90028ed678

また, https://slack.com/shortcuts/ABCD1234EFGH/01d8db3db6ea1a9e05012a90028ed678(これは偽のURLです) の URL をコピーしてワークスペースのパブリックチャンネルにポストするとアプリが反応します.

Start Window でメッセージを送る相手とその内容を選べるのですが,この段階でローカル側で slack run コマンドを実行してローカルのサーバーを立ち上げます.メッセージと送る相手を選択して実行するとメッセージが返ってきました.

レスポンスの内容を変えてみる

固定のレスポンスになっている箇所で追加のメッセージを入れてみました.オハヨウ って返すだけですが,追加のメッセージを返してくれるようになりました.

export default SlackFunction(
  GreetingFunctionDefinition,
  ({ inputs }) => {
    const { recipient, message } = inputs;
    const salutations = ["Hello", "Hi", "Howdy", "Hola", "Salut", "オハヨウ"];
    const salutation =
      salutations[Math.floor(Math.random() * salutations.length)];
    const greeting =
      `${salutation}, <@${recipient}>! :wave: Someone sent the following greeting: \n\n>${message}`;
    return { outputs: { greeting } };
  },
);

まとめ

ローカルで Slack App を動かしてみてました.次はデプロイをしてみたり,修正をいれてからの反映をやってみます.

2024年に注力することを決める(た)

タダです.

あけましておめでとうございます.前回の2023年の振り返りの続きで2024年の目標を書いていきます.箇条書きでこれまで実現したいことを列挙する方式だったのですが,下記のツイートを見て何を優先して取り組むかの注力したいことを書くことにしました.

2024年の注力したいこと

今年の注力したいことを書きます.優先順位は No. が上に行けばいくほど自分の優先度が高くしています.まずは3つ掲げていますが,状況に応じて追加・変更するなどしていきます.半年後に見直す.

No. 目標概要 アクション 結果
1 自分でWebサービスを開発・運用する Webサービスの開発して運用を1つ以上行う -
2 読み手を意識するアウトプット 月間のPV数を平均7,000超えを目指す -
3 本を年間50冊以上読む 月当たり4冊以上読まないと達成できないが年間で50冊を読んでインプットする -

それ以外の目標

引き続き技術的なトピック以外の個人的な目標だったりやるべきことは my-release-noteリポジトリ進捗管理していきます.業務経験の棚卸しも3ヶ月に一回はして,更新していくように今年もやっていきます.

英語

苦手と言わず触れ続けることからやっていこうと思い,英語のアウトプット場所として dev.to のアカウント作って書いていこうと思います.2022年に宣言してできなかったので,このブログで書いたのを転記してストックしていきます.

dev.to

まとめ

2024年もよろしくお願いします!

関連記事

sadayoshi-tada.hatenablog.com

sadayoshi-tada.hatenablog.com

sadayoshi-tada.hatenablog.com

2023年の振り返り

タダです。

2023年も終わりなので,今年の振り返りを行ってきます.

目標の振り返り

よく見直したら目標たててなかったです...月間でチャレンジしてた月平均6000 PV 以上を目指す目標の結果だけまとめます.月間の推移は後述しますが,1月と4月だけ5000 PV台になってしまいましたがほぼ6000PV以上をキープできていました.

No. 目標概要 アクション 結果
1 読み手を意識するアウトプット 月間のPV数を平均6,000超えを目指す

去年の年末にメンタルのことを書いていましたが,チームや周りのみなさんのおかげもあって今年の前半で復調できました🙏

転職してメンタルやられたりしていろんなやる気が落ちたときもあったけど

アウトプットの振り返り

ブログ

今年も PV 数は6000以上を目標にして続けてきていたのですが,1月と4月以外は安定的に突破するようになりました.来年は月平均7000 PV以上を目標にさらに多くの人に見てもらえるようなブログにしていけたらと思います.今年は51記事を書きました.

PV 数
1 5961 pv
2 6540 pv
3 7683 pv
4 5610 pv
5 6140 pv
6 6820 pv
7 6223 pv
8 6362 pv
9 7426 pv
10 6913 pv
11 7135 pv
12 6747 pv(12/31時点)

読者数と Twitter のフォロワー数

読者数と Twitter のフォロワー数の推移も増えているのでいい傾向かと思います.来年も自分を知ってもらって興味持ってもらえる方を増やすようにアウトプットをやっていきます.

読者数 Twitter フォロワー 数
113(6人増) 800(68人増)

登壇

かなりギリギリでしたが,1つできました.

sadayoshi-tada.hatenablog.com

まとめ

2023年の一年の振り返りました.今年関わってくれた皆さん本当にありがとうございました!年末に出会った ビリミリオンの曲にあるように2024年も頑張ってきます,来年もよろしくお願いします!!

www.youtube.com

過去の振り返り

sadayoshi-tada.hatenablog.com

sadayoshi-tada.hatenablog.com

sadayoshi-tada.hatenablog.com

sadayoshi-tada.hatenablog.com

トレノケ雲の会 mod.12 に『バックアップのリストア検証が可能な AWS Backup Restore testing を使ってみた』で登壇した

タダです.

12/21 開催の「トレノケ雲の会 mod.12」にて「バックアップのリストア検証が可能な AWS Backup Restore testing を使ってみた」と題して re:Invent 2023 で発表された AWS Backup Restore testing の検証した内容をお話しさせていただきました.この記事で発表を振り返ってきます.

kumonokai.connpass.com

発表資料

発表資料はこちらです.

他のセッションの発表資料も connpass の資料一覧から見ることができます.

kumonokai.connpass.com

発表の振り返り

以前の記事から見ると2年ぶりの登壇かつオフラインでの発表もかなり久々で緊張したのですが,温かく迎えてくださり嬉しかったです!加えて発表に対してリアルに反応をもらえることが楽しかったのでまた定期的に発表していきたいです.

基本的には関連記事でまとめた内容を発表しました.AWS Backup Restore testing ではバックアップごとのコストがかかることやリストアの対象サービスによって容量に応じた課金がストレージがかかることを気にしつつ,IAM や KMS の権限制御を気をつければ使い始めることは簡単と思います.バックアップやリストアに対する戦略や求めたい復旧レベルを合わせて定義して計画して行っていくことが大切でしょう.この点に関する書籍が近々出るため参考になるかもしれません.自分もバックアップやリストアの戦略を立てるということをやる経験が少なかったので年末年始で読んでいきたいと思います.

www.oreilly.co.jp

関連記事

sadayoshi-tada.hatenablog.com sadayoshi-tada.hatenablog.com

まとめ

登壇の振り返りとして補足をまとめました.発表の機会をいただきありがとうございました!

AWS Backup restore testing を設定・実行する

タダです.

前回の記事の続きになります.今回は大阪リージョンに複製したバックアップコピーを使ってリストアテストをやっていきます.

前回記事 sadayoshi-tada.hatenablog.com

AWS Backup リストアテストの概要

そもそもリストアテストで何ができて,どんな設定を行えるのか,料金はどうなのかをまとめていきます.復元テストはリストアの実行可能性を自動的かつスケジュールで定期的に評価,リストアにかかる時間を確認することが良さにあります.

リストアテストとオンデマンドバックアップとの違い

リストアテストではオンデマンドのリストアと同等のテストができるものの,オンデマンドのリストアとの違いがあります.

比較項目 リストアテスト オンデマンドリストア
実行頻度 定期的にスケジュール実行 オンデマンド実行
利用可能なリージョン Israel (Tel Aviv)/AWS GovCloud (US-East)/AWS GovCloud (US-West)/China (Beijing)/China (Ningxia) を除く商用リージョンで使用可能 全ての商用リージョンで使用可能
サポートされているリソース Aurora/Amazon DocumentDB/DynamoDB/EBS/EC2/EFS/FSx (Lustre,ONTAP,OpenZFS,Windows)/Neptune/RDS/S3がサポートされてる すべてのリソースが対象
結果 リストアテストジョブが完了するとリストアされたリソースは削除される リストアジョブが完了するとリストアされたリソースのバージョンが残る

リストアテストにかかるコスト

コスト感も確認しておきます.リストアテストごとに料金が発生し,項目としてはリストアテスト実行にかかる料金とリストアテスト用ストレージの料金です.

aws.amazon.com

東京リージョンだと次の費用がかかります.

課金項目 かかる費用
復元テスト実行にかかる料金 バックアップまたはリカバリポイントあたり$1.8
復元テスト用のストレージ費用 リストアテストのサービスによって異なる

リストアテストの制約

他サービス同様にリストアテストにも次の制約があります.リストアテストが実行できる数や保護可能なリソース,命名の制約は日頃の利用で気にかけていきたいところです.

・100 restore testing plan

・50 tags can be added to each restore testing plan

・30 selections per plan

・30 protected resource ARNs per selection

・30 protected resource conditions per selection (including those within both StringEquals and StringNotEquals)

・30 vault selectors per selection

・Max selection window days: 365 days

・Start window hours: Min: 1 hour; Max: 168 hours (7 days)

・Max plan name length: 50 characters

・Max selection name length: 50 characters

ドキュメントリンク

docs.aws.amazon.com

リストアテストの登録

リストアテストの登録を行います.リストアテスト名,頻度,リストアテストの開始時間,対象となる復旧ポイントを選択します.

日次でAM10時にリストアテストをするようスケジューリングします.
復旧ポイントはランダムなものを選択することが推奨されていたためそちらを選択しています.

次にリストアテストのリソースを登録してきます.Auroraとリストアテストのパラメーター等を設定します.

リストアテスト実行後の動作はすぐにリソースを削除するように設定しました.
Auroraをリストアテストの対象に含めます.
リストアパラメーターはデフォルトのものにしています.

リストアテストの実行結果の確認

リストアテストの結果は Restore testing > リストアテスト名 を選択すると Restore testing jobs から確認できます.画像の結果ではスケジューリングしたから1時間以内にテストが開始されて16分ほどでテストが完了し,簡単にテストの登録と実行ができました.

まとめ

AWS Backup restore testing の概要や設定,実行をさらいました.