Tag: Aws-Cli

ECRのパブリックレポジトリをCLIから作成する

2021/09/10 時点だと --region us-east-1 が必要だった。でないと

Could not connect to the endpoint URL: "https://api.ecr-public.ap-northeast-1.amazonaws.com/"

というエラーがでる。AWS 管理コンソール上は東京リージョンで存在を確認できる。

作成

AWS 管理コンソールでの作り方は パブリックリポジトリの作成

aws ecr-public create-repository --repository-name hogehoge --region us-east-1
削除
aws ecr-public delete-repository --repository-name hogehoge --region us-east-1
push までの流れ
  1. push する前にログインする( public とはいえ push にはログインが必要
  2. ビルドする
  3. タグづけをする
  4. push
aws ecr-public get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin public.ecr.aws/hoge
docker build -t test-20210910-1 .
docker tag test-20210910-1:latest public.ecr.aws/hoge/test-20210910-1:latest
docker push public.ecr.aws/hoge/test-20210910-1:latest

push の手順は各リポジトリにある。

Read more...

AWS CLIのチートシート

CloudWatch logs を CLIで調査( fish )

クエリ投げる

set queryId (aws logs start-query --log-group-name NginxAccessLog \
                                   --start-time (date +%s --date "1 week ago") \
                                   --end-time (date +%s) \
                                   --query-string 'fields @timestamp, @message | filter @message NOT LIKE /ua:ELB-HealthChecker/ | sort @timestamp desc | limit 20'\
                                 | jq -r '.queryId' )

ステータス確認

aws logs describe-queries | jq '.queries[] | select(.queryId=="$queryId")'

取得

aws logs get-query-results --query-id $queryId  | jq '.results[][] | select(.field == "@message") | .value'

ポリシー作成 https://qiita.com/maimai-swap/items/895b79229f6769aa4a41

aws iam create-policy --policy-name ポリシー名 --profile プロファイル --policy-document file://developerpolicy.json --description "this is ...."

CLIのアップデート

pip install awscli

Read more...

ECS Fargate を CLIで操作

ECSのサービス設定、つくる作業が煩雑なので、CLIで自動化できないか検討。

aws ecs create-service --cluster example-dev-20181030-1 \
  --service-name env36\
  --task-definition env36\
  --desired-count 1\
   --launch-type FARGATE\
  --deployment-configuration maximumPercent=200,minimumHealthyPercent=100\
   --network-configuration "awsvpcConfiguration={subnets=[subnet-0123456789abcdef0,subnet-0123456789abcdef1,subnet-0123456789abcdef2],securityGroups=[sg-0123456789abcdef0],assignPublicIp=DISABLED}"\
   --deployment-controller type=ECS

aws cliのecsのcreate-serviceのオプションは多いのでCLIで作るのを想定してる感じある。

Read more...

AWS ECR へCLIでイメージをアップする

dockerコンテナをECR repository( 以下、ECR )にアップする

まず、Web UIにログインした後、上部メニューの[ サービス ]->[ Elastic Container Registry ]->[ リポジトリ ]->[ リポジトリの作成 ] からリポジトリを作成する。

リポジトリ名

『リポジトリ名は英字で始まる必要があり、小文字、数字、ハイフン、アンダースコア、スラッシュのみを含めることができます。』というルールがある。 スラッシュがつけられるので、組織名をつけた。Githubのレポジトリ名は大文字を許容するが、ECRは許容しないので小文字に変更する。

example/Hoge_Web -> example/hoge_web

AWS CLIがインストールされていなければインストールして、アカウント設定する

ECRへのアクセス設定をする

( これはリポジトリ作成時に説明が表示されます。一度、空のリポジトリを作成すると流れがより良く分かるかもしれません )

ECRにログインする

aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com

上記コマンドはそのまま実行できる形なので、出力を別途実行する必要はありません。

Dockerイメージをビルドする

カレントディレクトリにあるDockerfileを用いてイメージ作成。Dockerfileにある場所に移動してから docker buildする。

docker build -t example/hoge_api .

イメージにタグを付ける

docker tag example/hoge_api:latest 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/example/hoge_api:latest

Dockerレポジトリを作成

aws ecr create-repository --region us-east-1 --repository-name hoge

実行例。 これは2017/12に出たばかりの fargateモードで検証するため、バージニア北部リージョンにレポジトリを作成している

Read more...

aws-cliが参照する環境変数

環境変数

AWS CLI の設定変数

CLIの初期設定について 認証情報とコマンド補完 TASK NOTES

||対象||設定ファイル変数||環境変数||オプション ||アクセスキーID||aws_access_key_id|| AWS_ACCESS_KEY_ID|| - ||シークレットアクセスキー||aws_secret_access_key|| AWS_SECRET_ACCESS_KEY|| - ||リージョン||region||AWS_DEFAULT_REGION||–region ||出力||output||AWS_DEFAULT_OUTPUT||–output ||プロファイル||profile|| AWS_DEFAULT_PROFILE|| –profile ||設定ファイル||-|| AWS_CONFIG_FILE|| - ||トークン||aws_session_token||AWS_SESSION_TOKEN||-

変数が参照される順序

  1. 環境変数
  2. AWS認証情報 ~/.aws/credentials
  3. CLI構成ファイル ~/.aws/config
  4. インスタンスプロファイルの認証情報

でも『環境変数を参照するプログラム』は沢山ある

という悩みを解決しそうな

AWSを操作(AWS CLIに限らない)する場合の環境変数設定作業を軽くする

Read more...

AWS KMSで鍵を保存、取得する

AWS KMS を awscli から利用してみる

http://qiita.com/kanagi/items/2008aa9f43be26bd2746

classmethod AWS Key Management Serviceでキーの”管理”と”利用”を分離する

http://dev.classmethod.jp/cloud/aws/kms-admin-user/

AWS Key Management Service(KMS)の利用方法

2016/12/13 mackerelの監視のON/OFFに使用した

KMSのざっくりとした理解としては 「 暗号化、復号化の悩みとして『鍵を使って暗号化するのは技術的に可能』だが『鍵の保管場所』に困る」という点を解決するサービス、 という理解。

AWS KMSでの暗号化/復号化の手順はclassmethodのココが分かりやすい。

一度、aws-cliで復号化まで行う(15分程度)とよく分かる。 また暗号化されたciphertextはコードに埋め込んで使用する

下記にmackarelでの暗号化、復号化の方法ですが

[ IAM ]->[ 暗号化キー(Encryption Keys) ]->[ フィルター: ]で[ アジアパシフィック(東京) ]をクリック [ MackarelAPI ]をクリックし、[ ARN ]の値をメモする。 ( 2016/12/13時点の mackarelのマスターキーは[ arn:aws:kms:ap-northeast-1:123456789012:key/12345678-1234-1234-1234-1234567890ab ]だった )

ココの方法に従い、 aws-cliで上記のarnを指定して環境変数KEYIDにarnを指定する

export KEYID=arn:aws:kms:ap-northeast-1:123456789012:key/12345678-1234-1234-1234-1234567890ab

暗号化

aws kms encrypt --key-id $KEYID --plaintext 'mackarelのAPIキー'

下記の内容が出力される

{
  "KeyId": "arn:aws:kms:ap-northeast-1:123456789012:key/12345678-1234-1234-1234-1234567890ab",
  "CiphertextBlob": "himitu"
}

CiphertextBlobをコード側で利用する。 node.jsでのコードは下記が参考になる。

Read more...

Route53

新しいドメインの設定

どこかでドメインを取る

Route53 の設定は https://qiita.com/Yuki_BB3/items/effdf1bb38263bfef82a を参考にした

CLI でいろいろ

ゾーン ID の取得

ZONENAME="example.net."  # 最後に「.」ドットをつけるの重要... 30minほど悩んだ...
aws route53 list-hosted-zones | jq -r ".HostedZones[] | select(.Name == \"${ZONENAME}\") | .Id"     # bashの変数を読むためにダブルコーテーションをクオートする

参考 上の list-hosted-zones の内容

aws route53 list-hosted-zones
Read more...