Programming Self-Study Notebook

勉強したことを忘れないように! 思い出せるように!!

Amazon Pinpoint のメトリクスについて調べてみた

f:id:overworker:20210304234231p:plain:h200

プッシュ通知を実現する手段としてAmazon Pinpointを検討した際に調べた内容を記録しておきます。

Amazon Pinpoint はAWSサービスは、複数のメッセージングチャネルをまたがってお客様とやり取りするために使用できます。Amazon Pinpoint を使用して、プッシュ通知、E メール、SMS テキストメッセージ、および音声メッセージを送信できます。

概要

CloudWatchにエクスポートされるメトリクスは大きく分類して以下の4種類です。
- メッセージの配信に関連するメトリクス - エンドポイントに関連するメトリクス - インポートジョブに関連するメトリクス - イベントに関連するメトリクス

詳細

メッセージの配信に関連するメトリクス

DirectSendMessagePermanentFailure

  • 永続的な問題が原因で送信されなかったメッセージの数。
  • このような問題は、通常、エンドポイントが期限切れまたは無効である場合に起こります。
  • このような問題が発生した場合、Amazon Pinpoint はメッセージの再配信を試行しません。

    単位 ディメンション
    カウント ApplicationId

DirectSendMessageTemporaryFailure

  • 一時的な問題が原因で送信されなかったダイレクトメッセージの数。
  • このような問題は、通常、Amazon Pinpoint サービスに関する内部的な問題によってメッセージの送信が阻まれた場合に起こります。
  • このような問題が発生した場合、Amazon Pinpoint はメッセージの再配信を試行しません。

    単位 ディメンション
    カウント ApplicationId

CampaignSendMessagePermanentFailure

  • 永続的な問題が原因で送信されなかったキャンペーンメッセージの数。
  • このような問題は、通常、エンドポイントトークンが期限切れまたは無効である場合に起こります。

    単位 ディメンション
    カウント ApplicationId

CampaignSendMessageTemporaryFailure

  • キャンペーンが送信しようとしたが、一時的な問題が原因で送信されなかったメッセージの数。
  • このような問題は、通常、Amazon Pinpoint サービスに関する内部的な問題によってメッセージの送信が阻まれた場合に起こります。
  • このような問題が発生した場合、Amazon Pinpoint はメッセージの再配信を試行しません。

    単位 ディメンション
    カウント ApplicationId

DirectSendMessageThrottled

  • アカウントの送信メッセージ数が調整されたために送信されなかったダイレクトメッセージの数。

    単位 ディメンション
    カウント ApplicationId

CampaignSendMessageThrottled

  • アカウントの送信メッセージ数が調整されたために送信されなかったキャンペーンメッセージの数。

    単位 ディメンション
    カウント ApplicationId

CampaignSendMessageLatency

  • キャンペーンの実行開始から終了までの時間 (秒)。

    単位 ディメンション
    カウント 秒? ApplicationId

エンドポイントに関連するメトリクス

EndpointRegistrationFailure

  • AWSSDKまたはAmazonPinpoint APIを介して送信され、インポートできなかったエンドポイント登録の数。
  • このタイプの問題は通常、着信エンドポイントレコードが無効な場合に発生します。

    単位 ディメンション
    カウント ApplicationId

インポートジョブに関連するメトリクス

ImportedEndpointFailure

  • インポートジョブの中で、無効なためにインポートできなかったエンドポイントの数

    単位 ディメンション
    カウント ApplicationId

ImportJobFailure

  • 何らかの理由で完了されなかったインポートジョブの数。

    単位 ディメンション
    カウント ApplicationId

ImportJobDuration

  • インポートジョブの開始から終了までの時間 (秒)。

    単位 ディメンション
    カウント 秒? ApplicationId

イベントに関連するメトリクス

TotalEvents

  • Amazon Pinpoint が記録したイベントの総数。
  • このメトリクスには、によって記録されたイベントが含まれます。
  • AWSSDK または Amazon Pinpoint API

    単位 ディメンション
    カウント ApplicationId

ExportedEvents

  • エクスポート用のイベントストリームに正常に書き込まれたイベントの総数。

    単位 ディメンション
    カウント ApplicationId

ExportEventErrors

  • イベントストリームへの書き込み後に発生したエラーの総数。
  • これらのエラーには、Amazon Pinpoint に関連しない問題が含まれることがあります。
  • たとえば、Kinesis Data Firehose にストリーミングするイベントの量がプロビジョニングされたスループットを超えた場合、このエラーが発生します。

    単位 ディメンション
    カウント ApplicationId、ErrorCode

AWS Step Functions について調べてみた

