AWS SageMaker GroundTruthのIP制御
SageMaker GroundTruthを使ってラベリングするときに、ワーカーのアクセス範囲を限定したいことがある。 IPの範囲でアクセス制限したいときには、awscliを使って、workforceに対してCIDRを指定することでIP制御することが可能
aws sagemaker update-workforce --workforce-name default --source-ip-config '{"Cidrs":["xxx.xxx.xxx.xxx/yy"]}' --region ap-northeast-1
参考URL
AWS CodeCommitにコードをpushする
やること
CodeCommitに認証と通しておく
以下のURLを参考のこと kohira-1980.hatenablog.com
Code Commit上でリポジトリを作成する
例: ssh://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/hoge_repo
注意: .ssh/configファイルにてURLのエイリアスを指定している場合は、上記のURLのホスト名をエイリアスに変更すること
リポジトリ管理対象になるコードをpushする
- pushするアプリケーションのトップディレクトリで以下のコマンドを実行する
- git初期化
- 対象コードののadd/commit
- remote repository の登録
- コードのpush
rm -rf .git git init git add . git commit -m "first commit" git remote add origin <コピーしたgitのURL(.ssh/configにてエイリアスを使用している場合はそのURLに変更)> git push -u origin master
これで連携されます。
AWS CodeCommitで認証通す時にやること
やること
ローカルPCで公開鍵、秘密鍵を作る
cd ~/.ssh ssh-keygen -t rsa -f id_rsa_hoge
id_rsa_hoge
とid_rsa_hoge.pub
の2つのファイルが作成される。
AWSコンソールで、IAMユーザーに公開鍵を紐づける
- AWSコンソールにアクセスし、IAMのコンソールを立ち上げる。認証するIAMユーザーのページに移動する。
"認証情報"タブを押下し、”AWS CodeCommit の SSH キー”コンテンツから、”SSHパブリックキーのアップロード”を押下。上記で作成した
id_rsa_hoge.pub
公開鍵ファイルの中の文字列をコピペする。登録後、”AWS CodeCommit の SSH キー”コンテンツ表に現れるSSHキーIDが生成されます。これをコピーします。
ローカルPCの.ssh/configの設定
- ~/.ssh/configを編集します。ファイルがない場合は作成し、編集します。
- 以下のように設定を追加します。
Host hoge.git-codecommit.ap-northeast-1.amazonaws.com HostName git-codecommit.ap-northeast-1.amazonaws.com User {SSH key ID} IdentityFile ~/.ssh/id_rsa_hoge
Host
はエイリアス、HostName
は真のhost名を指定します。{SSH key ID}
には上記で保存したSSHキーIDを記載します。IdentityFile
には秘密鍵のパスを記載します。
接続確認
以下のコマンドを打ち、SSH接続できたら、設定完了。
ssh hoge.git-codecommit.ap-northeast-1.amazonaws.com
出力
You have successfully authenticated over SSH. You can use Git to interact with AWS CodeCommit. Interactive shells are not supported.Connection to git-codecommit.ap-northeast-1.amazonaws.com closed by remote host. Connection to git-codecommit.ap-northeast-1.amazonaws.com closed.
参考URL
PythonでS3上のにある2つのファイルを結合する
Pythonを使って、S3上にある2つのファイルを結合して出力する。目的としては、ヘッダーのないcsvファイルにヘッダーをつける。 pandasを使って読み込むと余計なオーバーヘッドがあるので、StringIOでメモリ上に乗せてくっつけるだけにする。
サンプルコードは以下の通り
import boto3 import io # define args src_bucket = "src_bucket" src_prefixKey_header = "hoge/hoge_header.csv" src_prefixKey_data = "hoge/hoge_data.csv" dest_bucket = "dest_bucket" dest_prefixKey = "hoge/hoge_out.csv" SRC_FILE_ENCODING="utf-8" s3 = boto3.resource('s3') #ヘッダファイルの読み込み src_obj_header = s3.Object( src_bucket, src_prefixKey_header ) body_in_header = src_obj_header.get()['Body'].read().decode( SRC_FILE_ENCODING ) buffer_in_header = io.StringIO(body_in_header) #データファイルの読み込み src_obj_data = s3.Object( src_bucket, src_prefixKey_data ) body_in_data = src_obj_data.get()['Body'].read().decode( SRC_FILE_ENCODING ) buffer_in_data = io.StringIO(body_in_data) # ヘッダとデータの結合 outputs = list() outputs.append(buffer_in_header) outputs.append(buffer_in_data) buffer_out=io.StringIO() buffer_out.write(''.join([i.getvalue() for i in outputs])) body_out=buffer_out.getvalue() #ファイル配置 dest_obj = s3.Object( dest_bucket, dest_prefixKey ) dest_obj.put(Body = body_out)
参考URL
S3バケット上のCSVファイルをバッファに読み出してpandasで編集する | DevelopersIO
concatenation - python how to concat stringio objects? - Stack Overflow
jetson nanoにgreengrass v2をインストールしてみた
マニュアルに書いてあるのをやってみた。
前提条件
- jetson nanoにsshできる
- jetson nanoの容量は16GBだときついので、せめて32GBにする。私は64GBのSDカードで実行。
java jdkを入れる
Greengrassにはjavaランタイムが必要なので、入れる。jetson nano上で実行
sudo apt install default-jdk
jdkのバージョン確認
$ java -version openjdk version "11.0.11" 2021-04-20 OpenJDK Runtime Environment (build 11.0.11+9-Ubuntu-0ubuntu2.18.04) OpenJDK 64-Bit Server VM (build 11.0.11+9-Ubuntu-0ubuntu2.18.04, mixed mode)
AWS Greengrass Coreをインストール
curlでGreengrass Coreのモジュールをダウンロードする。ダウンロードにはcurlを使うので、curlがインストールされていない場合は、sudo apt install curl
を実行する。
cd ~ curl -s https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-nucleus-latest.zip > greengrass-nucleus-latest.zip
解凍する。
unzip greengrass-nucleus-latest.zip -d jetson_nano_ggc && rm greengrass-nucleus-latest.zip
認証情報
AWSのIAMユーザーに割り当てられたアクセスキーIDとシークレットアクセスキーをexportする
export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
Greengrass Coreのインストール
マニュアルそのまま実行
sudo -E java -Droot="/greengrass/v2" -Dlog.store=FILE \ -jar ./jetson_nano_ggc/lib/Greengrass.jar \ --aws-region ap-northeast-1 \ --thing-name jetson_nano_ggc \ --thing-group-name jetson_nano_ggc_group \ --tes-role-name GreengrassV2TokenExchangeRole \ --tes-role-alias-name GreengrassCoreTokenExchangeRoleAlias \ --component-default-user ggc_user:ggc_group \ --provision true \ --setup-system-service true \ --deploy-dev-tools true
コンソールで確認
AWS コンソール画面からgreengrassの画面にいき、greengrassのコアデバイスが登録されていることを確認
コマンドラインからthingsを確認
$aws greengrassv2 list-effective-deployments --core-device-thing-name jetson_nano_ggc
出力はこのようになる。
{ "effectiveDeployments": [ { "deploymentId": "165qdadhgsh6htsthsdfsdhfsfdsh4654hoge", "deploymentName": "Deployment for jetson_nano_ggc_group", "iotJobId": "kdajsfopijw-jpoieawj-feajo-fweao-lkpo78755", "iotJobArn": "arn:aws:iot:ap-northeast-1:000000000001:job/", "targetArn": "arn:aws:iot:ap-northeast-1:000000000001:thinggroup/jetson_nano_ggc_group", "coreDeviceExecutionStatus": "SUCCEEDED", "reason": "SUCCESSFUL", "creationTimestamp": 1623025275.335, "modifiedTimestamp": 1623025275.335 } ] }
これでインストールは完了。次にレシピなどつくる。
Glue Crawlerを使う時の注意点
csvをGlue Crawlerでクロールして、データカタログを作成するとき注意点の csvファイル側の制約(と思われるもの)
csvファイルの制約
- 大文字列名は小文字列名に変換される
- 日本語列名に対応している
- UTF-8のみ扱える。
- ヘッダーの自動読み取りでデータの行が全てStringの場合はヘッダーを認識できない。 docs.aws.amazon.com
ヘッダー行は、データ行と十分に異なっている必要があります。これを判断するには、1 つ以上の行が STRING 型以外として解析されることを確認します。すべての列が STRING 型である場合、最初のデータ行は以降の行と十分に異なっていないため、ヘッダーとして使用できません。
あるある
- 別のCrawler作成時に新規作成したIAMロールを使い回す("既存のIAMロールを選択")と、失敗する。IAMロール作成時にS3パスの制約が入っていることが原因。"IAMロールのポリシーの更新"を選択して、S3の読み取りアクセス許可を追加するか、別途IAMロールを作成する必要がある。
csvファイルにダブルクオートが入っている場合の対処法
- 上記方法に対して対応後、カラムの型をstring型にする必要がある。しないとエラーとなる。 https://aws.amazon.com/jp/premiumsupport/knowledge-center/athena-hive-bad-data-error-csv/
cdk bootstrap実行時の Unable to resolve AWS account to use エラー
CDKの勉強のため、こちらのワークショップを実施中
エラー
cdk bootstrap
実行時に以下のエラーが発生
Unable to resolve AWS account to use. It must be either configured when you define your CDK or through the environment
ネットで検索したところ、.aws/configのdefaultプロファイルを消せとか出てきて、やってみたけど、うまくいかなかった。
原因
~/.aws/config
にて、credential_process
を使ってsts assumeを取得していたことが原因のようだった。
解決方法
AWS_ACCESS_KEY_ID
,AWS_SECRET_ACCESS_KEY
,AWS_SECRET_ACCESS_KEY
を直にexportして再度実行したところ、うまくいった。
aws sts assume-role --role-arn "arn:aws:iam::123456789012:role/example-role" --role-session-name AWSCLI-Session
role-arnとrole-session-nameを指定して、実行するとACCESS_KEY_IDなどが取得できるので、それらをexportする
export AWS_ACCESS_KEY_ID=ASIAXXXXXXXXXXXX export AWS_SECRET_ACCESS_KEY=yyyyyyyyyyyyyyyyyyyyyy export AWS_SESSION_TOKEN=zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz(長い)
これでcdk bootstrap
実行したところ、エラー解消。