AWS

Amazon CloudWatchアラートをAmazon SNSをトリガーとしてAWS LamdaからSlackに通知してみた(環境構築編)

概要

こんにちは、テクニカルサポートの牛山です。
今回は、AWS Lamdaを使用して、Amazon CloudWatchのアラームをAWS SNSを起点として、AWS LamdaよりSlackへメッセージを送信する処理を実装したいと思います。

環境構築が想像以上に煩雑なので2回に分けて執筆していきたいと思っています。

今回、1回目は、AWS SAM CLIをインストールするところまで解説します。

手順

AWS Serverless Application Repositoryからクローン

AWS SAM(Serverless Application Model) のテンプレートをAWS側が git の公開レポジトリとしてサンプルファイルやテンプレートを提供していますので、今回はこちらからソースをローカルにクローンしておこなっていきます。

gitコマンドを使用してSAMサンプル群をローカルに持ってきます。

[ec2-user@dev ~]$ git clone https://github.com/amazon-archives/serverless-app-examples.git
----------------------------------------------------------------
Cloning into 'serverless-app-examples'...
remote: Enumerating objects: 649, done.
remote: Counting objects: 100% (649/649), done.
remote: Compressing objects: 100% (432/432), done.
remote: Total 649 (delta 301), reused 527 (delta 208), pack-reused 0
Receiving objects: 100% (649/649), 376.06 KiB | 711.00 KiB/s, done.
Resolving deltas: 100% (301/301), done.
----------------------------------------------------------------

クローンが完了すると 「serverless-app-examples」 フォルダーができます。
サンプルには、javascriptとpythonが存在しますが、今回は、javascriptを使用します。

[ec2-user@dev ~]$ ls -1

serverless-app-examples

cloudwatch-alarm-to-slack フォルダーが存在するのでcdコマンドで移動します。

[ec2-user@dev ~]$ cd serverless-app-examples/javascript/cloudwatch-alarm-to-slack

「serverless-app-examples」 の中身を確認するとjsonファイルやyamlファイルが存在していることを確認します。
AWS SAMは、yamlを見て動くようになっています。

[ec2-user@dev cloudwatch-alarm-to-slack]$ ls -1

index.js
package.json
template.yaml

