AWS¶
CDK ドキュメント・ハンズオン¶
1 |
|
- AWS Toolkit for Visual Studio Code https://aws.amazon.com/jp/visualstudiocode/
- AWS CDK, AWS SAM
- https://aws.amazon.com/jp/serverless/patterns/pattern-design-examples/
- RDS proxy
- 請求アラート, Slack通知: AWS知識本参照 https://dev.classmethod.jp/articles/notify-slack-aws-billing/
- LambdaからログをS3に吐き出す(追記し続ける)
- https://aws.amazon.com/jp/aws-jp-introduction/aws-jp-webinar-hands-on/
- https://pages.awscloud.com/JAPAN-event-OE-Hands-on-for-Beginners-1st-Step-2022-confirmation_849.html
- https://aws.amazon.com/jp/aws-jp-introduction/aws-jp-webinar-level-100/
- https://pages.awscloud.com/JAPAN-event-OE-Hands-on-for-Beginners-Serverless-1-2022-reg-event.html?trk=aws_introduction_page
- https://pages.awscloud.com/JAPAN-event-OE-Hands-on-for-Beginners-Serverless-3-2022-reg-event.html?trk=aws_introduction_page
CDK アップデート¶
1 2 3 |
|
CDK コマンド init
¶
1 |
|
CDK コマンド diff
: ローカルとデプロイの比較¶
1 |
|
CDK コマンド deploy
: スタックをデフォルトのアカウント・リージョンにデプロイ¶
CDK コマンド ls
: アプリ内のスタックを全て表示¶
CDK コマンド docs
: CDKドキュメントを開く¶
CDK コマンド synth
: CloudFormation
テンプレート出力¶
1 |
|
CDK バケットの削除¶
1 2 3 4 5 |
|
CLI Session Managerでのポートフォワーディング, リモートホストへの接続¶
CLI S3 バケット作成¶
- 東京リージョンは
ap-northeast-1
1 2 3 4 |
|
CLI アクセスキー取得¶
- 参考: CloudShellを使うとローカルの設定なしでAWS CLIが使えるので必要に応じて使い分けよう
- IAMユーザーのアクセスキーの管理
- アクセスキーとシークレットキーをCSVで取得, メモ
- 次のコマンド実行
1 2 3 4 |
|
- 上記設定は
~/.aws/config
に次のように記録される
1 2 3 |
|
~/.aws/credentials
にaws_access_key_id
とaws_secret_access_key
が記録される
CLI アカウント確認¶
- 下記のどちらかを実行する
1 2 |
|
~/.aws/cli/alias
にwhoami
として登録しておくとよい.
1 2 |
|
CLI アカウント切り替え¶
1 2 |
|
CLI アカウント登録¶
- 事前に
AWS
にアクセスしてIAM
からアクセスキー・シークレットアクセスキーのCSVをダウンロードしておくこと~/.aws
にでも置いておくとよい
- 特に希望がない場合のリージョンとフォーマット
- リージョン:
ap-northeast-1
- フォーマット:
json
- リージョン:
1 2 |
|
Cloud9 GitHub連携¶
- 参考
- 次のコマンドでSSH鍵を作成
1 2 3 |
|
- GitHubに公開鍵を登録
- リポジトリ作成
- git pullしてコミット・プッシュ
- push/pullについて詳しくは都度ググる
Cloud9 VSCodeでのSSH設定¶
VSCode参照.
Cloud9 コンソールでサービスを立ち上げたあとにブラウザで確認¶
- 参考
- Preview (プレビュー) > Preview Running Application (実行中のアプリケーションのプレビュー)
- エディタに出てきたタブの右上, 四角の中に右上矢印があるボタンをクリック
- ブラウザの別タブで画面が開く
CloudFormation ドリフトの検出と解決¶
- 実体とスタックの乖離をドリフトと呼ぶ
- インポートで実体をスタックに取り込める
Copilot 公式ドキュメント¶
Copilot アカウント選択¶
copilot env init
を実行するとそのapp
に紐づけるアカウント(profile)が設定できる
Copilot アカウント内に作成されたApplication
の一覧を確認したい¶
copilot app ls
- 現在のアカウント・リージョン内にある全ての
Application
を確認
Copilot Application
に含まれる対象を確認したい¶
copilot app show
Application
内のService
やEnvironment
を含んだサマリ情報を表示
Copilot app init --domain
のための事前設定¶
- URL
Route 53
コンソールからホストゾーンを新たに作る- 4つの
NS
レコードをAWSコンソールからコピー - 適切なレジストラのページに移動して4つのカスタムネームサーバーを張りつける
- お名前.comでは次の通り: 参考
- トップメニュー「ドメイン設定」を選ぶ
- 左メニュー「ネームサーバーの設定 > ネームサーバーの変更」を選ぶ.
- 適切なドメインを選択してチェックを入れる
- 「他のネームサーバーを利用」タブを選ぶ.
- AWSコンソールで表示されたネームサーバー情報を入力する.
Copilot Environment
の作成¶
copilot env init
Copilot Environment
のデプロイ¶
- 必要に応じて手動で
copilot/environments/[env name]/manifest.yml
を修正する copilot env deploy
Copilot healthcheck
¶
1 2 3 4 5 6 7 8 |
|
Copilot init
中にターミナルが死んで再作成・削除できなくなったとき¶
- 別のアプリを作ってみる.
- 作ったときに出てくるメッセージをもとに
AWS
コンソールからサービスを確認する. - 作ったアプリに対するモノが何かできているはずで, それを直接削除する.
- 例えば
CloudFormation
のスタックができているはずだから, それを削除する.
- 例えば
Copilot pipeline
によるマイグレーション¶
Copilot Load Balanced Web Service
のプロパティのリスト¶
- どこにあるかすぐ忘れるため記録
- manifestにある
Copilot Load Balanced
job
でデータベースをマイグレーションしたい¶
AWS
コンソールでSecrets Manager
にアクセスする- 対応する
RDS
用のシークレットの名前を控える job
のyml
のsecrets
に次のように設定するsecretsmanager
の値は控えた値を書く
1 2 3 |
|
Copilot Request Driven
job
でデータベースをマイグレーションしたい¶
copilot svc show
でデータベース接続用情報を持つSECRET ARN
の値を確認する.copilot job init
で適切に設定するyml
を編集するschedule
をnone
にする- シークレット変数を追加する.
1 2 3 |
|
copilot job deploy
するcopilot job run
のあとCloudWatch
のログを確認する
C#
の参考プログラム¶
1 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
|
1 2 3 4 5 6 7 8 9 10 11 12 |
|
Copilot Request Driven
2023-02-10時点でのエラー¶
- チュートリアルの
init
で次のエラーが出る
1 2 |
|
Copilot svc
デプロイ¶
- 新しい
Environment
を作った時点でデプロイされたService
はない. - デプロイしたい
Service
のディレクトリからcopilot deploy
コマンドを実行する. - どの
Environment
にデプロイしたいのか尋ねられる
Copilot svc
サービスに含まれる対象を確認したい¶
copilot svc show
Copilot svc
起動中のサービス確認, copilot svc status
¶
- URL
copilot svc status
Copilot copilot svc exec
¶
- URL
Fargate
のdocker exec
対応- 2023-03時点では
Load Balanced
では使えるがApp Runner
では使えない
Copilot CloudFormation
テンプレートの出力¶
1 |
|
Copilot pipeline
¶
1 2 |
|
Copilot storage
environment
ごとにアクセス設定を変える¶
- Question: What is a proper setting for rds serverless v2 public access for a copilot storage generated database #4643
- Writing the Outputs section
1 2 3 4 5 6 7 8 9 10 11 12 |
|
Copilot 環境変数やSecrets
が反映されない¶
- 2023-05-24,
C#
のASP.NET
を使っていたときの話. Dockerfile
とmanifest.yml
の両方でASPNETCORE_ENVIRONMENT
を指定していたら, 正しく環境変数に反映されていなかった.Dockerfile
からENV
指定を削除して対応した.
Copilot 秘密の変数の指定¶
- 2022-12-20 AWS Copilot with AWS CDK
- 適切な
yaml
ファイルにsecrets
を指定する - 下記のように書く
PostgreSQLConfig__Host
は自由にしてよく, この値がコンテナに環境変数として指定されるAuroraSecret-ABC3G7c8bvFyP-C5JIGE
はcopilot svc show
のSecrets
に表示される値から取れるhost::
にあたる部分はAWS
コンソールなどでデータベースのシークレット変数として指定されている変数名を取ればよい
1 2 3 4 5 6 7 |
|
Copilot セキュリティグループを調べる¶
AWS
のコンソールにアクセスするVPC
にアクセスする- ダッシュボードから「セキュリティ グループ」を選ぶ
- 設定されたセキュリティ グループの一覧が表示されている
Copilot サービスに設定された環境変数の値を確認する¶
copilot svc show
のSecrets
で確認できる
Copilot サービスのコンテナへのコマンド実行¶
1 |
|
Copilot サービスの停止・再開¶
1 2 3 |
|
Copilot ジョブ実行¶
1 2 |
|
Copilot データベース接続: App Runner
¶
- 参考
- 公式: AWS Copilot による AWS App Runner の VPC 接続
- メモ: AWS Copilot CLI を使って複数環境で既存の DynamoDB を使う
- IAMテンプレートの話が書いてある
- Secrets Manager Access
- 特にここに
IAM
の書き方が書いてある. Resource
にはcopilot svc show
で出てくるsecret arn
の値を入れればよい(?)
- 特にここに
- メモ: AWS Copilot CLI を使って複数環境で既存の DynamoDB を使う
app
に対するmanifest.yml
に次の内容を設定する
1 2 3 |
|
copilot storage init
を実行するcopilot svc show
でデータベース接続用のSECRET ARN
の値を確認する- 確認した値をもとに
copilot/svc/addons
に次のような内容でiam-secrets-manager-policy.yml
を追加する
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
|
- 環境変数
APRDJANGOWEBCLUSTER_SECRET_ARN
をもとにデータベース情報を取得するように設定する
データベース取得方法¶
JavaScript
¶
- 環境変数名は適切に設定すること
1 2 3 4 5 6 |
|
Python
¶
- 環境変数名は適切に設定すること
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
|
C#
¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
1 2 3 4 5 6 7 8 9 |
|
Copilot データベース接続: Load Balanced
¶
- 参考
copilot svc show
でSecrets
を調べる- データベース用の値を控える: 例えば
MYDJANGODB_SECRET
などデータベース用に設定した値_SECRET
のような値になっているはず- これが環境変数に指定されているため使っている言語に合わせて環境変数を取得する
- 環境変数は
JSON
形式の文字列だからJSON
で解釈して接続文字列や接続情報を指定するJSON
の形式はAWS
コンソールのSecrets Manager
で確認できる
Django
での書き方は次の通り- ローカル開発やチェック用のログ出力も入れてある
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
|
Copilot データベース接続: マイグレーションなどでジョブからつなぐ¶
- 参考
- 基本的なデータベースまでのサービス構築は他の項目を参照すること.
- ジョブからデータベースにつなぐにはセキュリティ設定を追加する
- 以下の記述でファイル名・項目名は構築したサービスごとに適切に設定すること
- 特に
svc/addons/db.yml
のDBClusterSecurityGroup
に次のように追記する
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
Copilot メタデータ¶
- URL
System Manager Parameter Store
に保存される/copilot/applications/${app_name}
に保存
Copilot リソース作成¶
- URL
addons
の形でCloudFormation
テンプレートを使えばCopilot
と連携できる
ECR MacでError saving credentials: error storing credentials - err: exit status 1, out:
Post "http://ipc/registry/credstore-updated": dial unix backend.sock: connect: no such file or directory``¶
- URL
Mac
からECR
で認証トークンを取得し、レジストリに対して Docker クライアントを認証します
のプッシュをしようとしたらタイトルのエラーが出た~/.docker/config.json
のcredsStore
がdesktop
だったのをosxkeychain
にしたら通った
IAM AdministratorAccess権限を与えたい¶
- 「アクセス権限の追加」をクリック
- 「既存のポリシーを直接アタッチ」をクリック
- 「ポリシー名」を選ぶ
IAM MFA設定 機種変更時にMFA端末を変更¶
- 1アカウントに1デバイスしかMFA端末を設定できない
- 参考: 変更手順
- 機種変更など端末を変える場合は, 先にデバイスの変更手続きを取らないと認証が通らなくなるため十分に注意する.
IAM ユーザー作成¶
- 「AWSアカウントでのIAMユーザーの作成」
IAM ルートアカウントへのMFAを複数人に展開¶
- ルートアカウントのMFAを複数設定できるようになったため, 実際に複数人に設定してもらい, 適切な権限を持つ人にルートアカウントを触れるようにしたい.
- MFA設定
- IAMの画面にアクセスしてから画面右の「クイックリンク > 自分の認証情報」リンクから画面遷移する.
- その画面でQRコード読み取りして設定できる.
- 対処1: リアルで複数名が集まれる
- このときは既にルートアカウントにアクセスできる人が実際にIAM画面にアクセスし, MFA設定のQRコード読み取り部分をその人の画面から設定して試せばよい.
- 対処2: リモートで対応したい.
- ルートアカウントの情報は適切な形で共有してあり, 複数名がMFA以外の情報にはアクセスできるとする.
- MFA認証のところまでログインを進める.
- MFA認証できる人にネット上で依頼してMFAコードを送ってもらう.
- ログインしてもらったあと, その人が対応しやすいMFA設定をしてもらう.
IAM ロールのリスト取得¶
1 |
|
MFA デバイス解除¶
- 自身で解除手続き可能: ▼MFA デバイスが故障または紛失した場合のセルフサービスによるリセットの方法
- 上記方法で解除できない場合は下記の専用フォームで該当アカウント管理者から申請する
- https://aws.amazon.com/forms/aws-mfa-support
- ※「I'm still having problems and would like to contact AWS support.」をクリックして入力フォームを表示する
SAM APIをローカルでホストする¶
1 |
|
SAM Create pipeline¶
1 |
|
SAM initランタイム指定¶
1 |
|
SAM エラーが出たとき¶
- SAMはCloudFormationの拡張
- SAMのビルドでエラーが出たときCloudFormationのログも確認しよう
SAM 公式リポジトリの実装例¶
SAM コンテナを使ってビルド¶
1 |
|
SAM 資料集¶
Secrets Manager 値を取る¶
- 実際にコンソールでアクセスすると, 下の方にサンプルコードがある.
- これを参考にすればよい.
アクティブなリソースの確認¶
請求額アラート設定¶
- IAMルートユーザーでログイン
- IAM設定画面でユーザ名をクリック
- 表示されるメニューから「請求ダッシュボード」をクリック
- 画面左側のメニュー一覧にある「請求設定」をクリック
- 「コスト管理設定」の中にある「無料利用枠の使用のアラートの受信」にチェック
- その下のEメールアドレス欄に送信先のメールアドレスを指定
- 「請求アラートを受け取る」にチェック
請求額アラート設定: 一定の請求額を超えそうな場合にメールを受信する方法¶
- AWSマネジメントコンソールを開く
- CloudWatchを開く
- 「バージニア北部」リージョン(us-east-1)を選択
- 画面左側のメニュー一覧にある「アラーム」の中の「請求」をクリック
- 初期設定と追加設定の二通りある
- 初期設定の場合
- この表の下部中央にある「アラームの作成」ボタンをクリック
- 表の右上にある「アラームの作成」ボタンではない
- 「メトリクスと条件の指定」画面でアラーム設定
- この表の下部中央にある「アラームの作成」ボタンをクリック
- 追加設定の場合
- 「アラームの作成」ボタンをクリック
- 「メトリクスの選択」ウインドウを開く
- 「請求(Billing)」をクリック
- 「概算合計請求金額」をクリック
- 通過が「USD」, メトリクス名が「EstimatedCharges」の項目にチェック
- 「メトリクスの選択」をクリック
- 初期設定の場合
- 画面を下にスクロールし「条件」の欄を表示
- 「しきい値の種類」で「静的」を選択
- 「「EstimatedCargesが次の時…」」で「より大きい>しきい値)」を選択
- 「…よりも」ではメールを送信してもらうための基準額をUSドルで入力
- 入力が完了したら「次へ」ボタンをクリック
- 以下のアクションの設定画面の「通知」欄で「このアラーム状態が以下のとき…」は「アラーム状態」を選択
- 「SNSトピックの選択」のラジオボタンは「新しいトピックの作成」を選択
- 「新規トピックの作成中…」の「トピック名」はデフォルトのまま
- 「通知を受け取るEメールエンドポイント…」にアラートメールの送信先を入力
- 「トピックの作成」ボタンをクリック
- メールアドレスが「Eメール(エンドポイント))」に表示されていることを確認
- 「次へ」ボタンをクリック
- 「説明の追加」画面の名前と説明で「一意の名前を定義」欄にアラーム名を入力
- 必要に応じて「アラームの説明」のテキストエリアに説明文を入力
- 「次へ」ボタンをクリック
- プレビューと作成画面が表示される
- ここまでの入力内容に問題がないことを確認
- 「アラームの作成」ボタンをクリック
- アラートメールの送信先として指定したメールアドレスの受信ボックスを確認
- AWSから届いたメールに記載された認証リンク「Confirm subscription」をクリック
- 設定完了
- リージョンを戻す