kakakakakku blog

Weekly Tech Blog: Keep on Learning!

認定資格 HashiCorp Certified: Terraform Associate の対策にも使える「Terraform の教科書」を読んだ

2024年3月21日に出版された「Terraform の教科書」を読んだ📕

本書は「これから Terraform に入門したいと思っている初学者」に特におすすめできる一冊だった.また本書では原著と違って,2024年1月にリリースされた Terraform v1.7.0 をベースに修正されていて,情報の鮮度が意識されているのも素晴らしかった👌

目次

  • Part 1: 基礎知識
    • 1章: IaC を知る
    • 2章: Terraform のインストール
  • Part 2: コア・コンセプト
    • 3章: Terraform をはじめよう
    • 4章: Terraform へのディープダイブ
    • 5章: Terraform CLI
    • 6章: Terraform のワークフロー
    • 7章: Terraform のモジュール
  • Part 3: Terraform によるインフラストラクチャの管理
    • 8章: Terraform の構成ファイル
    • 9章: Terraform スタックを理解する
    • 10章: Terraform Cloud と Terraform Enterprise
  • 付録A: Terraform 用語集
  • 付録B: 解答と解説

PDF で読むなら「マイナビブックス」で購入できる👌

book.mynavi.jp

AWS / Google Cloud / Azure サポート

本書を読んでまず驚いたのは,Terraform を学ぶ題材として,AWS (Amazon Web Services), Google Cloud, Microsoft Azure 3種類のプロバイダーの解説をサポートしているところで,多くのトピックで3種類のサンプルコードが紹介されていた👀

これから Terraform に入門する初学者のことを考えると,もちろん仕事で使うパブリッククラウドを題材として Terraform を学べるのが1番効率が良く,例えば仕事では AWS を使っているけど,書籍では Google Cloud で紹介されていると,内容的には一般的なトピックだとしても,イメージが湧きにくかったり,読みながら挫折してしまうことにも繋がると思う.3種類のプロバイダーをサポートしているのは本書の特徴の一つだと思う❗

逆に言えば3種類の解説にページを割く必要があって,計400ページというのは本書の目次と解説のレベル感から考えると多少多いようには感じた.

認定資格サポート

本書のもう一つの特徴として,HashiCorp 公式の認定試験「HashiCorp Certified: Terraform Associate」に対応しているという点がある.今まで認定資格の対策として使えると謳った Terraform 関連書籍はなかったと思う(たぶん).

ちなみに本書の表紙には「Terraform Associate exam 対応」と書かれていて,冒頭の「本書について」では 本書は Terraform アソシエイト試験を受験しようとしている人のために作られた と書いてある📝 そして,本書の各章末には Questions という練習問題が収録されていて,認定資格対策として使える❗

実際に僕は2023年7月に HashiCorp Certified: Terraform Associate (003) を取得しているけど,出題範囲に近く構成されているとは思った.とは言え,Terraform CLI の詳細・シークレット管理など不足してるトピックもある印象なので認定資格を受験するときは他にも対策は必要だと思う💡

kakakakakku.hatenablog.com

Terraform Cloud と Terraform Enterprise

10章に Terraform Cloud(ちなみに2024年4月22日から HCP Terraform に改名された)と Terraform Enterprise の解説が入っているのは良かった👌また画面キャプチャも多くてイメージを掴みやすいと思う.もちろん認定試験の出題範囲に Terraform Cloud が入っているからという背景もあるとは思うけど,実際に Terraform Cloud や Terraform Enterprise を使って Terraform のワークフローを運用してるチームも多いと思うし(実際に僕も仕事では Terraform Cloud を使っている),使うとどういうメリットがあるのかを把握しておくことは重要だと思う.

また2023年5月に変更された料金プランが反映された機能比較表も載っていて素晴らしかった👏

www.hashicorp.com

誤植

読みながら気付いたところをまとめておく📝(サポートサイトに未掲載のもののみ)

  • P.21: 古いレゴシステム古いレガシーシステム(レゴシステムという言葉に馴染みがなく気になったけど実は一般的な用語?)
  • P.119: ステートファイル保存するステートファイルを保存する
  • P.125: チームメンバーににチームメンバーに
  • P.289: GithubGitHub
  • P.316: 書かれています、書かれています。

book.mynavi.jp

あと誤植ではないけど少し気になったのは,一部のサンプルコードでリソース名にハイフンが使われていたところ.Terraform Style Guide / Google Cloud Terraform Best practices など,基本的にはリソース名の単語区切りにはアンダースコアが推奨されているため,今後 Terraform に入門する人は以下のドキュメントなどもあわせて読んでおくと良いと思う😀

