Open9

AWS メモ

きくぴぃきくぴぃ

はじめに

  • 業務でAWS色々触り始めたので、個人的な備忘録を残します
  • ネットワーク関連はよわよわ
  • 箇条書き、かなり適当にまとめてます
きくぴぃきくぴぃ

AWS CLI

Version

- v1とv2がある

  • 古いバージョンだと対応していない操作などがある

インストール

https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/getting-started-install.html

設定ファイル

  • userフォルダに.aws フォルダが作成される
    • .aws
      • credentials:資格情報
      • config:設定ファイル

https://docs.aws.amazon.com/ja_jp/cli/v1/userguide/cli-configure-files.html

credentials

  • アクセスキーなどの情報をまとめたファイル
  • profileとして異なる資格情報をまとめることができる
    • 下記default, user1
[default]
aws_access_key_id=ASIAIOSFODNN7EXAMPLE
aws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
aws_session_token = IQoJb3JpZ2luX2IQoJb3JpZ2luX2IQoJb3JpZ2luX2IQoJb3JpZ2luX2IQoJb3JpZVERYLONGSTRINGEXAMPLE

[user1]
aws_access_key_id=ASIAI44QH8DHBEXAMPLE
aws_secret_access_key=je7MtGbClwBF/2Zp9Utk/h3yCo8nvbEXAMPLEKEY
aws_session_token = fcZib3JpZ2luX2IQoJb3JpZ2luX2IQoJb3JpZ2luX2IQoJb3JpZ2luX2IQoJb3JpZVERYLONGSTRINGEXAMPLE

config

  • 設定ファイル
  • リージョン、出力ファイルの指定などができる
  • profileごとに設定できる
[default]
region=us-west-2
output=json

[profile user1]
region=us-east-1
output=text

コマンド

  • 設定をcli経由で確認、更新などができる
# 設定
aws configure

# 設定値取得
aws configure get region --profile integ

# 設定値更新
aws configure set region us-west-2 --profile integ

# 一覧表示
aws configure list

トラブルシューティング

SignatureDoesNotMatch

AWS CLIでSignatureDoesNotMatchになった

  • 特殊記号がないシークレットアクセスキーを再生成することで解決するっぽい

Unable to locate credentials

  • .credentialsに指定されたプロファイルの情報がないのが原因

403エラー

  • gitconfigの設定ミス

AccessDenied

  • 権限がないエラー。
  • IAMロールとかユーザーを変更することで対応可能
きくぴぃきくぴぃ

ECS

概要

  • ECS:コンテナ管理サービス
  • Fargate:サーバーレスコンテナ実行環境

EC2とFargate

  • EC2:インスタンス柔軟設定可能
  • Fargate:インスタンス管理不要
    • 若干割高

リソース

  • クラスター:サービスを内包する
  • サービス:タスクを管理する
  • タスク:アプリの実行単位。コンテナを内包する
    • タスク定義ファイルに記載する
  • コンテナ:Dockerfileなどで定義される仮想環境

サービス

  • タスク数の指定、維持など
  • ELBとの連携

タスク定義

  • タスク構成のテンプレート
    • コンテナの定義
      • 環境変数
  • jsonで変更可能
    • docker-composeのようなもの

タスク更新

  • タスク更新する場合、再デプロイする必要がある
  1. タスク更新
  2. サービスの更新
  3. デプロイ
  • デプロイする際、適用されているタスクを利用し、イメージURIのみ更新されてサービスに適用される
    • タスク更新するだけでは、デプロイ時に適用されない

デプロイタイプ

  • ローリングアップデート:1つのコンテナを徐々にアップデートする
    • 低コスト、シンプル
  • Blue/Green:コンテナを2つ用意して、アップデート中に片方のコンテナを使用して切り替える
    • ロールバックも簡単にできる
    • 高コスト

ECSのローリングアップデートとブルー/グリーンデプロイを比較してみた | DevelopersIO

コンテナ接続

[アップデート] 実行中のコンテナに乗り込んでコマンドを実行できる「ECS Exec」が公開されました | DevelopersIO

ECSで立てたコンテナに入る

  1. ECSサービスでFargate 1.4.0を利用
  2. ECSサービス/構成トラブルシューティング/ECS Execをオンにする を有効化
  3. ECSタスクロールにSSM用の権限を追加する
    Amazon ECS タスクの IAM ロール - Amazon Elastic Container Service
    	{
       "Version": "2012-10-17",
       "Statement": [
           {
           "Effect": "Allow",
           "Action": [
                "ssmmessages:CreateControlChannel",
                "ssmmessages:CreateDataChannel",
                "ssmmessages:OpenControlChannel",
                "ssmmessages:OpenDataChannel"
           ],
          "Resource": "*"
          }
       ]
    }
    
  4. Session Manager をインストール
  5. クライアント端末でコマンド実行
aws ecs execute-command \
--cluster example-clustr \
--task XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX \
--container example-container \
--interactive \
--command "/bin/sh"
  • cluster: クラスター名
  • task: タスクARN
  • container: コンテナ名
きくぴぃきくぴぃ

ECR

  • イメージリポジトリ

プッシュ

