hoomin.kani

KANISAN WEB

インフラ・サーバーサイドを頑張るカニが学んだあれこれ。

Cloud Translation API リクエスト数の増加をメールで通知する方法

Cloud Translation APIの料金

Cloud Translation APIGoogleが提供している機械翻訳機能のためのAPIです。

最初の 500,000 文字が無料ですが、あとは翻訳したテキスト等の量によって費用が加算されます。

参考: Cloud Translation の料金

急激な費用増加に備え、できればAPIのリスエスト数が増えたらアラートを出したい、という希望も出てくるでしょう。

そんな開発者に向けて、今回はCloud Translation API リクエスト数の増加をメールで通知する方法を共有します。


Cloud Monitoringでポリシーを作成

① まずはCloud MonitoringのコンソールからCREATE POLICYのボタンを押します。


② 次に指標を選択 をクリックし、以下のように選択していきます。

Consumed APIApi > Request count> 『適用』ボタンをクリック


③ フィルタを設定してCloud Translation APIのリクエスト数をカウントするようにします。

  • Filter: method
  • Comparator: =
  • Value: google.cloud.translate.v2.TranslateService.TranslateText

④ Transform dataに任意の数値を入力します。

※ 例)1日のリクエスト数の合計値をカウントする場合

  • ローリング ウィンドウ:1day
  • ローリング ウィンドウ関数: sum


⑤ 通知条件の設定

Configure alert trigger に通知する際の条件を入力します。


⑥ 通知先の設定

Configure notificationsで通知先のメールアドレスを選択し、アラートポリシー名を入力したら完了です。


お疲れ様でした。 あとはリクエスト数がしきい値を超えたらメールが飛ぶようになります。

Terraform Planの実行速度を上げる3つの方法

f:id:hoominkani:20220210190232p:plain

管理するリソースが増えるにつれ、terraform planコマンドの実行に
とんでもなく時間がかかる……。

そんな経験はありませんか?

この記事では、インフラエンジニアの頭を悩ませるそんなお悩みを解決し、
Terraformでの変更を高速化する3つの方法を共有します。

--parallelism オプションで 並列処理の数を増やす

Terraform公式で -parallelism というオプションが存在します。

説明は以下の通りです。

-parallelism=n - Limit the number of concurrent operation as Terraform walks the graph. Defaults to 10.

Terraform document


parallelismオプションを活用し、並列処理の数を増やします。(デフォルトは10)

自分のPCのスペックにもよりますが、20や30に変えると
ある程度の改善が見込めるでしょう。


terraform plan -parallelism=20


環境変数として設定することも可能です。

export TF_CLI_ARGS_plan=20


.terraformignore を使う

変更しないファイルを .terraformignore に追加すると
その分は差分検知されないので、
terraform planの実行速度が向上します。

example: .terraformignore

/dir
ec2.tf


-target オプションを使う

terraform plan , terraform apply といったコマンドを実行する際は
-target オプションを使って、特定のリソースだけに対象を絞ることができます。

たとえばEC2インスタンスにだけterraform planを実行したい場合、

以下のようなリソース名を設定していれば

resource "aws_instance" "this" {
 ... 
}

このようにtargetを指定することが可能です。

terraform plan --target=aws_instance.this 


いかがだったでしょうか。
ぜひ様々な手法を用いてTerraformを快適に使いましょう。

Amazon ECS Execで コンテナに接続する方法

f:id:hoominkani:20220119162235p:plain

ECS Execの登場でコンテナアプリケーションでもデバッグが容易に!

Amazon ECS、Fargateを使用している際、デバッグに苦労した経験はないでしょうか。

かつてはAWS Sesstion Manager で Fargate に SSH 接続したりと工夫が必要でしたが、ECS Execの登場でコンテナへの接続が容易になりました。

以下、接続方法を簡単に紹介します。

タスク IAM ロールに以下のポリシーを適用

{
   "Version": "2012-10-17",
   "Statement": [
       {
       "Effect": "Allow",
       "Action": [
            "ssmmessages:CreateControlChannel",
            "ssmmessages:CreateDataChannel",
            "ssmmessages:OpenControlChannel",
            "ssmmessages:OpenDataChannel"
       ],
      "Resource": "*"
      }
   ]
}

サービスに対しECS Execの有効化

aws ecs update-service \
    --cluster cluster-name \
    --service service-name \
    --enable-execute-command

enableExecuteCommand プロパティがtrueになっているか確認

aws ecs describe-tasks \
    --cluster cluster-name \
    --tasks task-id
  • "enableExecuteCommand": true になっていることを確認

ECS Exec を使用してコンテナに接続

aws ecs execute-command --cluster cluster-name \
    --task task-id \
    --container container-name \
    --interactive \
    --command "/bin/sh"

簡単ですね! ECS Exec ありがたい……。

Terraform workspaceの使い方

f:id:hoominkani:20190824191355p:plain

Terraform workspaceを使う

ワークスペースの作成、切り替え

# dev という名前の workspace を作成して切り替え
terraform workspace new dev
# dev という名前の workspace に切り替え
terraform workspace select dev

ワークスペースの一覧を表示

  • terraform workspace list
$ terraform workspace list
  default
* dev
  pro

環境ごとにtfvarsファイルを分ける

# devとproの2つの環境で環境編変数を分ける
$ touch terraform.tfvars.dev
$ touch terraform.tfvars.pro

# ワークスペースdevに切り替え
$ terraform workspace select dev