f:id:overworker:20210304234231p:plain:h200

AWS Step Functionsの基本を調べてみました(ちゃんと調べたことが無かったので、調べてみました。)。今回は、基本に関しての個人的なまとめノートの共有ですが最近のアップデートを見ると激アツサービスに化けそうな雰囲気を感じます。

最近の動向(2021/9/30)
- AWS Step Functions が AWS SDK 統合で 200 を超える AWS のサービスのサポートを追加

特徴

AWS のサービスのオーケストレーション、ビジネスプロセスの自動化、サーバーレスアプリケーションの構築に使用されるローコードの視覚的なワークフローサービス

概要

  • ワークフローに表現された処理を制御するステートマシン
  • 全体の流れを可視化することができる
  • 各ステップの実行履歴をログから追跡できる

料金

  • 従量課金(処理された状態遷移の数)
    • 状態遷移1回あたり$0.000025(Tokyo)(リージョンによって異なる)
    • 無料枠あり(Tokyo:毎月4000回までの状態遷移は無料)
    • リトライの回数もカウントされる

内部構成

  • ASL(Amazon States Language)でワークフローを定義する(JSON形式の言語)
    • ASLの文法チェックツール:awslabs/statelint
      • gem install statelintでインストール
      • statelint <ASLのファイル名>で検証する。

用語

用語 意味
ワークフロー 処理の全体像を示すフローチャートのようなモノ
ステート ワークフローを構成する要素(個々のボックス)のこと
ステートマシン 個々のステートの切り替え制御することから、ワークフロー自体をステートマシンと考えることが可能

ステートマシンの呼び出し元

  • 以下の5種類
    • Amazon CloudWatch Event:S3へのファイル保存
    • Amazon API GatewayAPIコール時のバックエンド処理
    • マネージメントコンソール:コンソールからの手動実行
    • AWS CLI:コマンド実行
    • 各種SDK:Lambda等から実行

CloudWatchにより提供されているメトリクス

名称 説明
ExecutionTime 実行の開始点から終了点までの間隔(ミリ秒単位)
ExecutionThrottled ロットリングされた実行の数
ExecutionsAborted 中断された実行の数
ExecutionsFailed 失敗した実行の数
ExecutionStarted 開始された実行の数
ExecutionsSucceeded 正常に完了した実行の数
ExecutionsTimeOute タイムアウトした実行の数

制限

  • SLA:99.9%
  • ステートマシンの最大数:10,000(1アカウントあたり)
  • 最大リクエストサイズ:1MB
  • ステートマシンの最大実行時間:1年間
  • ステートマシンの実行履歴の最大サイズ:25,000イベント
  • Stateへの入出力の最大データサイズ:32,768文字
  • State遷移の合計数:1アカウント・1リージョン内のすべてのステートマシンに対してState遷移の合計数が計算され、トークバケットアルゴリズムに基づいた制限が適用される。
    • バケットサイズ:800(Tokyo)
    • 1秒ごとの補充レート:400(Tokyo)

ステートへのデータの入出力

  • 全体像 f:id:overworker:20211031213954p:plain

入力

{
    "title":"Number to add",
    "numbers":[3,4]
}