ライフサイクルポリシールール

  • イメージを自動的に整理してくれる機能

    • 使わないとイメージ溜まってコストがかかっちゃう
  • ECR/リポジトリ/ライフサイクルポリシー

    • コンソール画面で、リポジトリ選択後にサイドバーに表示される

フィルタリング

  • タグでフィルタリングすることができる
    • ワイルドカード指定、プレフィックス指定
    • タグの有無

一致条件

  • 上限イメージ数指定:指定数以上になったら、自動的に古いバージョンのイメージを削除する
  • 経過日指定:指定した経過日を過ぎたら、自動的にイメージを削除する
きくぴぃきくぴぃ

CodePipeline

  • ビルドとかデプロイを自動的にやってくれる機能
  • パイプライン自体はアクションせず、サービス間の連携などをする感じ

リソース

  • パイプライン > ステージ > アクショングループ > アクション
    • パイプライン:まとまり
    • ステージ:1動作のまとまり
      • ビルド、デプロイなど
    • アクショングループ:ステージ内の順番を指定する
    • アクション:アクショングループ内で複数アクションを並列処理することができる

アーティファクト

  • パイプライン間のステージ同士のデータをやりとりを行うために出力されるファイル
    • ソースステージの情報、ビルド時のECRImageURIなど
  • ログファイルを出力したりすることもできる
  • S3に出力される

変数

  • 後続ステージへの値の受け渡しが可能
  • 参照する場合、パイプラインの環境変数プロパティに指定する必要がある
  • buildspec.ymlで指定することで後続に渡すことができる
env:
  exported-variables:
    - variable

自動再試行

  • ステージの処理失敗時に再実行してくれる機能
  • ステージ自動ロールバック:デプロイ時にロールバックする機能

トラブルシューティング

Packed policy too large

  • デプロイ開始時に発生
  • デプロイアプリケーション名が長すぎるのが原因

The provided role does not have sufficient permissions to access ECS

  • デプロイ時にECSへの権限が付与されていないのが原因

  • どの権限か具体的に把握するために、CloudTrailのイベント履歴からCodePipeline周りのイベントを見る

  • エラーが出やすいのが、ECSデプロイ時のタスクロールとタスク実行ロールの付与権限

Amazon ECS タスクの IAM ロール

きくぴぃきくぴぃ

CodeCommit

  • サービス終了しているソース管理サービス
  • 正直使いづらい

コンソール操作

かなり制約あるので、基本的にgit経由で使用するべき

  • コミットできるけど、1ファイルずつしかできない
  • 毎度メアド、ユーザー名入力する必要がある
  • 6MB以上のファイルをコミットできない

セットアップ

git config --global credential.helper '!aws codecommit credential-helper $@'
git config --global credential.UseHttpPath true
[credential]    
    helper = !aws --profile CodeCommitProfile codecommit credential-helper $@
    UseHttpPath = true
きくぴぃきくぴぃ

CodeBuild

  • アプリのビルドとかテストができる

buildspec.yml

  • linuxコマンドをbuildspec.ymlに指定して実行する

CodeBuild のビルド仕様に関するリファレンス

環境変数

ビルド環境の環境変数

トラブルシューティング

429 Too Many Requests

キャッシュ

  • S3:ストレージが必要、ダウンロード時間などがかかる
  • ローカル:ビルドホストが異なる場合に意味がない?
    • VPCを使う場合は使えない

AWS CodeBuild でローカルキャッシュを使用する場合の注意点

Dockerレイヤーキャッシュ

docker buildを高速化!CodeBuildのローカルキャッシュ機能を試してみる

テスト

テストレポート

  • xmlファイルを検出して、テストレポートをグラフ化してくれる機能

自動テストがより便利に!!CodeBuildのテストレポート機能がGAされました!!

きくぴぃきくぴぃ

CodeDeploy

  • ローリングアップデートの場合、CodeDeployを使用せず、ECSのデプロイ機能を利用してデプロイする
    • Blue/Greenの場合にCodeDeployを使用する
きくぴぃきくぴぃ

EventBridge

概要

  • 各サービスのイベントを検知して、処理実行トリガーとすることができるサービス。
    • リモートリポジトリにプッシュされたら実行、ビルド成功後にメール送信などができる

ルール

イベントバス

  • イベントルーター?
  • イベントソースからターゲットへの送受信を行う
  • デフォルトで1つ用意されている

イベントパターン

  • イベントパターンを指定して検知をする

Amazon EventBridge のイベントパターン

{
  "source": ["aws.ec2"],
  "detail-type": ["EC2 Instance State-change Notification"],
  "detail": {
    "state": ["terminated"]
  }
}

入力トランスフォーマー

  • 「ターゲットを選択」から「入力トランスフォーマーを設定」

  • 入力パス:ターゲットへ送信で利用するための、key-valueペアを定義できる

  • テンプレート:ターゲット送信用の内容を設定できる

Amazon EventBridge 入力変換

入力パス

{
    "account-id":"$.detail.userIdentity.accountId",
}

テンプレート

"アカウントID: <account-id>"

サンプル

  • 以下からいろいろ確認できる

CodeBuild のユースケースベースのサンプル

CodeBuild

CodeBuild のビルド通知サンプル