# ワークスペースdevの変数でterraform planを実行
$ terraform plan -var-file=terraform.tfvars.dev

リソース名を環境ごとに変更

tags = {
  Name = "${var.project_name}-${terraform.workspace}"
}

IPv6で疎通確認&サーバーのアドレスを取得

f:id:hoominkani:20190824190424p:plain

IPv6で疎通確認

通常のping ではなく ping6 を使用します。

$ ping6 xxxx:xxxx::xxxx:xxx:xxxx:xxxx

IPv6のアドレスを取得する

nsloopupでAAAAレコードを検索

-type=AAAA を設定するのが肝です。

$ nslookup
>>set type=AAAA
>>domain
$ Server:        XXX.XXX.XX.X
$ Address:       XXX.XXX.XX.X#XX

これで快適なIPv6ライフを♪

サーバーのマシンスペックを確認するコマンド【macOS, LInux】

f:id:hoominkani:20190824184715p:plain

macの場合

  • system_profiler SPHardwareDataType
$ system_profiler SPHardwareDataType
Hardware:

    Hardware Overview:

      Model Name: MacBook Pro
      Model Identifier: MacBookPro14,3
      Processor Name: Intel Core i7
      Processor Speed: 3.1 GHz
      Number of Processors: 1
      Total Number of Cores: 4
      L2 Cache (per Core): 256 KB
      L3 Cache: 8 MB
      Memory: 16 GB
      Boot ROM Version: XXXXX.XXXX.XXXXXX
      SMC Version (system): y.zzzz
      Serial Number (system): XXXXXXXXXXXXX
      Hardware UUID: XXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXXX

Linuxの場合

cpuinfoを確認

  • cat /proc/cpuinfo
$ cat /proc/cpuinfo
processor   : 0 #プロセッサの通し番号
vendor_id   : GenuineIntel #プロセッサを製造したベンダー
cpu family  : 6 #CPUのファミリー番号
model       : 63 #モデル番号
model name  : Intel(R) Xeon(R) CPU E5-2676 v3 @ 2.40GHz #プロセッサ名
stepping    : 2 #CPUのステッピングを指す。一般的にはリビジョンのこと
microcode   : 0x36 #マイクロコード。CPUのファームウェアのこと
cpu MHz     : 2400.066 #プロセッサの動作周波数
cache size  : 30720 KB #キャッシュサイズ
physical id : 0 #物理プロセッサID
siblings    : 1 #物理プロセッサに相乗りしているコア数
core id     : 0 #物理プロセッサ毎のコアの通し番号
cpu cores   : 1 #CPU ごとのコアの数
apicid      : 0 #割り込みコントローラAPICが有効か否か
initial apicid  : 0 #同上
fpu     : yes #数値演算コプロセッサを搭載しているか否か
fpu_exception   : yes #FPU exceptionが有効になっているか否か
cpuid level : 13 #CPUが持つ固有情報の読み出しレベル
wp      : yes #不明
flags       : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx rdtscp lm constant_tsc rep_good nopl xtopology eagerfpu pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm fsgsbase bmi1 avx2 smep bmi2 erms invpcid xsaveopt #各パラメータのフラグ
bugs        : #バグ
bogomips    : 4800.13 #ベンチマーク値
clflush size    : 64 #キャッシュラインフラッシュサイズ
cache_alignment : 64 #キャッシュアライメント
address sizes   : 46 bits physical, 48 bits virtual #アドレス空間がどのくらいあるか
power management: #

meminfoを確認

cat /proc/meminfo
MemTotal:        1019116 kB #メモリの総容量
MemFree:          292892 kB #メモリの空き容量
MemAvailable:     647568 kB #露葉可能なメモリ
Buffers:          139632 kB #ファイルバッファに使用するメモリ量
Cached:           330024 kB #キャッシュメモリとして使用されるメモリの量
SwapCached:            0 kB #キャッシュメモリとして使用されるスワップ量
Active:           475080 kB #使用中バッファメモリあるいはページキャッシュメモリの容量
Inactive:          94488 kB #利用可能なバッファメモリあるいはページキャッシュメモリの容量
Active(anon):     103148 kB
Inactive(anon):    23656 kB
Active(file):     371932 kB
Inactive(file):    70832 kB
Unevictable:       53000 kB
Mlocked:           53000 kB
SwapTotal:             0 kB
SwapFree:              0 kB
Dirty:                72 kB
Writeback:             0 kB
AnonPages:        151868 kB
Mapped:            81944 kB
Shmem:             23688 kB
Slab:              83080 kB
SReclaimable:      49072 kB
SUnreclaim:        34008 kB
KernelStack:        3312 kB
PageTables:         4160 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:      509556 kB
Committed_AS:     945396 kB
VmallocTotal:   34359738367 kB
VmallocUsed:           0 kB
VmallocChunk:          0 kB
AnonHugePages:      8192 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:       12288 kB
DirectMap2M:     1036288 kB

誰でも簡単!composerの使い方

f:id:hoominkani:20190824183535p:plain

composerとは

  • パッケージ・ライブラリの依存関係を管理するツール

使い方

初期化

  • composer init
  • 対話式でcomposer.jsonが作成される

パッケージをインストールする時

  • composer install

パッケージを追加する時

  • composer require ${PACKAGE_NAME}:${VERSION}
  • 追加したパッケージがcomposer.json、composer.lockに自動で追記される。

新しいバージョンのパッケージが欲しい時

  • composer update

パッケージを削除する時

  • composer remove

パッケージを検索する時

  • composer search ${PACKAGE_NAME}