developer.hashicorp.com

cloud.google.com

詳解 Terraform 第3版

あくまで個人的な感想として,2023年11月に出版された「詳解 Terraform 第3版」との比較をまとめておく.優劣を付けたいという意味ではなく読者層の違いがあると感じた❗

まず,認定資格 HashiCorp Certified: Terraform Associate の取得を目指していたり,基礎の基礎から Terraform を学びたいという初学者には「Terraform の教科書」が良いと思う.また AWS / Google Cloud / Azure をサポートしているため,特に Google Cloud / Azure のサンプルを参考に学びたかったら「Terraform の教科書」が良いと思う💡

Terraform に関して学べる技術的なレベルの深さという観点だと「詳解 Terraform 第3版」はより実践的なので,もちろん初学者も読めるけど,中級者におすすめできると思う.また多くのサンプルコードが AWS プロバイダーを前提にしているため,仕事で AWS を使っている場合にもおすすめ.よって,「Terraform の教科書」の目次をザッと見て,ある程度わかるな〜と感じるのであれば,最初から「詳解 Terraform 第3版」を読むのが良いかなと思う👌

SageMaker の地理空間機能を試そう: How to use SageMaker Processing with geospatial image

Amazon SageMaker が「地理空間 (Geospatial)」に特化した機能を限定的に(us-west-2 のみ)提供していることを最近知った🌍

aws.amazon.com

そして Amazon SageMaker Examples を確認したら地理空間機能を試せるサンプルがあったため,「How to use SageMaker Processing with geospatial image」を試してみた❗️

github.com

How to use SageMaker Processing with geospatial image の概要としては Amazon SageMaker Processing を使って SENTINEL-2 の衛星画像データから NDVI (Normalized Difference Vegetation Index) を計算する.NDVI は植物の反射の特性から簡易的に植生の状況を把握するために使う指標で,詳細は国土地理院のサイトなどに載っている🌿

www.gsi.go.jp

drone.kmtech.jp

実施前の注意点としては Amazon SageMaker の地理空間機能自体に課金体系があって「月額 150 USD」支払う必要があるところ.無料利用枠もあるけど,地理空間機能自体の利用履歴ではなく「Amazon SageMaker リソースを作成してから60日間」となり,過去に Amazon SageMaker の代表的な機能を使っていると即課金になってしまう.今回の Jupyter Notebook は Amazon SageMaker Studio Classic の ml.geospatial.interactive インスタンス上で動かすため,課金体系を調べてから慎重に使うと良いかなと💰

aws.amazon.com

学べたこと

boto3 に実装されてる SageMakergeospatialcapabilities は知らなかった💡今回は search_raster_data_collection 関数を使って SENTINEL-2 から北アメリカアイダホ州の衛星画像データを取得した.検索フィルタの AreaOfInterestGeometry に GeoJSON を設定するなど,位置情報に慣れていれば問題なく使えそう🌍

boto3.amazonaws.com

Amazon SageMaker Processing の ScriptProcessor で地理空間処理を実行する場合はコンテナイメージとして 081189585635.dkr.ecr.us-west-2.amazonaws.com/sagemaker-geospatial-v1-0:latest を指定する.現時点だと us-west-2(オレゴン)限定だしイメージ URL は固定のようだった.また準備として実行ロールに AmazonSageMakerGeospatialFullAccess マネージドポリシーをアタッチしておく必要もある👌

docs.aws.amazon.com

最終的に Amazon SageMaker Processing で計算した NDVI を Matplotlib で可視化する.場所的にはローウェル湖 (Lake Lowell) 周辺で,サンプルとして選ばれた 2022/03, 2022/06, 2022/07, 2022/08, 2022/09 を比較すると時期による NDVI の変化(3月は NDVI 低め)を確認できたりする👀

Example: NDVI for 03/2022

Example: NDVI for 06/2022

Example: NDVI for 07/2022

Example: NDVI for 08/2022

Example: NDVI for 09/2022

その他

Jupyter Notebook の CI Badge が古くてエラーになっていたのは直してプルリクエストを送っておいた✅

github.com

まとめ

月額課金もあって気軽に試しにくくはあるけど,他にもまだまだ地理空間機能があって興味はあるので勉強していこう❗️

docs.aws.amazon.com

関連記事

