Category: Amazon Web Services

botocore.exceptions.ReadTimeoutError: Read timeout on endpoint URL

どうも自宅のネットワークの調子がおかしい・・ aws s3 cpでサイズ5GB越えのファイルをアップロードしようとするのだが、 表題のエラーでcpが失敗する。 –debugオプション付きで実行しても処理がabortしていることはわかるが、なぜabortなのかはわからない。 そこで、エラーメッセージは”Read timeout”と言っているのだから、 素直にAWS CLIのオプションで”–cli-read-timeout 0″(socket readをタイムアウトしない)にしたらアップロードできた。 aws s3 cp s3:/// –cli-read-timeout 0

AWS認定ソリューションアーキテクト試験対策を含む、『AWS認定アソシエイト3資格対策』という本を書きました

AWS Summit Tokyo 2019の期間中、 『AWS認定アソシエイト3資格対策~ソリューションアーキテクト、デベロッパー、SysOpsアドミニストレーター~』 という本が刊行されます。 AWSプレミアムコンサルティングパートナーの某大手企業のトップエンジニアの方々と共同で執筆し、 元AWSのSAの平山さん、元AWSのエヴァンジェリストの堀内さん、私の上司の福垣内さんに監修していただきました。 一冊の紙の本で「Solution Architect」「Developer」「SysOps Administrator」試験を 網羅した本はAmazon.comでもみつけられませんでしたので、 (たぶん)世界ではじめての試みなのではないかと思います。 執筆することになった経緯 今回の本の出版社さんは、 AWS認定試験が2018年にリニューアルされるまで AWS認定試験対策本としてド定番だった 『合格対策 AWS認定ソリューションアーキテクト -アソシエイト』 のリックテレコムさんです。 (この本、AWSの基本的な概念やベストプラクティスの考え方は変わりませんので、今でも良い本だと思っています) リックテレコムさんから平山さんに本の執筆の打診があり、 平山さんから堀内さん、鳥谷部さん、福垣内さんにお誘いがあり、 箱崎の某所で行われた企画会議に私も同席させてもらった、というのがきっかけです。 なぜ、3資格対策なのか? 実は、企画会議でリックテレコムさんから依頼があったのは、 「AWSのSysOpsアドミニストレーター試験の対策本を書いてもらえないか?」 というものでした。 実際、平山さんの方でもSysOpsアドミニストレーター対策書を前提に、章立てのたたき台を作成されており、 役割分担の相談などしていたのですが、最終的には 「やっぱり、アソシエイトレベルの3試験を網羅した本を書きません?」 となりました。 なぜそういう話の流れになったかは正直忘れてしまったのですが()、 ポイントとしては SysOpsアドミン試験「だけ」の対策書だと、マーケットに需要があるか、執筆陣も正直自信がない 需要としては「AWS認定ソリューションアーキテクト – Associate(Feb, 2018)」試験対策が 一番多いと思われるが、今後競合本も増えるだろうし、差別化が難しい(実際そうなった) アソシエイトレベルの3試験は勉強すべき内容で重複する部分が多々あるので、 1冊で3つともカバーしたらおもしろくない? という議論の流れだったかと思います。 特に3つめのポイントについて、平山さん、鳥谷部さん、福垣内さんが、 「多少大変になっても、おもしろくて役に立つ本を書きたいよね」 というノリだったのが大きいと思います。 1試験の対策書を書くのも大変なのに、3試験分をカバーする本を書こう、 となっても「ああ、おもしろいね」とあっさり賛成される、 技術レベルの高い方たちとご一緒できて、本当によかったと思います。 ソリューションアーキテクト(アソシエイト)だけでよくない? 昨年ぐらいからでしょうか、AWS関連の案件でお客様とディスカッションさせていただく時に感じるのですが、 4~5年前と比べて、AWSにお詳しいお客様が本当に多くなりました。 AWSのサービスアップデートも常にチェックされていますし、 Well-Architected.

“Stream to Amazon Elasticsearch Service” does not work

    なんということもない、CloudWatch LogsデータのElasticsearch Serviceへのストリーミングが動かない(というか設定できない)。 マネジメントコンソールの設定に沿って手順を進めると、 最後の”Start Streaming”のところでエラーが発生して ストリーミングが開始できない。 There was a problem There was an error creating your Lambda Function. Please try again.   CloudTrailを確認すると、 どうやら「CreateFunction20150331」なるファンクションが実行され、 それが「InvalidParameterValueException」で落ちている模様。 [wp_ad_camp_3]   実際のログを確認すると、 “errorMessage”:”The runtime parameter of nodejs4.3 is no longer supported for creating or updating AWS Lambda functions. We recommend you use the new runtime (nodejs8.10).

