5分でAWS SAMに入門する

今までAWSのコンソール上でLambdaを作っていましたが、SAMを試してみたら思ったより便利だったので、入門するための手順を共有します。

ブラックベルトはこちらです。

  • Lambdaの構築でSAMを使うメリット
    • Lambdaの設定や起動スケジュール等をまとめてコード化して管理できる
    • 関数の構築やテストがCLIで完結する
    • 似たような関数をたくさん作ることが楽で、作業ミスのリスクが低い
    • ビルドやデプロイの部分はAWS側が管理してくれる
    • 既にCloudFormationを利用している場合は追加の学習コストが少ない
  • デメリット
    • 少しずつコードを修正しながら検証する、いわゆるスモールスタートの段階ではコンソールを使ったほうが早い

入門

今回は公式が用意しているテンプレートを利用します。

前提

  • AWS CLIを使用できること
  • Dockerを使用できること(ローカルで関数を実行する場合のみ必要)

手順その1 公式サイトを参考にAWS SAM CLIをインストールする

docs.aws.amazon.com

手順その2 任意のフォルダ上でsam initを実行する

対話型でセットアップが始まります。(行数がとても長いので一部省略しています)

You can preselect a particular runtime or package type when using the `sam init` experience.
Call `sam init --help` to learn more.

Which template source would you like to use?
        1 - AWS Quick Start Templates
        2 - Custom Template Location
Choice: 1

Choose an AWS Quick Start application template
        1 - Hello World Example
Template: 1

Use the most popular runtime and package type? (Python and zip) [y/N]: N

Which runtime would you like to use?
        15 - python3.9
Runtime: 15

What package type would you like to use?
        1 - Zip
        2 - Image
Package type: 1


Would you like to enable X-Ray tracing on the function(s) in your application?  [y/N]: N
For more info, please view https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch-application-insights.html [y/N]: N

Project name [sam-app]: sam-nyumon
(後略)                                                                                                            

対話したくない人は以下のようにオプションをつけることで一発で作成できます。

sam init --runtime python3.9 --dependency-manager pip --app-template hello-world --name sam-nyumon

手順その3 ビルド&デプロイする

cd sam-nyumon
sam build
sam deploy

以下のようなログが出力されたらデプロイ成功です。

Successfully created/updated stack - sam-nyumon in ap-northeast-1

コンソール上でもLambda関数の作成が確認できるかと思います。

手順その4 実行してみる

Lambdaをローカルで実行するにはDockerが必要なので、起動しておきます。

sam local invoke

以下のログが出力されたら実行成功です。

{"statusCode": 200, "body": "{\"message\": \"hello world\"}"}%

手順その5 リソースを削除する

最後に、作成した関数を削除します。

sam delete

まとめ

sam init,sam build,sam deploy,sam local invokeの4コマンドを実行するだけで、Lambdaの作成からテストが実行できました。

また、Lambdaの設定を編集したいときはtemplate.yamlファイルの中のPropertiesを編集します。以下に、よく使う設定を列記します。

  • FunctionName
    • 関数名
    • 省略可能だがなるべく指定したほうがいい
  • Policies
    • Lambdaに付与するポリシー
  • MemorySize
    • メモリサイズ
  • Timeout
  • Environment
  • Events
    • Lambdaを起動するイベント、Eventbridgeもここで指定する

Resources:
  SlackTestFunction:
    Type: AWS::Serverless::Function
    Properties:
      FunctionName: "FunctionName" # 関数名
      CodeUri: function/ # コードの場所
      Handler: app.lambda_handler
      Runtime: python3.9
      Architectures:
        - x86_64
      Policies: # Lambdaに付与するポリシー
        - arn:aws:iam::******
      MemorySize: 1024 # メモリサイズ
      Timeout: 15 # タイムアウトまでの秒数
      Environment:
        Variables: # 環境変数
          TZ: Asia/Tokyo
      Events: # 関数を実行するイベント
        schedulename:
          Type: Schedule
      Properties:
        Schedule: "cron(0 22 * * ? *)" # UTC
        Name: schedule-name
        Enabled: true
        Input: | # 関数を実行するときに渡すパラメータ
          {
          "key1": "LOVE",
          "key2": "PHANTOM"
          }

全ての設定はこちら。 docs.aws.amazon.com

ここまで読んでいただき、ありがとうございました。

【Splunk】searchはログを検索する

searchコマンドの説明を書きます。
以下の記事の派生記事です。
canada-lemon.hatenablog.com

searchはその名の通りログを検索するコマンドです。

SPLを実行するとき、先頭に他のコマンドがない場合は、暗黙的にsearchコマンドが使われています。 例えば、| search index=_internalと入力してSPLを実行すると、最初のsearch部分が自動的に省略されてindex=_internalになります。