位置情報などを基礎から学ぶなら「現場のプロがわかりやすく教える位置情報エンジニア養成講座」がおすすめで過去に書評記事を書いた📕

kakakakakku.hatenablog.com

AWS CDK で AWS Step Functions から Amazon SageMaker Processing を .sync で実行する

AWS Step Functions から別のサービスを直接統合するときに「最適化された統合 (Optimized integrations)」「AWS SDK 統合 (AWS SDK integrations)」という選択肢がある.例えば AWS Step Functions から Amazon SageMaker Processing を実行する場合,AWS Step Functions 側で実行完了を待つ必要があることが多く,最適化された統合であれば .sync がサポートされているため,AWS Step Functions の Resourcearn:aws:states:::sagemaker:createProcessingJob.sync と指定すれば簡単に解決できる👏

docs.aws.amazon.com

docs.aws.amazon.com

AWS CDK を使うと

実は AWS CDK では一部の最適化された統合はサポートされてなく,例えば Amazon SageMaker だと CreateHyperParameterTuningJob / CreateLabelingJob / CreateProcessingJob は現状 aws_stepfunctions_tasks に実装されていなかった.

docs.aws.amazon.com

Amazon SageMaker Processing (CreateProcessingJob) に関しては issue も出ていた💡

github.com

よって,現状では AWS CDK の aws_stepfunctions_tasks.CallAwsService で AWS SDK 統合を使う必要があるけど,AWS SDK 統合だと別のサービスを呼び出したら終了になってしまうという課題も残る.結果的に .waitForTaskToken を活用したり,AWS Lambda 関数を独自実装して Amazon SageMaker Processing の DescribeProcessingJob API で ProcessingJobStatus をチェックしたりという工夫が必要になってしまう💨

aws_stepfunctions.CustomState を使う

少し前置きが長くなったけど,AWS CDK の aws_stepfunctions_tasks でサポートされてなく .sync を実現したい場合に aws_stepfunctions.CustomState が使える❗️CustomState を使えば Amazon States Language (ASL) のまま AWS CDK の実装に組み込める.今回は Amazon SageMaker Processing を例に検証したことをまとめておく.基本的に他のアクションでも同じように実現できるはず〜 \( 'ω')/

docs.aws.amazon.com

1. Before: aws_stepfunctions_tasks.CallAwsService

まずは aws_stepfunctions_tasks.CallAwsService を使って AWS Step Functions と Amazon SageMaker Processing の「AWS SDK 統合」を実装するサンプルを紹介する.AWS CDK で作るリソースは Amazon SageMaker Processing で動かすコンテナイメージを管理する Amazon ECR 関連と AWS Step Functions 関連で,あとは細かく IAM Role なども必要になってくる.ちなみに Amazon SageMaker Processing ではシンプルに hello-world イメージを動かすため,ProcessingInputsProcessingOutputConfig などの設定は省略している😃

docs.aws.amazon.com

ポイントは aws_stepfunctions_tasks.CallAwsServiceservice: 'sagemaker'action: 'createProcessingJob' を設定しているところ.とにかく Amazon SageMaker Processing を実行するだけなら簡単.ちなみに ProcessingJobName は重複できない仕様になっているため,AWS Step Functions の組み込み関数 States.FormatStates.UUID を組み合わせて動的に生成するようにした👌組み込み関数便利〜

docs.aws.amazon.com

import {
  Stack,
  StackProps,
  aws_ecr,
  aws_iam,
  aws_stepfunctions,
  aws_stepfunctions_tasks,
} from 'aws-cdk-lib'
import * as ecrdeploy from 'cdk-ecr-deployment'
import { Construct } from 'constructs'