Amazon Linuxでserverspec-initができない(`require’: cannot load such file — io/console (LoadError))

    Amazon Linuxでserverspecのインストールはできるが、 serverspec-initができない。 Amazon LinuxのAMI IDはamzn-ami-hvm-2017.03.0.20170417-x86_64-gp2 (ami-923d12f5)、 Rubyのバージョンはruby 2.0.0p648 (2015-12-16) [x86_64-linux]、 rakeのバージョンはrake, version 12.0.0。   serverspec-initを実行すると、 [ec2-user@ip-192-168-11-11 serverspec]$ serverspec-init /usr/share/ruby/vendor_ruby/2.0/rubygems/core_ext/kernel_require.rb:55:in `require’: cannot load such file — io/console (LoadError) from /usr/share/ruby/vendor_ruby/2.0/rubygems/core_ext/kernel_require.rb:55:in `require’ from /home/ec2-user/.gem/ruby/2.0/gems/net-ssh-4.1.0/lib/net/ssh/prompt.rb:1:in `’ from /usr/share/ruby/vendor_ruby/2.0/rubygems/core_ext/kernel_require.rb:55:in `require’ from /usr/share/ruby/vendor_ruby/2.0/rubygems/core_ext/kernel_require.rb:55:in `require’ from /home/ec2-user/.gem/ruby/2.0/gems/net-ssh-4.1.0/lib/net/ssh/key_factory.rb:2:in `’ from /usr/share/ruby/vendor_ruby/2.0/rubygems/core_ext/kernel_require.rb:55:in `require’ from /usr/share/ruby/vendor_ruby/2.0/rubygems/core_ext/kernel_require.rb:55:in `require’ from /home/ec2-user/.gem/ruby/2.0/gems/net-ssh-4.1.0/lib/net/ssh/authentication/key_manager.rb:2:in `’ from.

awspecでspecファイルをgenerateすると(中略)awsecrets-1.10.1/lib/awsecrets.rb:59:in `exist?’: no implicit conversion of nil into String (TypeError)

    Infrastructure as codeである。   「エンタープライズにAWS?早い早い」などという担当者の方の冷笑はいまや昔。 今日ではあの三菱東京UFJ銀行までがAWSを利用しようかというご時勢である。 そんな時流に乗り、弊社も忙しい。とっても忙しい。 手のぬくもりを大切にした環境構築ではもはや追いつかない。 そこで自動化を推進するわけである。 Terraformは以前からちょいちょい触っていたが、インフラ構築にもTDDをということで、 awsspecを検証してみた。   Amazon Linuxに2.x系のRubyを入れ(詳細は割愛する)、 gem install awspec mkdir awspec cd awspec awspec init ここまでは順調。 問題はこの後、 echo “require ‘spec_helper'” > spec/ec2_and_rds_spec.rb awspec generate vpc vpc-xxxxxxxxxc >> spec/ec2_and_rds_spec.rb しようとすると、 $ awspec generate vpc vpc-1871177c >> spec/ec2_and_rds_spec.rb /home/ec2-user/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/awsecrets-1.10.1/lib/awsecrets.rb:59:in `exist?’: no implicit conversion of nil into String.

TerraformでAWSのVPC環境の構築自動化

    Terraformとは Terraformは、HashiCorp社によって提供され、環境構築の一連の手順をスクリプトで記述できる 所謂Infrastructure as codeを実現するためのツール群である。   TerraformはAWSに特化したツールというわけではなく、 Azure、Google Cloud、OpenStackやVMware vSphereの環境構築にも活用できる。   最初、AWSの環境構築自動化をCloudFormationで実現すべくJSONをしこしこ書いていたわけだが、 クライアントの気まぐれにより、Terraformで書き換えることになった。 まあ、これも1つの勉強か。   Terraformのインストール   インストールというか、ダウンロードして解凍してパス上に配置するだけである。 1、Amazon Linuxを起動してログイン 2、terraformをダウンロードして解凍 $mkdir terraform $cd terraform $wget https://releases.hashicorp.com/terraform/0.6.15/terraform_0.6.15_linux_amd64.zip $unzip terraform_0.6.15_linux_amd64.zip 3、/usr/binの下に配置 $cd .. $cp terraform /usr/bin/ 4、環境変数の設定。PATHと、AWSのアクセスキー、シークレットキー、デフォルトリージョンを設定 $cd $vim .bash_profile .bash_profileの内容 [text highlight=”10,14-16″] # .bash_profile # Get the aliases and functions if [ -f.

「クラウド写経」でアプリとインフラの境界を越えよう『Amazon Web Services クラウドネイティブ・アプリケーション開発技法 』

  JR品川駅の改札を出て、港南口のマイクロソフトの方に向かうと、 駅構内の柱に広告用のディスプレイが掲げられていて、 様々な広告映像が流れているわけですよ。 ある日、品川駅構内を歩いておりますと、某ハードウェアベンダの広告映像を目にしましてね、 こう言うわけです。   〇〇のクラウドシステムは、導入から稼働まで3時間   ぶっちゃけ、「遅っ!!!」って思いました。   3時間っていってもあれですよ、 導入しようと思うと先ず営業呼んで話を聞いて、大体の要件を伝えると 「じゃあ次は技術の者も連れてきますんで」となる気がしますね。 で、次、技術の者が来たら前回よりも突っ込んだ内容をヒアリングしてきて、 営業が「じゃあこれで一旦お見積り出しますんで」ってなる気がしますね。 ここまでで2週間ぐらいです。 そこから稟議通して発注してベンダの準備のリードタイムを確保して、 そこからやっと「3時間で稼働」、な気がするんですよ(妄想です)。   disりたいわけじゃないんですが(実質disってますが)、 これからのクラウドの皮を被ったベンダは大変だろうなあと思うと共に、 そこで働くインフラエンジニアの方々というのも、 職を維持できるかどうかという点で、非常に大変だろうなあと感じたわけです。 中の人でないにも関わらず、今後も「ITインフラエンジニア」の肩書だけで食っていくためには、 相当の経験と技術力がないと、正直キツいだろうなあという感覚を、 びりびりと感じてしまってちょっと身震いする気分でした。   Amazon Web Services クラウドネイティブ・アプリケーション開発技法   前著、『Amazon Web Services パターン別構築・運用ガイド』に引き続き、 待望の類書が発売されました。即買いしました。   今回は「アプリケーション開発技法」ということで、 アプリケーション開発者を読者層として意識した構成になっています。 紹介されているAWSのサービスとしては、 S3、API Gateway、SNS、DynamoDB、Lambda、Cognito、Machine Learning、 Kinesis、SQS、IoT、Mobile Hubと、 コードの匂いのするサービスが中心となっています。 所謂、「クラウドネイティブなアプリケーション」を開発するために 活用できる(すべき)サービス群ですね。 本書は、上記の各種AWSサービスの紹介と、これらサービスを組み合わせた アプリの実装方法の解説が大部分を占めています。   正直申しますと、本書で紹介されているAWSサービスの中で、 まだ触ったこともないサービスがたくさんあります。.

Terraformで”Unknown root level key: resoruce”

  TerraformでAWSのシンプルなセキュリティグループとEC2の.tfファイルを書いたわけですよ。 しかしterraform planすると、 $ terraform plan There are warnings and/or errors related to your configuration. Please fix these before continuing. Errors: * 1 error(s) occurred: * module root: 1 error(s) occurred: * Unknown root level key: resoruce   この切り分けに超時間がかかった・・ググっても英語含めて情報ないし。 結局、根本原因はわからなかった。 “root level key”とあるので、公開鍵関連の定義が悪いのかと思ったが、 結局問題なかった。 色々コメントアウトしたりなんやらやって、 セキュリティグループを記述した箇所の何かが悪いところまでは追ったのだが、 文法的な間違いはないし、何が悪いのかさっぱりわからない。 最後は、以前動作実績のある.tfファイルを持ってきて、 今回記述したい動作で書き換えたら、planが通ったという・・。   なかなかTerraformと仲良くなれない。   Amazon Web.

バッチ(cmd)でEC2のAMIを取得

  PowerShellの方が簡単なのに・・と思いつつ、 男には.batでやらねばならぬ時もあるのです。   Windowsのコマンドライン(create-image.bat)でEC2のAMIを取得してみましょう。 第1引数にNameタグを設定し、当該タグのつけられたインスタンスのAMIを取得する。 ※いろいろ端折ってるのでコピペして使う時注意。 [text] @echo off setlocal set TAG_NAME=%1 set AMI_ID= @REM タグ名を元にインスタンスIDを取得する set CMD=aws ec2 describe-tags –filters “Name=tag:Name, Values=%TAG_NAME%” “Name=resource-type, Values=instance” –query Tags[].ResourceId –output text set INSTANCE_ID= for /f “usebackq delims=” %%a in (`%CMD%`) do set INSTANCE_ID=%%a echo %INSTANCE_ID% @REM インスタンスIDを元にAMIを取得する set CMD=aws ec2 create-image –instance-id %INSTANCE_ID% –name %TAG_NAME%_%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2% –description.

Template contains errors.: Template format error: Any Properties member must be a JSON object.

  CloudFormationのデバッグのしづらさは、きっとAWSの陰謀に違いない。 わからん。わからんすぎる。   なにがあった   セキュリティグループでね、当該グループ自身をセキュリティ許可のSourceにする、 ちょい特殊な定義をCloudFormationでしたかったんですよ。 無論、”AWS::EC2::SecurityGroup”の定義の中で自分自身を参照すると循環参照になっちゃうんで、 こうしたわけです。 [text highlight=”1,16,20,29,33″] “ElbSg” : { “Type” : “AWS::EC2::SecurityGroup”, “Properties” : { “GroupDescription” : “HTTP and HTTPS Allow”, “VpcId” : { “Ref” : “VpcId” }, } }, “ElbSgIngress” : { “Type” : “AWS::EC2::SecurityGroupIngress”, “Properties” : [ { “IpProtocol” : “tcp”, “FromPort” : “80”, “ToPort” : “80”,.