続きを読む

【Splunk】lookupはExcelのルックアップみたいなことをしてくれる

lookupコマンドの説明を書きます。
以下の記事の派生記事です。
canada-lemon.hatenablog.com

lookupはExcelのルックアップと同じようなことをやってくれるコマンドです。

続きを読む

AWS Solutions Architect Professional 合格体験記

こんにちは。
先日、AWS Certified Solutions Architect – Professional(SAP)に合格しました。
この記事では、合格体験記として、自分がやった勉強と私感を書きます。

続きを読む

「ディスプレイの接続が制限される可能性が出ます」という警告が一日後いつの間にか解決した

こんにちは。
私はノートPCと外部モニターの2つを使って、デュアルディスプレイ環境で仕事をしています。
先日、「ディスプレイの接続が制限される可能性が出ます」という警告が唐突に出て、唐突に解決したので、その記録を書きます。

この記事の論旨です

  • 今まで外部モニターに問題なく接続できていたが、ある日接続できなくなった
  • PCを再起動したり、デバイスマネージャーからドライバーを再インストールしたりしたが効果はなし
  • 翌日、使えるようになった

モニターが使えなくなった原因も、使えるようになった原因もわからず、煮え切らない記事となっており恐縮ですが、一例として参考になれば幸いです。

前提条件

私が使っているPCはMicrosoftSurface Laptop Goです。
www.microsoft.com 入出力端子はUSB-AとUSB-Cが1つずつで、前者をワイヤレスマウスとの接続、後者をモニターとの接続に使っていました。
職場のモニターの大半がUSB-Cに対応していない都合上、接続するときはHDMIとUSB-Cの変換アダプタを間に挟んでいました。
www.elecom.co.jp モニターは様々な種類のものを使っていたので具体的な製品名は割愛します。

Surfaceには充電用の端子とSurface Dock 2という専用のドックがあります。
この充電用端子とドックを使ってモニターに接続することも可能でした。
ドックは会議用のフロアに置いてあるので、普段は使ってませんでしたけどね。

発生事象とやったこと

ある日、PCを立ち上げて変換アダプタとPCを繋ぎ、仕事を始めようとしたところ、以下の警告が出て、モニターが入力を認識しないようになりました。

ディスプレイの接続が制限される可能性があります

エラーメッセージでGoogle検索し、ヒットした記事を参考にして以下の対応を実施しました。

  • 普段と違う変換アダプタを使う
  • 普段と違うモニターを使う
  • PCを再起動する
  • モニターの電源プラグを抜き差しして、再接続する
  • バイスマネージャーから、モニターやUSBに関係あるドライバを再インストールする
  • 高速スタートアップを無効化する

上述の対応は全て効果がありませんでした。
Windows Updateを確認したところ、最新の状態であり、直近でUpdateした痕跡もないため、こちらが原因の可能性も薄いです。

最後の手段でPCを初期化したりBIOSを弄ったりすることも考えましたが、流石に仕事用のPCでそれをやるのは怖い……。

気付き

色んな対応をやっていく内に、以下の2つのことがわかりました。

  • Surface Dock 2経由だとモニターに接続できる
  • 警告メッセージは変換アダプタをSurfaceのみに接続した段階でも発生する

Surface Dock 2では、充電用の端子を経由してモニターに接続します。
また、変換アダプタをモニターに接続せず、SurfaceのUSB-C端子と変換アダプタだけを繋いだ場合でも警告が出ます。
以上のことから、被疑箇所はモニターではなく、SurfaceのUSB-C端子ではないか?という疑いを持ちました。
今まで接続できていた組み合わせなので、USBの規格が合っていないという原因は考えにくいですが……。

疑いがあるからといってこれ以上何かできるわけでもありません。
サポートに問い合わせるときにちょっと情報の足しになる程度でしょうか。

その日はSurface Dock 2が空いているときはそれを使い、空いてないときは内蔵モニターだけで仕事をしました。

その後

翌日、PCを起動してダメ元でモニターと繋いでみたところ、なんと接続できました。
再度Windos Updateを確認しましたが、Updateした形跡はありません。

なぜ接続できなくなったのか、なぜ接続できるようになったのかがわからないまま、この不具合は一旦幕を閉じました。


今回の記事では、PCが外部モニターに接続できなくなった事象と、それが解決するまでを書きました。
もし同様の不具合に遭遇された方は、(急ぎじゃないなら)一日待ってみるのも手かもしれません。
ここまで読んでいただき、ありがとうございました。

【Splunk】timechartは時系列の表示に特化する

timechartコマンドの説明を書きます。
以下の記事の派生記事です。
canada-lemon.hatenablog.com

timechartはstatsコマンドの統計処理をベースとしつつ、時系列の表示に特化したコマンドです。

続きを読む