AWS Batchをさわってみた

はじめに

AWS Batchのイメージを掴むために動くところを確認してみました。

Docker Hubからpythonのイメージを取得して コマンド[python --version]を実行しました。

イメージ図

f:id:lovebeerbear:20201018183955p:plain

手順

コンピューティング環境を作成する。

1) AWS Batchのコンソールを開く。

2) 左ペインから[コンピューティング環境]を選択して、[作成]をクリックする。

3) [コンピューティング環境設定]を設定する。

  • コンピューティング環境のタイプ : マネージド型
  • コンピューティング環境の名前 : test-batch-env
  • サービスロール : Create new role
  • インスタンスロール : Create new role

f:id:lovebeerbear:20201018184110p:plain

4) [インスタンスの設定]を設定する。

プロビジョニングモデル で オンデマンド を選択する。 それ以外はデフォルトのままにする。

f:id:lovebeerbear:20201018184234p:plain

5) [ネットワーキング],[EC2 タグ],[タグ]はデフォルトのままにする。

6) 下部にある[コンピューティング環境を作成]をクリックする。

7) コンピューティング環境に[test-batch-env]が追加されていることを確認する。

ジョブキューを作成する。

1) 左ペインから[コンピューティング環境]を選択して、[作成]をクリックする。

2) [ジョブキューの設定] で [ジョブキュー名] を [test-batch-queue]に設定する。

3) [接続されたコンピューティング環境]で[test-batch-env]を選択する。

f:id:lovebeerbear:20201018184438p:plain

4) 下部にある[作成]をクリックする。

5) ジョブキューに[test-batch-queue]が追加されたことを確認する。

ジョブ定義を作成する。

1) 左ペインから[ジョブ定義]を選択して、[作成]をクリックする。

2) [ジョブ定義]で以下を設定する。

  • 名前 : test-batch-def
  • Retry Strategies > ジョブの試行 : 1
  • 実行タイムアウト : 120
  • コンテナプロパティ > イメージ : python
  • コンテナプロパティ > コマンドの構文 : Bash
  • コンテナプロパティ > コマンド : python --version
  • vCPU : 2
  • メモリ : 2000

f:id:lovebeerbear:20201018185911p:plain

3) 下部にある[作成]をクリックする。

4) ジョブ定義に[test-batch-def]が追加されたことを確認する。

ジョブを送信する。

1) 左ペインから[ジョブ]を選択して、[新しいジョブを送信]をクリックする。

2) [新しいジョブを送信]で以下を設定する

  • 名前 : test-batch
  • ジョブ定義 : test-batch-def:1
  • ジョブキュー : test-batch-queue
  • 実行タイムアウト : 120
  • Retry Strategies>ジョブの試行 : 1
  • ジョブタイプ : 単一
  • コンテナプロパティ > コマンドの構文 : Bash
  • コンテナプロパティ > コマンド : python --version
  • vCPU : 2
  • メモリ : 2000

f:id:lovebeerbear:20201018184552p:plain

4) 下部にある[送信]をクリックする。

5) ジョブに[test-batch]が追加されてステータスが [RUNNABLE] であることを確認する。

f:id:lovebeerbear:20201018184754p:plain

ジョブの結果を確認する。

1) ジョブ[test-batch]のステータスが [SUCCEEDED]であることを確認する。

f:id:lovebeerbear:20201018184843p:plain

2) ジョブ[test-batch]をクリックする。

3) コンテナにあるログストリーム名をクリックする。 f:id:lovebeerbear:20201018184919p:plain

4) [CloudWatch Logs] の 出力から Pythonのバージョンが出力されていることを確認する。 f:id:lovebeerbear:20201018184904p:plain

さいごに

今回は、AWS Batchを実行してみました。

今回はpythonのバージョンを確認しただけですが 工夫しだいで色々な使い方ができそうです。

参考サイト

AWS Batchを使って5分以上かかる処理を実行してみる https://dev.classmethod.jp/articles/aws-batch-5min-over/

プライベートサブネットのEC2インスタンスにログインできるようにする。

はじめに

プライベートサブネットに存在するEC2に接続するため VPCエンドポイント経由でSystems ManagerのSession Managerでログインしてみました。

イメージ図

f:id:lovebeerbear:20200723134533p:plain

前提条件

今回はEC2は、初めからSSMエージェントがインストールされている Amazon Linux 2 を使用します。

手順

EC2を作成する。

プライベートサブネットにAmazon Linux2のインスタンスを作成します。

このときユーザーデータには SSMエージェントの起動および自動起動設定のコマンドを書いておきます。

#!/bin/bash
sudo systemctl enable amazon-ssm-agent
sudo systemctl start amazon-ssm-agent

EC2用のIAMロールを作成する。

ポリシー[AmazonEC2RoleforSSM]を付与したロールを作成します。

f:id:lovebeerbear:20200723133645p:plain

EC2にIAMロールを追加する。

先ほど作成したロールをEC2に付与します。

f:id:lovebeerbear:20200723133714p:plain

VPCエンドポイントに付与するセキュリティグループを作成する。

VPCエンドポイントに付与するセキュリティーグループを作成しておきます。

このときインバンドとしてEC2からのHTTPS通信を許可しておきます。

f:id:lovebeerbear:20200723133742p:plain

サービス[com.amazonaws.ap-northeast-1.ssm]用のVPCエンドポイントを作成する。

VPCのコンソールを開いて左のペインにある[エンドポイント]をクリックします。

エンドポイントの作成画面になるので以下を設定します。

  • [サービス名] : com.amazonaws.ap-northeast-1.ssm
  • [VPC] : EC2の存在する VPC ID
  • [サブネット] : EC2の存在する サブネットID
  • [プライベート DNS 名を有効にする] : チェックする。
  • [セキュリティグループ] : 上で作成したセキュリティーグループを選択

VPCエンポイントを追加で二つ作成する。

以下の2つのサービスのそれぞれのエンドポイントを先ほどと同じ手順で作成します。

  • com.amazonaws.ap-northeast-1.ec2messages
  • com.amazonaws.ap-northeast-1.ssmmessages

f:id:lovebeerbear:20200723133758p:plain
作成完了後のイメージ

結果確認

Systems Managerのマネージドインスタンスに、作成したEC2が存在すれば設定成功です。

※表示されていない場合はEC2の再起動を実施してみてください。

f:id:lovebeerbear:20200723133821p:plain

Session Managerでログインしてみる。

EC2インスタンスを選んでアクションから[Start Session]をクリックすれば、EC2にアクセスできます。

f:id:lovebeerbear:20200723133835p:plain

f:id:lovebeerbear:20200723133851p:plain

参考サイト

Systems Manager を使用してインターネットアクセスなしでプライベート EC2 インスタンスを管理できるように、VPC エンドポイントを作成するにはどうすればよいですか? https://aws.amazon.com/jp/premiumsupport/knowledge-center/ec2-systems-manager-vpc-endpoints/

起動時に Amazon EC2 Linux インスタンスAWS Systems Manager エージェント (SSM エージェント) をインストールする方法を教えてください。 https://aws.amazon.com/jp/premiumsupport/knowledge-center/install-ssm-agent-ec2-linux/

インプットトランスフォーマーを使ってSNS通知を読みやすくする

はじめに

CloudWatchルールからのSNS通知は、なにも設定しない場合、 JSONで通知されてきます。

JSONだと読み辛いのでインプットトランスフォーマーを設定してみました。

今回はEC2インスタンスがrunnningになったときに リージョンとインスタンスIDだけを通知してくれるよう設定しました。

手順

CloudWatchルールの設定

イベントソース

以下を設定しました。

サービス名 : EC2
イベントタイプ : EC2 Instance State-change Notification
特定の状態 : running

f:id:lovebeerbear:20200709233028p:plain

ターゲット

SNSトピックを選んでインプットトランスフォーマーは以下を設定しました。

■入力パス

{
  "region": "$.region",
  "instance-id": "$.detail.instance-id"
}

■入力テンプレート

"■お知らせ"
"リージョン<region>のインスタンス<instance-id>が起動しました。"

f:id:lovebeerbear:20200709233047p:plain

EC2インスタンスの起動&SNSのメールを確認

EC2インスタンスを起動するとSNSから以下のようなメールが送信されてきました。 ちゃんと人が読める形になってます。

"■お知らせ"
"リージョンap-northeast-1のインスタンスi-0868c4f305564051aが起動しました。"

終わりに

JSONから人の読みやすい形に変えて通知できました。

参考サイト

特定の AWS サービスのイベントタイプがトリガーされた時にカスタム SNS 通知を送信するには、GuardDuty の CloudWatch Events ルールをどのように設定すればよいですか? https://aws.amazon.com/jp/premiumsupport/knowledge-center/guardduty-cloudwatch-sns-rule/

[新機能] Amazon CloudWatch EventsのInput Transformerを試してみた https://dev.classmethod.jp/articles/cloudwatch-events-inputtransfer/

AWS QuickSightへのアクセスにAWS SSOをつかう

はじめに

AWS QuickSightのSAML連携の設定方法の確認のため SSOを使ってみた

前提条件

手順

SSOでQuicksightを利用できるように設定

  • SSOのコンソールを開く
  • [アプリケーション]を選択
  • [新規アプリケーションの追加]をクリックして [Amazon QuickSight] を選ぶ f:id:lovebeerbear:20200707221528p:plain
  • [詳細]のセクションではデフォルトのまま f:id:lovebeerbear:20200707221452p:plain
  • [AWS SSO メタデータ] のセクションでは [AWS SSO SAML メタデータファイル]のファイルをダウンロードする f:id:lovebeerbear:20200707221341p:plain
  • アプリケーションのプロパティ のセクションはデフォルトのまま f:id:lovebeerbear:20200707221828p:plain
  • アプリケーションメタデータ のセクションはデフォルトのまま f:id:lovebeerbear:20200707221345p:plain
  • 変更の保存を実行

IAMでSAML プロバイダーを作成する

  • IAM コンソールを開く
  • ID プロバイダー をクリックしてプロバイダの作成をクリックする
  • プロバイダーのタイプをSAMLを選ぶ
  • プロバイダ名は任意の値(ここでは SSOtoQuickSight とする)
  • メタデータドキュメントは 先ほどダウンロードした メタデータファイルをアップロードする f:id:lovebeerbear:20200707222307p:plain
  • [次のステップ]をクリックする
  • [プロバイダー情報の検証]の画面で[作成]をクリックする

フェデレーティッドユーザーのポリシーを作成する

  • ポリシー作成の画面を開く
  • JSONタブを選択して以下のように設定する
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "sts:AssumeRoleWithSAML",
            "Resource": "<SAML プロバイダーのARN>",
            "Condition": {
                "StringEquals": {
                    "saml:aud": "https://signin.aws.amazon.com/saml"
                }
            }
        },
        {
            "Action": [
                "quicksight:CreateReader"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:quicksight::<自分のアカウントID>:user/${aws:userid}"
            ]
        }
    ]
}
  • 名前をつけて[ポリシーの作成]をクリックする (ここではSSOtoQuickSightPolitcyとする)

フェデレーティッドユーザーのロールを作成する

  • ロール作成の画面を開く
  • [SAML 2.0 フェデレーション] を選ぶ
  • [SAML プロバイダー] で SAML プロバイダー(SSOtoQuickSight) を選ぶ
  • [プログラムによるアクセスと AWS マネジメントコンソールによるアクセスを許可する] を選ぶ f:id:lovebeerbear:20200707225714p:plain
  • [次のステップ] をクリックする
  • [Attach アクセス権限ポリシー] で 先ほどのポリシー(SSOtoQuickSightPolitcy) を選ぶ f:id:lovebeerbear:20200707230211p:plain
  • [次のステップ] をクリックする
  • [タグの追加 (オプション)]では特に設定せずに[次のステップ] をクリックする
  • ロールにも名前をつけて[ロールの作成]をクリックする(ここでは SSOtoQuickSightRole とする)

SSOのコンソールに戻って属性を追加する

  • SSOのコンソールを開く
  • アプリケーションQuickSightを選択する
  • [属性マッピング]タブをクリックして新規属性マッピングの追加 をクリックする
  • 新しい属性マッピングを追加する
Field = https://aws.amazon.com/SAML/Attributes/Role
Value = arn:aws:iam::<自分のアカウントID>:role/ROLENAME,arn:aws:iam::<自分のアカウントID>:saml-provider/<SAMLプロバイダー名(ここではSSOtoQuickSight)>
Format = unspecified

f:id:lovebeerbear:20200707230931p:plain - [変更の保存]をクリックする

結果確認

  • SSO のコンソールからアプリケーションQuickSightを選ぶ
  • [割り当て済みユーザー]タブをクリックする
  • [ユーザーの割り当て]をクリックして割り当てる
  • 割り当てたユーザーのSSOのユーザーポータルに移動する
  • [Amazon QuickSight]をクリックする f:id:lovebeerbear:20200707232531p:plain
  • [QuickSightへようこそ]のページが表示さればOK f:id:lovebeerbear:20200707232552p:plain

参考サイト

Amazon QuickSight のアクセスに Okta をフェデレーションする https://aws.amazon.com/jp/blogs/news/federate-amazon-quicksight-access-with-okta/

SAML のセットアップ https://docs.aws.amazon.com/ja_jp/quicksight/latest/user/external-identity-providers-setting-up-saml.html

SAML 2.0 フェデレーション用のロールの作成 (コンソール) https://docs.aws.amazon.com/ja_jp/singlesignon/latest/userguide/manage-your-directory-sso.html

AWS CDKを入れるまでの備忘録

はじめに

AWS CDKをインストールするまでの備忘録 (ほとんどnmpを使えるようにするための手順)

作業環境

  • OS : macOS Catalina
  • ターミナルのシェル : zsh

注意:awscliとhomebrewはインストール済み

手順

nodebrewのインストール

インストール

$ brew install nodebrew

nodebrewがインストールされたことを確認

$ nodebrew -v
nodebrew 1.0.1
:
:

nodebrewにnodeをインストール

nodebrewのフォルダを作成

$ mkdir -p ~/.nodebrew/src

nodebrewにnodeをインストール(安定バージョン)

$ nodebrew install-binary stable

インストールされたことを確認

$ nodebrew ls
v14.1.0

nodeの有効化と環境設定

nodebrewにインストールされたnodeのバージョンを有効化(v14.1.0)

$ nodebrew use v14.1.0

有効化されたことを確認

$ node -v
v14.1.0

パスを追加して再度読み込み

$ echo 'export PATH=$HOME/.nodebrew/current/bin:$PATH' >> ~/.zprofile
$ source ~/.zprofile

aws-cdkのインストール

aws-cdkをインストール

$ npm install -g aws-cdk

インストールされたことを確認

$ cdk --version
1.36.1 (build 4df7dac)

参考サイト

AWS CDK Intro Workshop

MacにNode.jsをインストール

CloudWatch 複合アラームを設定してみる

はじめに

CloudWatch 複合アラームの設定方法を確認してみた

事前条件

CloudWatchアラームが2個設定されていること。 (ここではAlarmA, AlarmBとする)

手順

複合アラームAlarmABを作成する。

  • CloudWatchアラームの画面でAlarmAとAlarmBのチェックボックスにチェック
  • [複合アラームを作成]をクリックする。
  • [複合アラーム条件を指定]で条件を設定。
ALARM("AlarmA") OR 
ALARM("AlarmB")
  • [アクションの設定]でアラーム状態トリガーとSNSを設定
  • [名前と説明を追加]で名前と説明を設定(AlarmABを設定)
  • [複合アラームのプレビューと作成]で設定内容を確認して問題なければ作成する。
  • アラームの中に作成した複合アラームが作成されていることを確認

アラーム状態になることをテストする。

AlarmAをアラーム状態にして AlarmABがアラームになることを確認する。

AlarmAを アラーム状態にする。

$ aws cloudwatch set-alarm-state \
    --alarm-name 'AlarmA' \
    --state-value 'ALARM' \
    --state-reason 'TEST'

AlarmAが アラーム状態になったことを確認

$ aws cloudwatch describe-alarms \
    --alarm-names AlarmA \
    --query 'MetricAlarms[].StateValue[]' \
    --output text
ALARM

AlarmABが アラーム状態になったことを確認

$ aws cloudwatch describe-alarms \
    --alarm-names AlarmAB \
    --alarm-types CompositeAlarm \
    --query 'CompositeAlarms[].StateValue[]' \
    --output text
ALARM

参考サイト

複合アラームの作成 https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/Create_Composite_Alarm.html

macにAWS CLI バージョン 2 をインストールしてみた

はじめに

macOSAWS CLI バージョン2を入れて、コマンド自動補完までできるようにしてみた。

作業環境

  • OS : macOS Catalina
  • ターミナルのシェル : zsh

手順

AWS CLI V2をインストール

インスール

$ curl "https://awscli.amazonaws.com/AWSCLIV2.pkg" -o "AWSCLIV2.pkg"
$ sudo installer -pkg AWSCLIV2.pkg -target /

正しくインストールされたかを確認

$ which aws
/usr/local/bin/aws
$ aws --version
aws-cli/2.0.10 Python/3.7.4 Darwin/19.3.0 botocore/2.0.0dev14

コマンド補完(aws_completer)を設定

aws_completerの場所を確認

$ which aws_completer
/usr/local/bin/aws_completer

zshのプロファイルスクリプト(~/.zshrc)の末尾に以下を設定

$ vi ~/.zshrc
====
export PATH=/usr/local/bin:$PATH
autoload -Uz compinit
compinit
autoload bashcompinit && bashcompinit
complete -C '/usr/local/bin/aws_completer' aws
====

コマンド補完ことを確認

(コマンドの一部を入力し、Tab を押して保管されるかを確認する。)

$ aws s<Tab>
====
s3                     sdb                    sesv2                  sso
s3api                  secretsmanager         shield                 sso-oidc
s3control              securityhub            signer                 stepfunctions
sagemaker              serverlessrepo         sms                    storagegateway
sagemaker-a2i-runtime  service-quotas         snowball               sts
sagemaker-runtime      servicecatalog         sns                    support
savingsplans           servicediscovery       sqs                    swf
schemas                ses                    ssm                    synthetics
===

参考サイト

macOS での AWS CLI バージョン 2 のインストール https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/install-cliv2-mac.html

コマンド補完 https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-configure-completion.html

[アップデート] リソース名の補完など強力な機能追加!AWS CLI v2 が GA されました! https://dev.classmethod.jp/articles/aws-cli-v2-is-now-generally-available/