export class SandboxCdkSageMakerProcessingStack extends Stack {
  constructor(scope: Construct, id: string, props?: StackProps) {
    super(scope, id, props)

    const repository = new aws_ecr.Repository(this, 'HelloWorldRepository', {
      repositoryName: 'hello-world',
    })

    new ecrdeploy.ECRDeployment(this, 'HelloWorldRepositoryDeployment', {
      src: new ecrdeploy.DockerImageName('hello-world'),
      dest: new ecrdeploy.DockerImageName(repository.repositoryUriForTag('latest')),
    })

    const sageMakerRole = new aws_iam.Role(this, 'SageMakerRole', {
      roleName: 'sandbox-sagemaker-role',
      assumedBy: new aws_iam.ServicePrincipal('sagemaker.amazonaws.com')
    })

    repository.grantPull(sageMakerRole)

    const helloWorldProcessingJob = new aws_stepfunctions_tasks.CallAwsService(this, 'HelloWorldProcessingJob',
      {
        service: 'sagemaker',
        action: 'createProcessingJob',
        parameters: {
          'ProcessingJobName.$': `States.Format('hello-world-{}', States.UUID())`,
          'RoleArn': sageMakerRole.roleArn,
          'ProcessingResources': {
            'ClusterConfig': {
              'InstanceCount': 1,
              'InstanceType': 'ml.t3.medium',
              'VolumeSizeInGB': 1,
            }
          },
          'AppSpecification': {
            'ImageUri': '000000000000.dkr.ecr.ap-northeast-1.amazonaws.com/hello-world'
          },
          'StoppingCondition': {
            'MaxRuntimeInSeconds': 600
          }
        },
        iamResources: ['*'],
        additionalIamStatements: [
          new aws_iam.PolicyStatement({
            actions: ['iam:PassRole'],
            resources: ['*'],
          })
        ]
      })

    new aws_stepfunctions.StateMachine(this, 'SandboxStateMachine', {
      stateMachineName: 'sandbox',
      definitionBody: aws_stepfunctions.DefinitionBody.fromChainable(helloWorldProcessingJob),
    })
  }
}

AWS CDK をデプロイして AWS Step Functions を実行すると,AWS Step Functions はすぐに終了して Amazon SageMaker Processing は裏で動いていた👀

2. After: aws_stepfunctions.CustomState

今度は aws_stepfunctions.CustomState を使って AWS Step Functions と Amazon SageMaker Processing の「最適化された統合」を実装するサンプルを紹介する.

実装は大きく変化せず,大きく2つのポイントがある.まず1つ目は aws_stepfunctions.CustomStateType: 'Task'Resource: 'arn:aws:states:::sagemaker:createProcessingJob.sync' を設定しているところ.Amazon States Language (ASL) として表現できるため,Amazon SageMaker Processing を .sync で実行できる.ちなみに AWS SDK 統合だと arn:aws:states:::aws-sdk:sagemaker:createProcessingJob という ARN になる💡

2つ目は AWS Step Functions に設定した IAM Role に別途ポリシーを追加する必要があるところ.aws_stepfunctions_tasks.CallAwsService だと iamResources / iamAction / additionalIamStatements あたりを設定すれば自動的にポリシーが追加される仕組みになっている.ちなみに今回の例はポリシーを少し雑に設定しているため,最小権限の原則に沿って狭めてもらえると良いかと🙏

import {
  Stack,
  StackProps,
  aws_ecr,
  aws_iam,
  aws_stepfunctions,
} from 'aws-cdk-lib'
import * as ecrdeploy from 'cdk-ecr-deployment'
import { Construct } from 'constructs'

export class SandboxCdkSageMakerProcessingStack extends Stack {
  constructor(scope: Construct, id: string, props?: StackProps) {
    super(scope, id, props)

    const repository = new aws_ecr.Repository(this, 'HelloWorldRepository', {
      repositoryName: 'hello-world',
    })

    new ecrdeploy.ECRDeployment(this, 'HelloWorldRepositoryDeployment', {
      src: new ecrdeploy.DockerImageName('hello-world'),
      dest: new ecrdeploy.DockerImageName(repository.repositoryUriForTag('latest')),
    })

    const sageMakerRole = new aws_iam.Role(this, 'SageMakerRole', {
      roleName: 'sandbox-sagemaker-role',
      assumedBy: new aws_iam.ServicePrincipal('sagemaker.amazonaws.com')
    })

    repository.grantPull(sageMakerRole)

    const helloWorldProcessingJob = new aws_stepfunctions.CustomState(this, 'HelloWorldProcessingJobCustom',
      {
        stateJson: {
          Type: 'Task',
          Resource: 'arn:aws:states:::sagemaker:createProcessingJob.sync',
          Parameters: {
            'ProcessingJobName.$': `States.Format('hello-world-{}', States.UUID())`,
            'RoleArn': sageMakerRole.roleArn,
            'ProcessingResources': {
              'ClusterConfig': {
                'InstanceCount': 1,
                'InstanceType': 'ml.t3.medium',
                'VolumeSizeInGB': 1,
              }
            },
            'AppSpecification': {
              'ImageUri': '000000000000.dkr.ecr.ap-northeast-1.amazonaws.com/hello-world'
            },
            'StoppingCondition': {
              'MaxRuntimeInSeconds': 600
            }
          },
        }
      })

    new aws_stepfunctions.StateMachine(this, 'SandboxStateMachine', {
      stateMachineName: 'sandbox',
      definitionBody: aws_stepfunctions.DefinitionBody.fromChainable(helloWorldProcessingJob),
    }).addToRolePolicy(
      new aws_iam.PolicyStatement(
        {
          actions: [
            'events:DescribeRule',
            'events:PutRule',
            'events:PutTargets',
            'iam:PassRole',
            'sagemaker:AddTags',
            'sagemaker:CreateProcessingJob',
          ],
          resources: [
            '*'
          ],
        }
      ))
  }
}

AWS CDK をデプロイして AWS Step Functions を実行すると,今度は Amazon SageMaker Processing の実行完了まで待てるようになった❗️やったー👏

Amazon SageMaker Processing Job を2回実行したログも載せておく📝

データエンジニアリングライフサイクルのステージと底流とは /「データエンジニアリングの基礎」を読んだ

2024年3月に出版された「データエンジニアリングの基礎」を読んだ📕

仕事で取り組んでいることに関係していて,何かしら新しい気付きや発見があれば良いな〜と思って読んでみたけど,期待以上に素晴らしい一冊だった❗️データを取り扱うときに考慮すべきポイントが詳細にまとまっていて,一人で読むのもヨシ!データプロジェクトのメンバーと輪読会をして改善点を洗い出すのもヨシ!という感じで幅広く活用できると思う.

特に本書で重要なのは「データエンジニアリングライフサイクル」というフレームワーク(コンセプト)で,データを活用してプロダクトの価値に変えていくための「ステージ」「底流」から構成されている👌(図を引用できると紹介しやすいんだけど...!)特にデータエンジニアリングライフサイクルのあらゆる側面をサポートする横断的な観点を本書では「底流 (undercurrents)」と表現していて,以下の6種類から構成されていた.本書は全体を通して,データエンジニアリングライフサイクルの観点から解説されていて印象的だった.

  • セキュリティ
  • データ管理
  • DataOps
  • データアーキテクチャ
  • オーケストレーション
  • ソフトウェアエンジニアリング

技術的利害関係者

1章にデータエンジニアに関連する技術的利害関係者の紹介が出てくる.また11章の「職種名と担当範囲は変化する」では担当範囲の境界はますます曖昧になっているとも書いてある.データエンジニアリングライフサイクルを実現するために多くの役割が必要になることは理解できるけど,ある程度の企業規模じゃないとそこまで専任を置くことは難しく,今いるメンバーでどうオーバーラップして前に進めていくかを考えることも重要なのかなと個人的には思った😀また役割のトピックを読んでいて,AWS Well-Architected Machine Learning Lens の「MLOE-04: Establish ML roles and responsibilities」を思い出した.同じく Machine Learning Lens でも役割と責任の分離は明確ではなくオーバーラップすると書いてある.どういう役割が必要なのかを把握することはとても重要❗️

docs.aws.amazon.com

データエンジニアが ML について知っておくべきこと

役割という観点だと,9章で紹介されていた「データエンジニアが ML について知っておくべきこと」というトピックも良かった😃僕自身はアプリケーション・インフラ・DevOps(定義は曖昧だけど)など,ソフトウェア開発に必要なある程度の領域を幅広く得意としているけど,機械学習 (ML) の専門性はなく,ちょうど苦戦しているところだった.

もちろん本書の「まえがき」にデータサイエンティストでは対処できない問題があると書いてある通り,データエンジニアリングライフサイクルを実現するためには特に底流まわりを支援する必要があって,僕自身のスキルセットはフィットしそうだけど,さらに僕自身が機械学習 (ML) の理解を深めることでプロジェクトの価値にさらに貢献できるかなと思っていた.とは言え,どこまで深く理解するべきなのか・そもそも理解できるのかという不安もあり,まずは本書に載っている「知っておくべきこと」の中から理解が浅いところを抑えておきたいなと感じた.

良いデータアーキテクチャの原則

3章に出てくる「良いデータアーキテクチャの原則」は AWS Well-Architected Framework や Google Cloud の 5 Principles for Cloud-Native Architecture にインスパイアされたと書いてあったけど,データエンジニアリングに限らず重要な観点で,紹介されていて良かった👏 逆に普段からソフトウェア開発をしながらこういう原則を意識できていれば,データプロジェクトでも応用しやすいと思う.あと原則7に Jeff Bezos の「Two-Way Door(双方向ドア)」という表現が紹介されていたのもなつかしくて良かった❗️

  • 原則1: 共通コンポーネントを賢く選択する
  • 原則2: 障害に備える
  • 原則3: スケーラビリティ設計
  • 原則4: アーキテクチャはリーダーシップだ
  • 原則5: 常に設計し続ける
  • 原則6: 疎結合システムを構築する
  • 原則7: 可逆な決定をする
  • 原則8: セキュリティを優先する
  • 原則9: FinOps を活用する