AWS SAM CLIのインストール

  1. IAMユーザの作成
    別記事にはなりますが、Amplifyの記事で、IAMユーザ作成をする下記リンク記事が参考になりますのでこれをもとにIAMユーザを作成します。
    IAMユーザには必要最小限の権限で良いですが煩雑なので今回は管理者権限をもったIAMユーザを作成します。
    管理者アカウントでログインする必要がありますので注意してください。
    Amplifyを設定する
    ※AWS参考記事

  2. Dockerのインストール
    Dockerはアプリケーションをローカルでテストしたり、--use-containerフラグを使ってデプロイメントパッケージをビルドする必要がなければスキップすることが可能です。
    今回は、使用しないのでインストールしません。

  3. Homebrewのインストール
    AWS SAM CLIをLinuxへインストールするのに推奨されいるのが、 「Homebrewパッケージマネージャー」 となりますのでインストールします。
     
    下記、コマンドでec2-userに対してHomebrewをインストールします。
    今回は、 「Press Control-D to install to /home/ec2-user/.linuxbrew」 に該当するので、 「Ctrl + D」を押します。
     
    無事にインストールが完了すると 「==> Installation successful!」 と出力されます。

    [ec2-user@dev ~]$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
    ----------------------------------------------------------------
    which: no ruby in (/home/ec2-user/.nvm/versions/node/v15.4.0/bin:/home/ec2-user/.vscode-server/bin/940b5f4bb5fa47866a54529ed759d95d09ee80be/bin:/home/ec2-user/.vscode-server/bin/940b5f4bb5fa47866a54529ed759d95d09ee80be/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/ec2-user/.local/bin:/home/ec2-user/bin)
    ==> Select the Homebrew installation directory
    - Enter your password to install to /home/linuxbrew/.linuxbrew (recommended)
    - Press Control-D to install to /home/ec2-user/.linuxbrew
    - Press Control-C to cancel installation
    
    あなたはシステム管理者から通常の講習を受けたはずです。
    これは通常、以下の3点に要約されます:
    
        #1) 他人のプライバシーを尊重すること。
        #2) タイプする前に考えること。
        #3) 大いなる力には大いなる責任が伴うこと。
    
    [sudo] ec2-user のパスワード:
    sudo: no password was provided
    ==> This script will install:
    ・
    ・[中略]
    ・
    Warning: /home/ec2-user/.linuxbrew/bin is not in your PATH.
    ==> Installation successful!
    ・
    ・
    ・
    ----------------------------------------------------------------

    下記、コマンドをそれぞれ実行してbrewコマンドが使用できるよう、環境変数を追加します。

    [ec2-user@dev ~]$ test -d ~/.linuxbrew && eval $(~/.linuxbrew/bin/brew shellenv)
    
    [ec2-user@dev ~]$ test -d /home/linuxbrew/.linuxbrew && eval $(/home/linuxbrew/.linuxbrew/bin/brew shellenv)
    
    [ec2-user@dev ~]$ test -r ~/.bash_profile && echo "eval \$($(brew --prefix)/bin/brew shellenv)" >>~/.bash_profile
    
    [ec2-user@dev ~]$ echo "eval \$($(brew --prefix)/bin/brew shellenv)" >>~/.profile

    「brew --version」 で、バージョンが出力されれば、正しく設定がおこなわれていることになります。

    [ec2-user@dev ~]$ brew --version

    Homebrew 2.6.2
    Homebrew/linuxbrew-core (git revision 887bf1; last commit 2020-12-15
  4. 開発者ツールのインストール
    AWS SAM CLIをインストールする段階で、Homebrewからgccが入っていないとおこられ、 「brew install gcc」 をするも、コンパイルエラーが起きてしまいますので 「Development tools」 をyumでインストールしてからおこなうようにします。

    [ec2-user@dev ~]$ sudo yum groupinstall "Development tools" -y

    下記、gccはコンパイルしてインストールになりますので5 ~ 10分程度時間がかかります。
    途中、 「==> Installing gcc」 と出力されれば問題ありません。
    ※筆者の環境では、==> Installing gccのあとにパッチあてが走りfailで失敗しましたが、その後のAWS SAM CLIインストールには影響ありませんでした。

    [ec2-user@dev ~]$ brew install gcc

    ・
    ・[中略]
    ・
    ==> Installing gcc
    ・
    ・[中略]
    ・
  5. AWS SAM CLI依存コンポーネントインストール

    [ec2-user@dev cloudwatch-alarm-to-slack]$ brew tap aws/tap

    ==> Tapping aws/tap
    Cloning into '/home/ec2-user/.linuxbrew/Homebrew/Library/Taps/aws/homebrew-tap'...
    remote: Enumerating objects: 96, done.
    remote: Counting objects: 100% (96/96), done.
    remote: Compressing objects: 100% (82/82), done.
    remote: Total 1005 (delta 54), reused 29 (delta 14), pack-reused 909
    Receiving objects: 100% (1005/1005), 194.62 KiB | 428.00 KiB/s, done.
    Resolving deltas: 100% (511/511), done.
    Tapped 8 formulae (46 files, 279.9KB).
  6. AWS SAM CLIのインストール
    いよいよ、AWS SAM CLIのインストールです。
    こちらもビルドしてインストールになるので、5 ~ 10分程時間がかかります。
    途中、 「==> Installing aws/tap/aws-sam-cli」 と出力されれば問題ありません。

    [ec2-user@dev ~]$ brew install aws-sam-cli

    ・
    ・[中略]
    ・
    ==> Installing aws/tap/aws-sam-cli
    ・
    ・[中略]
    ・

    「sam --version」 でバージョンが出力されれば問題ありません。

    [ec2-user@dev ~]$ sam --version

    SAM CLI, version 1.13.2

まとめ

紆余曲折ありましたが、なんとか、AWS SAM CLIをインストールすることができました。
次回は、実際に、AWS上にリソースの構築をおこなっていきます。

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA