AWS Batchをさわってみた
はじめに
AWS Batchのイメージを掴むために動くところを確認してみました。
Docker Hubからpythonのイメージを取得して コマンド[python --version]を実行しました。
イメージ図
手順
コンピューティング環境を作成する。
1) AWS Batchのコンソールを開く。
2) 左ペインから[コンピューティング環境]を選択して、[作成]をクリックする。
3) [コンピューティング環境設定]を設定する。
- コンピューティング環境のタイプ : マネージド型
- コンピューティング環境の名前 : test-batch-env
- サービスロール : Create new role
- インスタンスロール : Create new role
4) [インスタンスの設定]を設定する。
プロビジョニングモデル で オンデマンド を選択する。 それ以外はデフォルトのままにする。
5) [ネットワーキング],[EC2 タグ],[タグ]はデフォルトのままにする。
6) 下部にある[コンピューティング環境を作成]をクリックする。
7) コンピューティング環境に[test-batch-env]が追加されていることを確認する。
ジョブキューを作成する。
1) 左ペインから[コンピューティング環境]を選択して、[作成]をクリックする。
2) [ジョブキューの設定] で [ジョブキュー名] を [test-batch-queue]に設定する。
3) [接続されたコンピューティング環境]で[test-batch-env]を選択する。
4) 下部にある[作成]をクリックする。
5) ジョブキューに[test-batch-queue]が追加されたことを確認する。
ジョブ定義を作成する。
1) 左ペインから[ジョブ定義]を選択して、[作成]をクリックする。
2) [ジョブ定義]で以下を設定する。
- 名前 : test-batch-def
- Retry Strategies > ジョブの試行 : 1
- 実行タイムアウト : 120
- コンテナプロパティ > イメージ : python
- コンテナプロパティ > コマンドの構文 : Bash
- コンテナプロパティ > コマンド : python --version
- vCPU : 2
- メモリ : 2000
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
4) 下部にある[送信]をクリックする。
5) ジョブに[test-batch]が追加されてステータスが [RUNNABLE] であることを確認する。
ジョブの結果を確認する。
1) ジョブ[test-batch]のステータスが [SUCCEEDED]であることを確認する。
2) ジョブ[test-batch]をクリックする。
3) コンテナにあるログストリーム名をクリックする。
4) [CloudWatch Logs] の 出力から Pythonのバージョンが出力されていることを確認する。
さいごに
今回は、AWS Batchを実行してみました。
今回はpythonのバージョンを確認しただけですが 工夫しだいで色々な使い方ができそうです。
参考サイト
■AWS Batchを使って5分以上かかる処理を実行してみる https://dev.classmethod.jp/articles/aws-batch-5min-over/
プライベートサブネットのEC2インスタンスにログインできるようにする。
はじめに
プライベートサブネットに存在するEC2に接続するため VPCエンドポイント経由でSystems ManagerのSession Managerでログインしてみました。
イメージ図
前提条件
今回は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]を付与したロールを作成します。
EC2にIAMロールを追加する。
先ほど作成したロールをEC2に付与します。
VPCエンドポイントに付与するセキュリティグループを作成する。
VPCエンドポイントに付与するセキュリティーグループを作成しておきます。
このときインバンドとしてEC2からのHTTPS通信を許可しておきます。
サービス[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
結果確認
Systems Managerのマネージドインスタンスに、作成したEC2が存在すれば設定成功です。
※表示されていない場合はEC2の再起動を実施してみてください。
Session Managerでログインしてみる。
EC2インスタンスを選んでアクションから[Start Session]をクリックすれば、EC2にアクセスできます。
参考サイト
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
ターゲット
SNSトピックを選んでインプットトランスフォーマーは以下を設定しました。
■入力パス
{ "region": "$.region", "instance-id": "$.detail.instance-id" }
■入力テンプレート
"■お知らせ" "リージョン<region>のインスタンス<instance-id>が起動しました。"
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] を選ぶ
- [詳細]のセクションではデフォルトのまま
- [AWS SSO メタデータ] のセクションでは [AWS SSO SAML メタデータファイル]のファイルをダウンロードする
- アプリケーションのプロパティ のセクションはデフォルトのまま
- アプリケーションメタデータ のセクションはデフォルトのまま
- 変更の保存を実行
IAMでSAML プロバイダーを作成する
- IAM コンソールを開く
- ID プロバイダー をクリックしてプロバイダの作成をクリックする
- プロバイダーのタイプをSAMLを選ぶ
- プロバイダ名は任意の値(ここでは SSOtoQuickSight とする)
- メタデータドキュメントは 先ほどダウンロードした メタデータファイルをアップロードする
- [次のステップ]をクリックする
- [プロバイダー情報の検証]の画面で[作成]をクリックする
フェデレーティッドユーザーのポリシーを作成する
- ポリシー作成の画面を開く
- 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 マネジメントコンソールによるアクセスを許可する] を選ぶ
- [次のステップ] をクリックする
- [Attach アクセス権限ポリシー] で 先ほどのポリシー(SSOtoQuickSightPolitcy) を選ぶ
- [次のステップ] をクリックする
- [タグの追加 (オプション)]では特に設定せずに[次のステップ] をクリックする
- ロールにも名前をつけて[ロールの作成]をクリックする(ここでは SSOtoQuickSightRole とする)
SSOのコンソールに戻って属性を追加する
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
- [変更の保存]をクリックする
結果確認
- SSO のコンソールからアプリケーションQuickSightを選ぶ
- [割り当て済みユーザー]タブをクリックする
- [ユーザーの割り当て]をクリックして割り当てる
- 割り当てたユーザーのSSOのユーザーポータルに移動する
- [Amazon QuickSight]をクリックする
- [QuickSightへようこそ]のページが表示さればOK
参考サイト
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を使えるようにするための手順)
作業環境
注意: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)
参考サイト
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 をインストールしてみた
はじめに
macOSにAWS CLI バージョン2を入れて、コマンド自動補完までできるようにしてみた。
作業環境
手順
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/