aws.amazon.com

読書メモ

他に読書メモに残したことの一部を箇条書きにしておく❗️

  • タイプAデータエンジニアとタイプBデータエンジニア
  • CAO (Chief Analytics Officer): 最高分析責任者
  • CAO-2 (Chief Algorithms Officer): 最高アルゴリズム責任者
  • リバース ETL
  • DMBOK (Data Management Body of Knowledge)
  • The DataOps Manifesto
  • 履歴書駆動開発 (Resume Driven Development)
  • ゼロスケール (Scale to Zero)
  • データカスケード
  • アプリケーションと ML 間での緊密なフィードバック

誤植

  • P13: DMM (Data Management Maturity) のリンクが 404 になっていた
  • P23: 図1-12 の データアーキテクチャデータアーキテクト では?(原著では Data architects と書かれていた)

X ポスト🔗

AWS Chatbot で AWS Lambda 関数の集約したロググループからログを取得する

AWS Lambda 関数の Errors メトリクスなどを Amazon CloudWatch Alarm でモニタリングして,エラー発生時に Amazon SNS と AWS Chatbot を組み合わせて Slack に通知すると Show error logs ボタンと Show logs ボタンが表示される✅ そして AWS Chatbot に権限を与えておくと,Amazon CloudWatch Logs から関連したログを Slack 上で取得できる.エラー発生時に迅速にエラー詳細を把握できるのは便利だと思う👌

Amazon CloudWatch Logs ロググループに注意する

便利な Show error logs ボタンと Show logs ボタンは AWS Lambda 関数のデフォルトの Amazon CloudWatch Logs ロググループ /aws/lambda/xxx を前提に作られている点は注意しておくと良いと思う.ドキュメントには直接明記されていなかった(見つけられなかった)けど,挙動からそう判断した.

具体的には,2023年11月にリリースされた AWS Lambda 関数の「高度なログ制御機能」を活用して,任意の Amazon CloudWatch Logs ロググループに集約している AWS Lambda 関数でボタンを押すと I can't get the logs for the CloudWatch Alarm sandbox-errors-alarm for you because I cannot find the log group /aws/lambda/sandbox for sandbox. というエラーが出て使えなかった(sandbox-errors-alarm は Amazon CloudWatch Alarm 名 / sandbox は AWS Lambda 関数名).

aws.amazon.com

@aws コマンドを使う

ボタンを押すよりも面倒ではあるけど,ワークアラウンドとして Slack 上で直接 @aws logs filter-log-events コマンドを実行すれば,簡易的に AWS Lambda 関数のエラー詳細を把握できる.AWS Chatbot から You can also run the query directly using the following command としてコマンド例を出してくれていたため,参考にしながら作ってみた.

ポイントを箇条書きで載せておく📝

  • --log-group-name に Amazon CloudWatch Logs ロググループを指定する
  • --log-stream-name-prefix に Amazon CloudWatch Logs ログストリームを指定する
  • --start-time--end-time に Unix Timestamp (Milliseconds) を指定する
@aws logs filter-log-events --region ap-northeast-1 --log-group-name aggregated-function-logs --log-stream-name-prefix 2024/04/12/sandbox[$LATEST] --start-time 1712883000000 --end-time 1712883300000

その他のオプションも活用する場合は CLI ドキュメントを参考で👌

awscli.amazonaws.com

そして @aws コマンドを使って AWS Chatbot 経由でログを取得できた.

まとめ

AWS Lambda 関数で任意の Amazon CloudWatch Logs ロググループに集約してる場合は Slack 上で AWS Chatbot の Show error logs ボタンと Show logs ボタンが使えず,今回は @aws コマンドを使ってワークアラウンドを試してみた.とは言え,正直エラー発生時に @aws コマンドを作るのは面倒ではあるため,本格的に実現するなら「カスタム Lambda アクション (Custom Lambda Action)」を実装する必要がありそう.あと @aws コマンドの引数が多くなければ「カスタム CLI アクション (Custom CLI Action)」を使う案もありそう.

docs.aws.amazon.com

docs.aws.amazon.com

関連記事

kakakakakku.hatenablog.com