InputPath

  • 渡された入力のうち、何をStateで使用するかを指定する
{
    "Type":"Task",
    "InputPath":"$.numbers",
    "Resource":"$arn:awas:lambda...",
    ...

Parameters

  • 渡された入力から、「キーと値」のペアを生成してStateに渡す  
{
    "Type":"Task",
    "Parameters":{
        "calc.$":"$.numbers"
    },
    "Resource":"$arn:awas:lambda...",
    ...

出力

ResultPath

  • Stateの実行結果をどのようなフィールド名で受け取るかを指定
{
    "Type":"Task",
    "InputPath":"$.numbers",
    "ResultPath":"$.sum",
    ...

OutputPath

  • 次のStateに引き渡すデータを指定する
{
    "Type":"Task",
    "InputPath":"$.numbers",
    "ResultPath":"$.sum",
    "OutputPath":"$[’title’,’sum’]",
    ...

ステートマシンの記述

ステートマシン全体の設定

  • ステートマシンの全体に対する記述

    フィールド 説明
    Comment テキストで任意のコメントを記述できる
    StartAt 一番最初に実行するState(エントリーポイント)を指定する
    TimeoutSeconds ステートマシン全体の実行時間に対してのタイムアウト時間を指定する(秒数を指定する)→エラーとして強制終了する
    Version ASLのバージョンを指定(規定は1.0)
    States ステートマシンを構成するStateを指定する(複数含めることが可能)

ステートの記述

  • ステートの種類(7種)

Task

  • 単一の処理を行う

    フィールド 説明
    Resource ARN形式で指定
    Parameters Resourceに渡すパラメータを指定(対象サービスにより内容は異なる)
    TimeoutSeconds タイムアウト時間を設定する(秒数で指定)
    HeartbeatSeconds Activityのみに適用される
    ResultPath Stateの出力をどのような名前で受け取るか指定
    Retry エラーハンドリングに使用
    Catch エラーハンドリングに使用

Wait

  • 指定した時間の間、処理をストップする

    フィールド 説明
    Seconds 待機する時間を秒単位で指定する
    Timestamp ISO8601形式(例:2021-10-31T12:34:56Z)でいつまで待機するかを指定
    SecondsPath Stateへの入力データのうち、待機する時間をJsonPath構文で指定
    TimestampPath Stateへの入力データのうち、いつまで待機するかをJsonPath構文で指定

Pass

  • 入力をそのまま出力へ渡す

    フィールド 説明
    Result Stateの実行結果を指定
    ResultPath Resultをどのようなパラメータ名で受け取るか指定
    Parameters 入力されたデータから「キーと値」のJsonを生成

Parallel

  • 並列に処理を実行する
  • いずれかが失敗するとParallelのState全体が失敗した扱いになる

    フィールド 説明
    Branches 配列で並列に実行するSteteを指定
    ResultPath ParallelのStateの出力をどのようなパラメータで受け取るか指定
    Retry Branches内のStateのエラー時のリトライをハンドリングする
    Catch Branches内のStateのエラー時の後処理をハンドリングする

Choice

  • 一定の条件により分岐する

    フィールド 説明
    Default どの条件に合致しなかったときに実行するState
    Choices
     Variable Stateへの入力のうち指定したフィールドを条件分岐に指定する
     Next 条件に合致したときに遷移するState
     NumericEquale Variableに対する比較演算子と比較する値を指定

Succeed

  • 実行結果を成功として終了する

Fail

  • 実行結果を失敗として終了する

    フィールド 説明
    Error エラー名を指定。Retryや例外のCatchに指定できる
    Cause エラーの原因を文字列で指定

Retryフィールドの指定方法

  • StateTypeTaskParallelの場合はRetryを設定することができる。

    フィールド 説明
    ErrorEquals
    IntervalSeconds 最初のリトライまでの秒数
    BackoffRate リトライ間隔を増加させる乗数(エクスポネーシャルバックオフ)
    MaxAttempts リトライ回数

Catchフィールドの指定方法

  • StateTypeTaskParallelの場合はRetryを設定することができる。

    フィールド 説明
    ErrorEquals エラーの条件を指定
    Next エラー条件に該当した際に遷移させるStateを指定
    ResultPath エラーの内容を出力に含める際に指定する
ErrorEquals
  • どのようなエラーの時に条件に合致したとみますかを指定する

    フィールド 説明
    State.ALL すべてのエラーに合致
    State.Timeout Stateがタイムアウトした際に合致
    State.TaskFailed Stateの実行に失敗した際に合致する
    State.Permissions State実行の権限が無かった際に合致する

参考文献

公式サイトへのリンク
AWS Step Functions モダンアプリケーションのための視覚的なワークフロー

AWS Black Belt Online Seminar】AWS Step Functions
www.youtube.com

DockerDesktopの有料化に関するまとめ

f:id:overworker:20210911004441p:plain:h400

DockerDesktopの有料化について少し調べてみました。

Docker社の動向(DockerDesktop有料化の背景)

  • 2019年11月Docker Enterprise製品群をMirantis社に売却を発表
    • 今後はDocker DesktopDocker Hubを中心にデベロッパー向けツールに注力
  • 2020年8月:無料プランユーザーに対しDocker Hubからのイメージプル回数に制限をかけることを発表
    • 無料ユーザー(匿名):6時間あたり100回まで
    • 無料ユーザー(登録済み):6時間あたり200回まで
    • 6カ月間利用されていないコンテナイメージを削除する(←撤回されました)

    • 補足

      • Pull回数はDockerイメージのメタデータが記述された「マニフェストファイル」をダウンロードすることでカウント
      • 匿名ユーザーの場合はIPアドレスをもとに制限される
      • Pull回数の制限は保存期間の制限と同じく、2020年11月1日より適用される
  • 2021年9月Docker Desktopが有料化
    • 無料で使いるづけることができる人
    • 期間
      • 2021年8月31日から(猶予期間2022年1月31日)

引き続き無料で出来ること、有料になること

  • 個人的に抑えておきたいと思ったポイントを記載します

      項目
    無料で出来ること - WindowsでWSL2上に直接Dockerをインストール
    - Mac仮想マシン上にDockerをインストール
    - docker-cliを用いたdockerの操作
    有料になること - Docker Desktopを用いたDockerのインストール、更新(※1)
    - DockerDesktopからのDockerの設定管理

    ※1 この手間が一番面倒、、、Windows/Macで違うし、マニュアル化したとしても一部の人の環境では動作しなかったりするし、、、

料金プラン

f:id:overworker:20211008213933p:plain

  • 有料プランはProTeamBusinessの3種類
  • 契約は「月単位/通年」の2種類(通年契約の方が月額換算での価格が安くなります)

  • 補足

    • Teamプランの料金説明Start with minimum5 users for $25.が意味不明、、
      • 表示通り$7/user/monthなら$35では?($5/user/monthで計算されている。)
      • Billed annually starting at $300.も、$5/user/month/×5人×12ヶ月=$300で計算されている?
      • $7/user/month/×5人×12ヶ月=$420が正しい?

感想

  • 環境構築の手間が省略できるだけでも大きなメリットがあるんだけど、そのために月額利用料を払い続けるのはもったいない気がします。
  • インストールのためだけに契約をし直すのは面倒だし、、、

「SourceTreeでクローンしようとすると落ちる」ときにやったこと

f:id:overworker:20210923215952p:plain:h200


社用PC(Windows10)のリプレイスにともない、PCに開発環境を構築した際につまずいたのでメモをしておきます。

状況

  • SourceTree(Ver3.4.5)をローカルPCにインストール
  • リモートリポジトリのクローン
    • 「これはGitリポジトリです」と表示された後、「詳細オプション」のところがグルグルしだして、そのあとすぐにソースツリーが落ちます。
f:id:overworker:20210923221708p:plain:h400

原因

対応方法

上記対応で問題なくクローンは出来ました。

Docker有料化に関するメモ(2021年8月31日から)

f:id:overworker:20210911004441p:plain:h400

Our Service Agreement has Changed
サービス契約が変更されました

We've updated the Docker Subscription Service Agreement.
Dockerサブスクリプションサービス契約を更新しました。
Please read the Blog and FAQs to learn how companies using Docker Desktop may be affected.
Docker Desktopを使用している企業がどのように影響を受ける可能性があるかについては、ブログとFAQをお読みください。
By checking "I accept the terms" you agree to the Subscription Service Agreement, the Data Processing Agreement, and the Data Privacy Policy.
利用規約に同意します」にチェックを入れると、サブスクリプションサービス契約、データ処理契約、およびデータプライバシーポリシーに同意したことになります。

Here's a summary of key changes:
主な変更点の概要は次のとおりです。

* Our Docker Subscription Service Agreement include a change to the terms of use for Docker Desktop.
* Dockerサブスクリプションサービス契約には、Dockerデスクトップの利用規約の変更が含まれています。

* It remains free for small businesses (fewer than 250 employees AND less than $10 million in annual revenue), personal use, education, and non-commercial open source projects.
* 中小企業(従業員数250人未満、年間収益1,000万ドル未満)、個人使用、教育、および非営利のオープンソースプロジェクトでは無料のままです。

* It requires a paid subscription for professional use in larger enterprises.
* 大企業で専門的に使用するには、有料のサブスクリプションが必要です。

* The effective date of these terms is August 31, 2021. There is a grace period until January 31, 2022 for those that will require a paid subscription to use Docker Desktop.
* これらの条件の発効日は2021年8月31日です。Dockerデスクトップを使用するために有料サブスクリプションが必要な場合は、2022年1月31日までの猶予期間があります。

* The existing Docker Free subscription has been renamed Docker Personal and we have introduced a Docker Business subscription.
* 既存のDockerFreeサブスクリプションはDockerPersonalに名前が変更され、DockerBusinessサブスクリプションが導入されました。

* The Docker Pro, Team, and Business subscriptions include commercial use of Docker Desktop.
* Docker Pro、Team、およびBusinessのサブスクリプションには、DockerDesktopの商用利用が含まれます。

We're introducing a new product subscription, Docker Business, for large enterprises that require features like registry restrictions, SSO, secure software supply chain management, and more.
レジストリ制限、SSO、安全なソフトウェアサプライチェーン管理などの機能を必要とする大企業向けに、新製品のサブスクリプションであるDockerBusinessを導入します。

It's also important to note that the licensing and distribution terms for Docker and Moby open source projects, such as Docker Engine, are not changing.
DockerおよびMobyオープンソースプロジェクト(Docker Engineなど)のライセンスおよび配布条件は変更されていないことに注意することも重要です。


Our Service Agreement has Changed

We've updated the Docker Subscription Service Agreement. Please read the Blog and FAQs to learn how companies using Docker Desktop may be affected. By checking "I accept the terms" you agree to the Subscription Service Agreement, the Data Processing Agreement, and the Data Privacy Policy.

Here's a summary of key changes:

  • Our Docker Subscription Service Agreement include a change to the terms of use for Docker Desktop.
    • It remains free for small businesses (fewer than 250 employees AND less than $10 million in annual revenue), personal use, education, and non-commercial open source projects.
    • It requires a paid subscription for professional use in larger enterprises.
  • The effective date of these terms is August 31, 2021. There is a grace period until January 31, 2022 for those that will require a paid subscription to use Docker Desktop.
  • The existing Docker Free subscription has been renamed Docker Personal and we have introduced a Docker Business subscription.
  • The Docker Pro, Team, and Business subscriptions include commercial use of Docker Desktop.

We're introducing a new product subscription, Docker Business, for large enterprises that require features like registry restrictions, SSO, secure software supply chain management, and more.

It's also important to note that the licensing and distribution terms for Docker and Moby open source projects, such as Docker Engine, are not changing.

AndroidStudioを更新したら、起動しなくなった時の対応メモ

f:id:overworker:20210622233128p:plain:h200

状況

  • AndroidStudioに言われるままにバージョンアップ下のですが、その後、AndroidStudioが起動しなくなってしまいました。
    • 何も考えずにバージョンアップ等をしているの人への天罰だと思います?

      !bootstrap.error.message.internal.error.please.refer.to.0!https //code.google.com/p/android/issues!

エラー画面

  • 起動時のエラー画面を残しておきます
f:id:overworker:20210822111334p:plain:h250
  • bootstrap.error.message.internal.error.please.refer.to.0 https //code.google.com/p/android/issuesと言われてもさっぱりわかりません!

環境の説明

  • AndroidStdio
    • バージョン:更新前は覚えていません。更新後は最後に記載しました。
    • 日本語化していました
  • その他
    • OS : Windows10

対応方法

  • 私は日本語化ツールをバージョンアップすることで解決しましたので、その方法を記載させていただきます。
    • AndroidStudioの新しいバージョンに従来の日本語化ツールが前方互換していないのだと思います。
    • 既に、対応バージョンが用意されているのは非常にありがたいです。

手順1:インストーラーのダウンロード

f:id:overworker:20210822113023p:plain:h250
  • 手順1-2:インストーラーのDLを実行する
    • 私の場合は、広告の隙間にダウンロードリンクがありました。
f:id:overworker:20210822113523p:plain:h200

手順2:インストーラーの実行

  • 手順2-1:DLしたzipを適当な場所で解凍します

  • 手順2-2:setup.exeを実行する

f:id:overworker:20210822114348p:plain:h250

インストーラー内の手順

  • 日本語化するアプリケーションを選択する
f:id:overworker:20210822114537p:plain:h300
  • studio64を選択する。
    • 私はC:\Program Files\Android\Android Studio\binにありました。
f:id:overworker:20210822114726p:plain:h200
  • 日本語化するを選択する(3秒程度で完了しました。)
f:id:overworker:20210822114945p:plain:h300
  • 完了すると以下の画面が表示されました。
f:id:overworker:20210822115041p:plain:h100
f:id:overworker:20210822115214p:plain:h300

確認

  • AndroidStudioを起動したら更新完了画面へ遷移しました。
  • ヘルプからバージョンを確認したときの画面を残しておきます。
f:id:overworker:20210822120019p:plain

「Gradle プロジェクトの同期に失敗しました。」への対応方法

f:id:overworker:20210622233128p:plain:h200

状況

  • AndroidStudioでアプリを作成している際に発生した現象です。

    'app' の実行中にエラーが発生しました: Gradle プロジェクトの同期に失敗しました。プロジェクトを修正して再試行してください。

    • 多分、フォルダごと、コピーでバックアップを取った際に何かが変になったと推測します。

解決手順

手順1:キャッシュのクリア

  • ファイル -> キャッシュの破棄/再起動を選択する
f:id:overworker:20210813161915p:plain
  • 破棄を選択する
f:id:overworker:20210813162421p:plain

手順2:AndroidStudioのシャットダウン

f:id:overworker:20210813162958p:plain

手順3:.gradleの削除

  • .graidleフォルダを削除します。
f:id:overworker:20210813162552p:plain

手順4:AndroidStudioの起動

  • Gradleのビルドが実施されます。(少し時間がかかります。)
    • .graidleフォルダが再度生成されます。