投稿

ラベル(AWS)が付いた投稿を表示しています

【セッションメモ】AWS Summit 2022 - Design for Resilience - 如何にしてクラウドアプリケーションの耐久力を高めるか

まえおき 先週開催されたAWS Summitのセッションの中で「Design for Resilience - 如何にしてクラウドアプリケーションの耐久力を高めるか」というセッションがとてもよかった&勉強になった。AWS要素は少なくどのクラウドサービスを利用しても適用できるSREの基礎的な内容で、新人やクラウドをこれから始める人はぜひ1回は聞いてほしい内容だった。 6月30日までセッションの動画アーカイブが公開されるらしく、復習しながらメモを書いてみた。 アーカイブを見たい場合は AWS Summit Japnanページ からログインして、 Design for Resilience - 如何にしてクラウドアプリケーションの耐久力を高めるか(SP-04) というセッションを検索すると出ると思う。 資料も早く公開になったらいいな。 レジリエンスとは 言葉の定義 「抵抗力」、「回復力」、「弾力性」 最近では「困難な状況にも関わらず、しなやかに適応する能力」と言われる 情報システムにおけるレジリエンス 定常的に発生しうる部分的な障害に対する適応力 → HA(High Availability) MTBF(平均故障間隔)・MTTR(平均復旧時間) めったに発生しない広範囲の障害に対する回復力 → DR(Disaster Recovery) RTO(目標復旧時点)・RPO(目標復旧時間) 両方の目的は「アップタイムを長く、ダウンタイムを短く、データ損失は最小限にする」 レジリエンスの重要性 我々の日常生活・ビジネスはシステムに大きく依存している メール、生産、物流、ネットの買い物、銀行のATM... 今後システム依存度はどんどん強くなり、代替手段を戻すことも簡単ではない 障害とは システムが正常な稼働状態を維持できなくなること 障害の原因 → コントロールが効きにくい(すべての原因・変化を事前に想定して取り除くことは難しい) コードや設定、データや状態、コアインフラ、災害シナリオ 障害の影響 → コントロールが効きやすい(...

CDKでインフラとコードを 一緒にデプロイしてみよう(CDKでLambdaをデプロイしてみた)

イメージ
まえおき  今週の水曜日に開催された JAWS-UG 初心者支部の勉強会(#44) に参加した。今回はAWS Builders Online Series recap2 ということで AWS Builders Online SeriesのTrack2 開発者向けAWS入門に関する内容の勉強会だった。私は「CDKでLambdaをデプロイしてみた」をタイトルでLT発表をした。せっかくなので(ブログのアクセスを増やすためにも(笑))ここにもブログ版としても書いてみる。 当時発表した発表版はこちら。 サービス紹介  デプロイをする前に、今回使うサービスの紹介を簡単にする。 AWS CDKとは   AWS Cloud Development Kit(AWS クラウド開発キット) と呼ばれ、慣れたプログラミング言語でAWSリソースを定義できるフレームワークである。プログラミング言語が利用できるので、プログラミング言語の知識と表現力を使用できるのが特徴で、例えばCloudFormationでは利用が難しいif文(条件関数があるけど、複雑に作るのは難しい)やfor文を利用できる。また、言語もCDKライブラリについてもエディターの補完が聞いたり、AWSのベストプラクティスがデフォルト値として入っているため、コード記述量が少なくなるというメリットもある。ただし、CDKコードがそのままAWS環境にデプロイされるわけではなく、CloudFormationのテンプレートに変換されて、AWS環境にデプロイされる仕組みとなっている。 AWS CDK紹介ページより( https://aws.amazon.com/jp/cdk/ ) AWS Lambdaとは   AWS Lambda はサーバーレスでプログラムを実行できるAWSのサービスで、サーバーレスの名前通りにサーバーがないので、インフラ周りのプロビジョニングや管理が不要である。また、リクエスト数に応じて自動スケールしたり、様々なAWSサービスと連携が便利という特徴を持っている。課金もリクエスト数&実行時間という利用した分だけ払えばいい構造となっている。   AWS Lambda紹介ページより( https://aws.amazon.com/jp/lambda/ ) 写真をS3バケットに入れるとLambdaがトリガー...

7か月遅れたSecurity Jamに参加した感想

イメージ
まえおき  2021年のAWS Summit OnlineでSecurity Jamに参加したので、紹介と感想を書いてみる。実はブログは途中まで書いたものの放置してしまい、今はあんまり思い出せないけど、頑張って思い出してみる。 Security Jamの紹介  まず、AWS Jamとはユースケースや運用関連のタスクを一連のシナリオで参加者(チーム)に提供し、提供されるAWS環境から課題の解決に取り組むイベントである。いくつかの課題とAWS環境が与えられ、課題を解決すると得点が入り、制限された時間内にどれくらい大きい点数を得るかを競うイベント。その中、Security JamはSecurity系のユースケースに特化した課題が出るJamとなる。  AWSの学習にはいろいろコンテンツがあるけど、やはり実際に触ってみたり、トラブルシューティングしてみないとわからないものが多い。個人のAWS環境で軽く触ってみることはできるが、トラブルシューティングまでは難しい。そういう面でAWS Jamはゲーム形式で様々な課題(トラブル)解決に取り組むことができ、楽しくAWSの学習とスキル検証ができるので、ぜひ参加をおすすめするイベントである。 Security Jamで楽しんでいただきたいこと(Security Jamの紹介スライドより) 今回のJam 申し込み AWS Summit Onlineが開催される何日前くらいに、Summitの次の日にAWS Security Jamを開催するとの案内が、AWS Japan Blogに上がってきた。 AWS Security Jam開催のご案内 AWS Security Jamの歩き方 申し込みはAWS Summitがある5月11(火)、12日(水)にできるということだったが、何時に開放されるかが書いてなかった…(アクセス集中防止のため?)。また先着100名までとのことで、Twitterでは1時間おきでチェックしまくるとかの話もあり、私もライブチケットを予約するくらいの覚悟(?)を決めてSummitの当日を迎えた。 実際には思ったよりは余裕があって、11日の8時から申し込み開始が始まり、12時過ぎに締め切ったようで、私も無事申し込むことができた。 イベント準備 当日のスケジュール 当日のスケジュールはこんな感...

CDKのスタックにタグをつけるときは除外リソースの設定(excludeResourceTypes)に注意する

まえおき 久々のブログ投稿!最近はエンジニア関係ない業務が多く、ネタがあんまりない…。 久しぶりにCDKでリクエストがあって対応したけど、確認せず大丈夫だろうーと思ったら、大丈夫ではなかったので書いてみる。   やりたかったこと 全体のスタックにAというタグをつける タグの付け方はこちらの ドキュメント を参照 ただし、特定のAWSリソースについてはAタグではなくBタグをつけたい   やったこと 一番上のスタックについて、Bタグをつけるリソース以外にAタグを設定する Tags.of(MyStack).add('A', 'AA', exclude_resource_types=['AWS::Xxx::Zzz']) Bタグをつけるリソースに直接Bタグをつける Tags.of(MyResource).add('B','BB')   デプロイ結果 BタグのみをつけるリソースにAタグもBタグもついてしまう   理由と回避策  タグのPriority調整もしてみたが、結局解決できずサポートに問い合わせへ…。理由としては スタック にタグを付与するとデプロイ時にCloudformationがすべてのリソースにタグを付与してしまうらしい( exclude_resource_types が適用されない)。また、githubのレポジトリでも議論が行われていること( https://github.com/aws/aws-cdk/issues/16742 )。  スタック以下のレベルでタグを設定したり、逆に include_resource_types を設定する、Bタグをつけるリソースだけスタックを分離ことで回避できるらしい。前の2つはCDKで生成するリソースが多くあるので、別途分離もスタック構成のアーキテクチャを考慮しないといけないので、難しい…。  結局対応としては、これからCDK変更がほぼないこと、Bタグの適用は期間限定で必要なことから、コンソールから手でAタグを削除することになった。   まとめ  CDKでタグを扱うときはスタックレベルの動作に気を付ける必要があることがわかっ...

AWS CDKで生成されるCloudformationリソースの一部を削除したいとき

発生した課題  AWS CDKのL2 ConstructのSubnet( ドキュメント )を利用してSubnetを生成している。ConstructはCloudformationの AWS::EC2::Subnet , AWS::EC2::RouteTable , AWS::EC2::SubnetRouteTableAssociation を生成する。SubnetとRouteTableを生成し、その二つのアタッチまでやってくれる。 しかし、今の環境ではRouteTableを別途生成されたものを利用する必要があり、生成されたRouteTableを手で削除してテンプレートを修正しようとすると、RouteTableがないとエラーになり、修正ができなくなってしまった…。   解決策  すぐ思いつく方法としては、L1 ConstructのCfnSubnetで生成する方法である。ただ、今回はL2 Subnetのipv4CidrBlockを別のリソースで利用していて、広い範囲でコードを修正しないといけなかった。 (なんで、 AWS::EC2::Subnet はgetAttでipv4CidrBlockをゲットできないのか…ipv6はできるのに…?)  他の方法はないかと検索してみたら、githubのAWS CDKに同じ問題のissueがあり、そこで方法を探すことができた( https://github.com/aws/aws-cdk/issues/4308 )。 subnetA.node.tryRemoveChild('RouteTableAssociation') subnetA.node.tryRemoveChild('RouteTable')  上記のコードを追加し、再度デプロイを試したら、無事Subnetのみをデプロイすることができた。   コメント  AWS CDKのL2 Constructは、今回のRouteTableとAssociationやIAMの権限など普段使うことには便利ではある。しかし、実際の業務ではいろんな制約があるので、それをCDKに取り入れようとするとややこしくなる場合が多い。今回の場合も、無理やり削除している感があったり、最初にこのことに気づいたらL1 Constructを利用していただろう。L1 Co...

CloudFormationのスタック(Stack)を更新しても、更新されないリソース

まえおき  CloudFormationを使っているとスタック(Stack)の更新をすることがある。今までCloudFormation内をリソースを更新したときに、更新されなくて戸惑った3つの場合について書いてみる。   1. LambdaのコードをS3に保存した場合  当たり前かもしれないけど、その更新は最新のCloudFormationのテンプレートと旧テンプレートの差分より更新される。つまり、「 テンプレートに変更がないとスタック内のリソースに更新は発生しない 」ということだ。 AWS::Lambda::Function の Code 属性の記載方法には2つがある。テンプレート内に直接記載する方法とS3にファイルをアップロードし、そのバケット名とパスを記載する方法だ( 関連ドキュメント )。ここで更新時に問題になるのはS3にLambdaファイルを更新する場合だ。S3のファイルを更新しても、CloudFormationテンプレート内のコードは変わることなく、S3ファイルの変化の検知もしないので、Lambdaが更新されない。私は以下の2つの方法で更新した。   方法1 S3パスを更新する  シンプルな方法である。 AWS::Lambda::Function の Code 属性を変更すれば、テンプレートに変更点が発生するのでLambdaを更新するkとおができる。私は日付ごとにフォルダを作成、更新するLambdaをおきテンプレートを修正するようにしていた。しかし、当時はCI/CD環境ではなかったので、テストでLambdaに修正点があれば、都度S3にファイルをアップロードして日付を修正&デプロイまたはテンプレートをロールバック&デプロイする必要があった。ミスも多く発生していた。そこで、CI/CD環境を整えることと同時に方法2の方法を利用することにした。   方法2 SAMを利用する(おすすめ)  SAM(Serverless Application Package) を利用する方法だ。SAMテンプレートを書いて、コマンドを実行すると以下が実行される。 Lambdaファイルはランダム文字列のファイル名でS3にアップロードされる テンプレートをCloudFormationテンプレートに変換して、S3にアップロードし...

AWS DevOps Engineer - Professional 受験メモ

まえおき  最近、AWS DevOps Engineer - Professionalを取った。今年の面談でDevOps Engineer資格自体は今年取ります&なので研修行きたいですと話したので、2つの研修(DevOps Engineering on AWS、Advanced Developing on AWS)を受けて、受験する予定ではあった。いつ受けるか考えていた中、たまたまサンプル問題を解いてみたら「割といけるんじゃない?」と根拠なき自信にあふれて2週間後のテストセンターを予約。そして、運よく合格したので、3年後の更新に備えてメモ。(最近投稿が少なかったのもあるし)   筆者のスペック 入社4年目、AWS経歴は2年くらい 業務でAWSを使っている AWS関連作業の自動化業務をやっており、最近はStepFuncions、Cloudformation、Codepipelineを浅く触っている Solution ArchitectのProfessionalを持っている Advanced Developing on AWS を受講済   「AWS DevOps Engineer - Professional」について 試験ガイド を参考にすると、6つの分野から出題されるらしい。 分野 1: SDLC(Software Development Life Cycle)の自動化 22% 分野 2: 構成管理およびInfrastructure as Code 19% 分野 3: 監視およびロギング 15% 分野 4: ポリシーと標準の自動化 10% 分野 5: インシデントおよびイベントへの対応 18% 分野 6: 高可用性、フォールトトレランス、およびディザスタリカバリ 16%  もう受験して2か月くらい経つので内容はほぼ覚えてない(...)。  覚えている範囲で書くと、まずはCI/CD系の内容。CodeシリーズとElastic Beanstalkのサービスと絡めて,上記の内容を聞く問題が出るような感じ。例えば、「ブルー/グリーン構成をElastic Beanstalkで構成したけど、問題が発生。どう直せばいいか」や「こういう構成で開発からデプロイまで自動化したい。どうすればよいか(選択肢にはCodeシリー...

CloudFormationテンプレート内のStep functionsのState machine定義をS3に置けるようになった

イメージ
まえおき 今週あったチーム先輩(Aさん)との会話 私 :CloudFormationテンプレートにStepfunctionsを書こうとするとyamlにベタ書きしかできないんですよ。    これが私がCDKを押す理由の一つなんですよ。 Aさん:LambdaみたいにS3バケットに定義ファイルを置いてそのパスをyamlに書けばいいじゃん。 私 :あれ?私が調べたときはそれができなかったので、今あるテンプレートはすべてベタ書きにしているんですが…。 Aさん:うん?これでできないんだけ?(CloudFormationのドキュメントURLを共有) 私 :できるじゃん!?  送られてきた CloudFormationドキュメント を見ると、 DefinitionS3Location というプロパティがあった。おかしいな…調べたときは本当になかったんだようなーと思いずつ更新履歴を見ると、2020年5月20日更新。私が調べたのは1月ごろだったから、その時はなかったということだ。うーん、What's Newはほぼ毎日見るけど、使っているサービスのドキュメント更新履歴も頻繁にチェックしないといけないのかな…。とりあえず、試してみることにした。   DefinitionS3Locationを試してみる Step Functionsのテンプレートを準備  State Machineの定義はAWSドキュメントの Getting Started with Step Functions にあるコードから最後のstateを少し変えた簡単な以下のコードを利用する。 DefinitionSubstitutions も使ってみたかったので。 DefinitionSubstitutions はテンプレート内で同時に作成されるリソースをState Machine内で利用する場合に使う。例えば、Lambdaを作成して、それをState machineに入れるとか。(LambdaのARNが必要になる)    jsonファイルで保存し、S3のバケットに保存する。  これでStep Functions側の準備は終わり。   CloudFormationテンプレートを準備   CloudFormationの StepFunctions::StateMachi...

Developers.IO 2020のAWS CDK関連セッションを聞きました

イメージ
まえおき AWS CDKが使いたいです…。 私は今までCLI&手作業でやってきたAWS関連業務をWebページのボタン1つでできるように簡略する業務を担当しています。何もないアカウントに環境を構築する業務が多いため、必然的にCloudFormationを多く使うようになります。CLIやGUI手作業で作成するよりは便利ですが、テンプレートを書いてると、「もうちょっといい方法ないかな…」と思う時がありました。例えば… yamlの書き方があまり慣れない 配列や連想配列などなど サービスによって(例えば、API Gateway)書かないといけないものが多い SAMを使えば一部解決はできますが…。 使いまわしができない(For文など) 例えば、名前は違うが設定が同じリソースを全部テンプレート書かないといけない ミスの確認が難しい vscodeやpycharmでcfn-lintを利用すればいいものですが、チームのデフォルトエディタはcloud9なんですよね… Lambdaの場合は、事前にS3にアップロードするか、テンプレート内に記載しないといけない S3の場合はzipしてS3にアップロードするPipelineを作ればできそうではありますが、テンプレート記載はメンテ辛いですよね…。 StepFunctionの場合は、コード(Amazon State Language)テンプレート内に記載しないといけない これはS3にアップロードもできなく困ってました。あと、書き方にもちょっと苦労してましたね。 DefinitionS3Locationという属性がアップデートされてS3から定義ファイルを読んでくることが可能になりました。 といったことですね。 そう思っている...

CloudWatch EventsはAmazon EventBridgeになるらしい

イメージ
まえおき  最近久々にCloudWatch Events(以下、Events)の画面を開いたら、以下のようなメッセージが出ていた。 グーグル翻訳先生に翻訳をお願いすると CloudWatch Events is now Amazon EventBridge Amazon EventBridge (formerly CloudWatch Events) provides all functionality from CloudWatch Events and also launched new features such as Custom event buses, 3rd party event sources and Schema registry to better support our customers in the space of event-driven architecture and applications. CloudWatch EventsがAmazon EventBridgeになりました Amazon EventBridge(以前のCloudWatch Events)は、CloudWatch Eventsのすべての機能を提供し、カスタムイベントバス、サードパーティイベントソース、スキーマレジストリなどの新機能も起動して、イベント駆動型のアーキテクチャとアプリケーションの領域でお客様をより適切にサポートします。 らしい。Amazon EventBridge(以下、EventBridge)がEventsの代わりになるということだった。いつから出たんだろう…。最近、画面のUIが変わりましたのメッセージが常にほぼどのサービスでも同じ感じで出ていたから全然気つかなかった…。今までは、EventBridgeというEventsと似ているサービスがあるということは知っていたけど、Eventsの機能で十分だったので特に気にしてなかった。調べてみると、ちょうど1年前に発表されたサービスだった。( Amazon EventBridge – SaaS アプリケーション用のイベント駆動型での AWS の統合 )   Cloudwatch EventsとAmazon EventBridgeの違い  全く同じサービスであるというと若...

PythonのDict型をDynamoDB形式のJsonに変換する

pythonでDynamoDB関連操作をするとき、難しい点の一つは一つは以下のようなDynamoDBの独特なJSON形式だと思います。 { "id": { "N": 12345 }, "name": { "S": "TanakaTaro" } } Python用のAWS SDKであるBoto3にはDynamoDB形式のJsonをPythonのDictに変換できる TypeSerializer と TypeDeserializer があります。 https://boto3.amazonaws.com/v1/documentation/api/latest/_modules/boto3/dynamodb/types.html TypeSerializer PythonのDictをDynamoDB形式のJsonに変換します。個人的には変換結果で最初の{"M": ...}はなくしてほしいですが… TypeDeserializer DynamoDB形式のJsonをPythonのDictに変換します。こちらも一気に変換はできず、各Keyごとに変換が必要です。 まとめ&蛇足 TypeSerializerとTypeDeserializerはDynamoDBのデータをpythonで処理したいときや処理後にまたDynamoDBにアップロードしたいときに有効に利用できそうです。 ただ、そのまま利用するよりは、利用しやすくカスタム関数やクラスを作成したほうがよさそうです。 JavaScriptのSDKにもConverterというものがあるようです https://aws.amazon.com/jp/blogs/developer/announcing-the-amazon-dynamodb-document-client-in-the-aws-sdk-for-javascript/

StepFunctionのTimeoutSecondsについて

イメージ
StepFunctionsの state machineのテンプレートにはTimeoutSecondsという設定を設定できます。 https://docs.aws.amazon.com/ja_jp/step-functions/latest/dg/sfn-stuck-execution.html ここでは、StatesのTaskでTimeoutSecondsを指定していますが、States外でもTimeoutSecondsを指定できることがわかりました。ただ、自分が想定した動作とちょっと違ったです。   最初に想定していた動作 Statesの外でTimeoutSecondsを指定している場合は、各TaskのDefaultのTimeoutSeconds設定で動作する なので、TaskにTimeoutSecondsが書かれてなくでも指定された時間にタイムアウトが起きる 両方書かれている場合は、Task内の時間が優先される   実際の動作 動作確認コート 以下のようなStepFuncionsのState machine定義があるとします。 { "Comment": "A Hello World example of the Amazon States Language using Pass states", "StartAt": "Invoke_Lambda1", "TimeoutSeconds": 100, "States": { "Invoke_Lambda1": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "Parameters": { "FunctionName": "arn:aws:lambda:us-east-1:XXXXXXXXXXXX:function:myTestFunction:$LATEST",...

AWS Certified Machine Learning – Specialty 受験記

当時のスペック AWS関連 入社3年目で、AWS関連業務をやってました。 触ったサービスとしてはCLI, Cloudformation, Organization, CloudWatchなどです。 Solution architect - professionalを持ってました   機械学習(Machine learning)関連 業務で触ることはありません 社内講座で基礎講座を受講しました One-hot encodingなどの簡単な用語には「聞いたことある!」くらいになりました 個人的にも触りたいと思っていますが、なかなか…   「AWS Certified Machine Learning – Specialty」について 試験ガイド を参考にすると、4つの分野に分かれています 機械学習の流れで分野が分かれている気がします データ収集(分野1) → 前処理&分析(分野2) → モデル選び(分野3)と全般的なアーキテクチャ(分野4)   試験の内容 分野1:データエンジニアリング 1.1 機械学習のデータリポジトリの作成。 1.2 データ収集ソリューションの特定と実装。 1.3 データ変換ソリューションの特定と実装。 生データの収集、変換(加工)、保管についての内容です 機械学習の知識よりは、AWSアーキテクチャのにおいが強いです なので、関連サービスの特徴を覚えておくことが大事です 例えば、Kinesis DatastreamとFirehoseの違い、どういう場合にとれか適合しているか また、生データを収集 → 変換 → 保管の流れの設計例をしっておく必要があります。   分野2:探索的データ解析 2.1 モデリングのためのデータのサニタイズと準備。 2.2 特徴エンジニアリングの実施。 2.3 機械学習用データの分析と視覚化。 保管されたデータを分析し、パターンをみつけることについての内容です サニタイズ(データの欠損値処理、ノイズ除去)が出てくるので、機械学習の知識が必要になってきます 手法の種類、特徴、処理方法 保管(S3とか)から視覚化(QuickSightなど)までの設計例を覚えておく必要があります   分野 3: モデリング 3.1 ビジネス上の課題を機械学...

AWS 認定 Solution architect - Professional受験後のメモ

まえおき このポストはQiitaに書いた AWS 認定 Solution architect - Professional受験後のメモ を移したものです。   受験当時 当時のスペック 入社2年目で、AWS関連業務を半分、それ以外の業務を半分やっています。 AWSを触って1年くらいでした。 ただ、主にCloudFormation、CodeCommit、Lambda,DynamoDB,SNSあたりで、ArchitectというよりDeveloperに近いサービスを触っていました。 ELB、DirectConnectなどはどういうサービスか理解しているくらいでした。 Organizationsはそこそこ触っていました。 Solution architect - Associateを取得して、6か月前に取得しました。 一応、応用情報技術者試験(AP)も持っていました。   勉強方法 Advanced Architecting on AWSの受講(3日間) Professionalの試験内容に沿って、講義を進めてくれます。 業務では触たことないサービスを触ることができ、すごく役に立ちました。 グループディスカッションもとてもよかったです。 私が受けた回はAWS触って1年未満の方が多かったのが印象的でした。   模擬試験を受験 Associateの合格の時にもらったバウチャーを利用しました。 問題の傾向は把握できましたが、やはり不安だったのでUdemyで過去問を解きました。 ちなみに、結果は40%で不合格でした…   Udemyの過去問をし解く セールを狙い過去問を購入しました(1800円~2500円くらいだったと思います) aws-solutions-architect-professional-practice-exams-2018 もちろん英語なので、Google翻訳様の力をお借りしました。 間違った問題は解説を読み、Advanced Architectingの研修時のメモをもう一回確認しました。 間違いが多い分野は該当サービスのBlackBeltを読み、Youtubeで公開されているセミナーを見ました。 クラウド活用事例集 BlackBeltのYoutuebのプレイリスト   qw...