20211123のAWSに関する記事は13件です。

AWS Systems Managerの管理対象インスタンスにする

はじめに 本記事は、EC2インスタンスをSystems Managerの管理対象インスタンスにするまでの手順です。 別記事で、EC2インスタンスに対してオートメーション(ランブック)を実行するところを書く予定です。手順が長いので分割しています。 Systems Managerを利用するためには、いくつかのロールの作成とポリシーの割り当てが必要になります。 記事のカバー範囲 AWS上のWindows Serverインスタンスのみを扱います。オンプレミスのサーバーをマネージドインスタンスにする内容は含みません。 Systems Managerの管理対象インスタンスの準備 SSM Agentをインストールしたマシンイメージ(AMI)を用意します。 AWSコミュニティーAMIで提供されているWindows Server 2019のAMIには、はじめからSSM Agentがインストールされています。 2. Systems Managerの管理対象インスタンスに付与するためのインスタンスプロファイル(ロール)を作成する 私の場合は、下記のロール「Role_SSMManagedCore」を新規作成しました。 必須のAWS管理ポリシーは「AmazonSSMManagedInstanceCore」ですが、ランブック実行時にS3バケットからデータを取得したいので「AmazonS3ReadOnlyAccess」も付与しています。 インスタンスプロファイルとロールは別の概念ですが、AWS Management ConsoleでIAMロールを作成したら、同名のインスタンスプロファイルもペアで作成されます。 <参考URL> インスタンスプロファイルの使用 - AWS Identity and Access Management AWS Management Console を使用して Amazon EC2 のロールを作成する場合、コンソールはインスタンスプロファイルを自動的に作成し、そのインスタンスプロファイルにロールと同じ名前を付けます。IAM ロールを使用してインスタンスを起動するのに Amazon EC2 コンソールを使用する場合、インスタンスに関連付けるロールを選択できます。 Systems Managerを利用するIAMユーザーの用意 Systems Managerの利用者のIAMユーザーにポリシーを付与します。 AWS管理ポリシー「AmazonSSMFullAccess」を付与します。 (以下、参考URL) タスク 1: ユーザーグループを作成する - AWS Systems Manager PassRole用のインラインポリシーを付与します。私はインラインポリシーを「PassRole_SSMManagedCore」と名付けました。これでEC2インスタンスにRole_SSMManagedCoreというロールを渡す権が付きます。 EC2インスタンスを起動して、Systems Managerのコンソールから管理対象インスタンスとして確認する ロール「Role_SSMManagedCore」を付与してインスタンスを起動します。 約30分ほど待ちます。 初めて管理対象のインスタンスになる場合は、SSM Agentからのインベントリ情報アップロードに時間がかかるので、しばらく待つ必要があります。正確な時間はわかりませんが、実際に約30分ほどで管理対象になりました。 Systems Managerの「フリートマネージャー」を開くと起動中のインスタンスがManaged nodeとして表示されます。 Managed nodeになると、Node actionとしてリモートセッション(Powershell)やファイルシステムの参照ができます。 Start teminal sessionを実行した画面(ブラウザからPowershellで操作可能) View file systemを実行した画面 Systems Managerの「インベントリ」、「コンプライアンス」、「セッションマネージャー」、「パッチマネージャー」などを開くとそれぞれの観点でインスタンスの管理情報を表示することができます。 例:パッチマネージャーの画面 最後に Systems Managerを使うとインスタンス内のパッチの最新状態の一括管理やWindows Updateなどを行うことができます。 引き続き、オートメーション(ランブック)を実行する設定について記事を書く予定です。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

2018年に公開したAlexaスキルでもAWSプロモをもらい続けている件

本記事はスマートスピーカーアドベントカレンダー2021の21日目の記事です。 記事そのものは11月23日の勤労感謝の日に書いています。 ミュートにしているのに記事を見てしまった方はお疲れさまです。 さて、最近になってこんなことを耳にしました。 「AlexaスキルでのAWS利用クーポンがこなくなった」 たしかに、以前は1つでもスキル公開していると月間100ドル分の利用クーポンが自動発行されていたと記憶しています。 私は業務上、Alexaスキルをリリースしているアカウントはいくつかあります。 さすがに依頼されたスキルをすべて自分のアカウントで公開というわけにもいきません。 その中で2018年中にしかリリースしていないアカウントがあります。 けれども、AWSの利用クーポンは未だに頂いているのが現状です。  ※少なくともここ数ヶ月は。 で、そのアカウントのメールを漁っていたら 2021/07/14 8:30 に以下のメールがきてました。 ※本件のメールの公開は禁止事項に入ってない へぇ。 メール内のリンク先に以下のサイトへのリンクがありました。 ただ、、、私は申し込んだ記憶が一切ないです。 むしろこのアカウントはAlexa-hostedのスキル公開すらしてない気がします。 それでも以下のようなメールが毎月きています。 金額が異なる場合があるので、規約通り利用頻度に応じてこの金額が変動するのでしょう。 2018年にリリースしたスキルで未だに毎月50ドル相当がもらえるのなら開発環境として試せる幅が増えて良いですね。 おそらく最低金額は25ドルと思われるので、何か1つリリースしておけばもらえるでしょう。 以上
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【AWS】EC2(wordpress)+RDSの基本構成をCloudFormationで構築

■はじめに EC2(wordpress)・RDSのシングル構成(※)を今度はCloudFormationで構築してみました。 ※AWSで基本的なブログサービスを構築する(シングル構成) ■構成図 ■テンプレート概要 上記 85ページを参考に、 ネットワーク、セキュリティ、アプリケーションの3つに分ける。 加え、一部設定値を記述した外部ファイルの計4つを作成する。 ネットワーク ⇒ cf_network.yml セキュリティ ⇒ cf_security.yml アプリケーション ⇒ cf_application.yml 設定ファイル ⇒ dev.cfg ■テンプレート詳細 【ネットワークテンプレート】 VPC, サブネット, ルートテーブルについて記述する。 VPC CidrBlockの指定。 サブネット パブリックサブネット1,2、プライベートサブネット1,2のAZ,VPC,CidrBlockの指定。 DBサブネットグループ SubnetIdsでプライベートサブネット1,2 であることを指定。 インターネットゲートウェイ VPC1にアタッチすることを指定。 ルートテーブル パブリックサブネット用のルートテーブルには localとインターネットゲートウェイ向けの設定。 プライベートサブネット用のルートテーブルには 宛先指定なし(localのみになる)の設定。 output VPCID,サブネットID,サブネットグループ名、インターネットゲートウェイ名、ルートテーブルIDをアウトプット指定。 cf_network.yml AWSTemplateFormatVersion: 2010-09-09 Resources: #----------------------- #VPC Create #----------------------- MyVPC1Cf: Type: AWS::EC2::VPC Properties: CidrBlock: 10.0.8.0/21 EnableDnsSupport: true Tags: - Key: Name Value: MyVPC1-Cf #----------------------- #Subnet Create #----------------------- #PublicSubnet1 create PublicSubnet1Cf: Type: AWS::EC2::Subnet Properties: AvailabilityZone: "ap-northeast-1a" VpcId: !Ref MyVPC1Cf CidrBlock: 10.0.10.0/24 Tags: - Key: Name Value: PublicSubnet1-Cf #PublicSubnet2 create PublicSubnet2Cf: Type: AWS::EC2::Subnet Properties: AvailabilityZone: "ap-northeast-1c" VpcId: !Ref MyVPC1Cf CidrBlock: 10.0.11.0/24 Tags: - Key: Name Value: PublicSubnet2-Cf #PrivateSubnet1 create PrivateSubnet1Cf: Type: AWS::EC2::Subnet Properties: AvailabilityZone: "ap-northeast-1a" VpcId: !Ref MyVPC1Cf CidrBlock: 10.0.12.0/24 Tags: - Key: Name Value: PrivateSubnet1-Cf #PrivateSubnet2 create PrivateSubnet2Cf: Type: AWS::EC2::Subnet Properties: AvailabilityZone: "ap-northeast-1c" VpcId: !Ref MyVPC1Cf CidrBlock: 10.0.13.0/24 Tags: - Key: Name Value: PrivateSubnet2-Cf #----------------------- #RDS SubnetGroup Create #----------------------- RdsSubnetGroupCf: Type: AWS::RDS::DBSubnetGroup Properties: DBSubnetGroupName: RdsSubnetGroupCf DBSubnetGroupDescription: RdsSubnetGroupCf SubnetIds: - !Ref PrivateSubnet1Cf - !Ref PrivateSubnet2Cf Tags: - Key: Name Value: RdsSubnetGroup-Cf #----------------------- #InternetGateway Create #----------------------- InternetGW1Cf: Type: AWS::EC2::InternetGateway Properties: Tags: - Key: Name Value: InternetGW1-Cf AttachGateway: Type: AWS::EC2::VPCGatewayAttachment Properties: VpcId: !Ref MyVPC1Cf InternetGatewayId: !Ref InternetGW1Cf #----------------------- #Routetable Create #----------------------- #PublicRoutetable create PublicRoutetableCf: Type: AWS::EC2::RouteTable Properties: VpcId: !Ref MyVPC1Cf Tags: - Key: Name Value: PublicRoutetable-Cf PublicRoutetableAssociationCf: Type: AWS::EC2::SubnetRouteTableAssociation Properties: SubnetId: !Ref PublicSubnet1Cf RouteTableId: !Ref PublicRoutetableCf PublicRouteCf: Type: AWS::EC2::Route Properties: RouteTableId: !Ref PublicRoutetableCf DestinationCidrBlock: 0.0.0.0/0 GatewayId: !Ref InternetGW1Cf #PrivateRoutetable create PrivateRoutetableCf: Type: AWS::EC2::RouteTable Properties: VpcId: !Ref MyVPC1Cf Tags: - Key: Name Value: PrivateRoutetable-Cf PrivateRoutetableAssociationCf: Type: AWS::EC2::SubnetRouteTableAssociation Properties: SubnetId: !Ref PrivateSubnet1Cf RouteTableId: !Ref PrivateRoutetableCf Outputs: #----------------------- #VPC output #----------------------- MyVPC1CfOutput: Value: !Ref MyVPC1Cf Export: Name: MyVPC1Cf-Id #----------------------- #Subnet output #----------------------- #PublicSubnet1Cf PublicSubnet1CfOutput: Value: !Ref PublicSubnet1Cf Export: Name: PublicSubnet1Cf-Id #PublicSubnet2Cf PublicSubnet2CfOutput: Value: !Ref PublicSubnet2Cf Export: Name: PublicSubnet2Cf-Id #PrivateSubnet1Cf PrivateSubnet1CfOutput: Value: !Ref PrivateSubnet1Cf Export: Name: PrivateSubnet1Cf-Id #PrivateSubnet1Cf PrivateSubnet2CfOutput: Value: !Ref PrivateSubnet2Cf Export: Name: PrivateSubnet2Cf-Id #----------------------- #RDS SubnetGroup output #----------------------- RdsSubnetGroupCfOutput: Value: !Ref RdsSubnetGroupCf Export: Name: RdsSubnetGroupCf-GroupName #----------------------- #InternetGateway output #----------------------- InternetGW1CfOutput: Value: !Ref InternetGW1Cf Export: Name: InternetGW1Cf-Name #----------------------- #Routetable output #----------------------- #PublicRoutetableCf PublicRoutetableCfOutput: Value: !Ref PublicRoutetableCf Export: Name: PublicRoutetableCf-Id #PrivateRoutetableCf PrivateRoutetableCfOutput: Value: !Ref PrivateRoutetableCf Export: Name: PrivateRoutetableCf-Id 【セキュリティテンプレート】 セキュリティグループについて記述する。 セキュリティグループ EC2セキュリティグループとRDSセキュリティグループの作成。 EC2はsshとhttpのインバウンド、RDSはmysqlのインバウンド指定。 アウトプット アプリケーションテンプレートから セキュリティグループのIDを参照するためGetAttで指定。 cf_security.yml AWSTemplateFormatVersion: 2010-09-09 Resources: #----------------------- #SecurityGroup Create #----------------------- #EC2 SecurityGroup create WebSg1Cf: Type: AWS::EC2::SecurityGroup Properties: GroupName: WebSg1Cf GroupDescription: WebSg1Cf VpcId: !ImportValue MyVPC1Cf-Id SecurityGroupIngress: # ssh - IpProtocol: tcp FromPort: 22 ToPort: 22 CidrIp: 0.0.0.0/0 # http - IpProtocol: tcp FromPort: 80 ToPort: 80 CidrIp: 0.0.0.0/0 Tags: - Key: Name Value: WebSg1-Cf #RDS SecurityGroup create RdsSg1Cf: Type: AWS::EC2::SecurityGroup Properties: GroupName: RdsSg1Cf GroupDescription: RdsSg1cf VpcId: !ImportValue MyVPC1Cf-Id SecurityGroupIngress: - SourceSecurityGroupId: !Ref WebSg1Cf IpProtocol: tcp FromPort: 3306 ToPort: 3306 Tags: - Key: Name Value: RdsSg1-Cf Outputs: #----------------------- #SecurityGroup output #----------------------- #WebSg1Cf WebSg1CfOutput: Value: !GetAtt WebSg1Cf.GroupId Export: Name: WebSg1Cf-Id #RdsSg1Cf RdsSg1CfOutput: Value: !GetAtt RdsSg1Cf.GroupId Export: Name: RdsSg1Cf-Id 【アプリケーションテンプレート】 EC2, RDSについて記述する。 パラメータ EC2インスタンスのイメージIDとインスタンスタイプの指定、キーペア名の指定、データベースパスワードの型定義。 イメージIDとは、マネジメントコンソールでいうと以下の部分に該当する。 CLIで以下を実行するとインスタンスイメージIDが取得できる。 $ aws ssm get-parameter --name /aws/service/ami-amazon-linux-latest/amzn2-ami-kernel-5.10-hvm-x86_64-gp2 --query "Parameter.Value" --region ap-northeast-1 ami-0404778e217f54308 CloudFormationで自動で取得するにはParameterで以下を指定する。 EC2ImageIdCf: Type: AWS::SSM::Parameter::Value<String> Default: /aws/service/ami-amazon-linux-latest/amzn2-ami-kernel-5.10-hvm-x86_64-gp2 キーペアはあらかじめ作成しておく前提。 以下記述をしておくことで、マネジメントコンソールから選択できるようになる。 また、CLIからデプロイ実行時は"Default"のキーペア名が使用される KeyNameCf: Description: The EC2 Key Pair to allow SSH access to the instance Type: "AWS::EC2::KeyPair::KeyName" Default: "Mykeypair" EC2 パブリックIPの自動割り当て有効化のため、"NetworkInterface:" を記述。 ここでインデックスを指定しないと自動割り当てされない。(もしくはVPC側の設定で自動割り当てされるようにする必要がある) wordpressのインストールコマンドは「UserData」に記述。 NetworkInterfaceとは、マネジメントコンソールでいうと以下の部分に該当する。 テンプレートでは以下のように記述する。セキュリティグループID(GroupSet)も記述しなければならない。 NetworkInterfaces: - AssociatePublicIpAddress: "true" DeviceIndex: "0" SubnetId: !ImportValue PublicSubnet1Cf-Id GroupSet: - !ImportValue WebSg1Cf-Id RDS マスターユーザーパスワードは、コマンド実行時に外部ファイルをオーバーライド指定するので !Refで参照する cf_application.yml AWSTemplateFormatVersion: 2010-09-09 Parameters: #----------------------- #EC2 Instance Parameter #----------------------- EC2ImageIdCf: Type: AWS::SSM::Parameter::Value<String> Default: /aws/service/ami-amazon-linux-latest/amzn2-ami-kernel-5.10-hvm-x86_64-gp2 EC2InstanceTypeCf: Type: String Default: t2.micro #----------------------- #EC2 Keypair Parameter #----------------------- KeyNameCf: Description: The EC2 Key Pair to allow SSH access to the instance Type: "AWS::EC2::KeyPair::KeyName" Default: "Mykeypair" #----------------------- #RDS DatabasePassword #----------------------- DatabasePassword: Type: String Description: Database password NoEcho: "true" Resources: #----------------------- #EC2 Create #----------------------- WebServer1Cf: Type: AWS::EC2::Instance Properties: KeyName: !Ref KeyNameCf ImageId: !Ref EC2ImageIdCf InstanceType: !Ref EC2InstanceTypeCf Monitoring: false NetworkInterfaces: - AssociatePublicIpAddress: "true" DeviceIndex: "0" SubnetId: !ImportValue PublicSubnet1Cf-Id GroupSet: - !ImportValue WebSg1Cf-Id #wordpress install UserData: Fn::Base64: | #!/bin/bash yum -y update amazon-linux-extras install php7.2 -y yum -y install mysql httpd php-mbstring php-xml gd php-gd systemctl enable httpd.service systemctl start httpd.service cd /var/tmp wget http://ja.wordpress.org/latest-ja.tar.gz ./ tar zxvf ./latest-ja.tar.gz cp -r ./wordpress/* /var/www/html/ chown apache:apache -R /var/www/html Tags: - Key: Name Value: WebServer1-Cf #----------------------- #RDS Create #----------------------- Database1Cf: Type: AWS::RDS::DBInstance Properties: Engine: mysql EngineVersion: 5.7 DBInstanceClass: db.t2.micro AllocatedStorage: 10 StorageType: gp2 MasterUsername: wordpress MasterUserPassword: !Ref DatabasePassword DBName: wordpress VPCSecurityGroups: - !ImportValue RdsSg1Cf-Id DBSubnetGroupName: !ImportValue RdsSubnetGroupCf-GroupName AvailabilityZone: "ap-northeast-1a" DBInstanceIdentifier: database-1-cf MultiAZ: false BackupRetentionPeriod: 0 Tags: - Key: Name Value: Database1-Cf 【設定ファイル】 データベースパスワードのみ記述。 dev.cfg DatabasePassword=xxxxxx ■作成時に詰まった点 【ec2 「NetworkInterfaces」のエラー】 NetworkInterfacesの中にGroupSetを記述する必要があるが、 以下のようにNetworkInterfacesとGroupSetを同列に記述してエラーが発生していた。 NetworkInterfaces: - AssociatePublicIpAddress: "true" DeviceIndex: "0" SubnetId: !ImportValue PublicSubnet1Cf-Id GroupSet: - !ImportValue WebSg1Cf-Id また、GroupSetではなく、SecurityGroupIds にIDを書くこともできるようだが、 そちらは私のテンプレートではエラーが出てしまっていた。List of Stringでないとか。 対処できていないがGroupSetで構築できてしまったので一旦パスした。 【外部ファイルからのデータベースパスワード読み込み不可】 エラー文字列をメモるのを忘れてしまったが、ファイル読み込み時に「パスワードに使用不可の文字が設定されている」といったようなエラー。 こちらも原因不明だが、外部ファイルを作り直したら読み込みに成功した(変な改行、ブランクが入っていた? 文字コードがおかしかった?) ■deploy、deleteコマンド 作成時は依存性の低い順、削除時は逆順で以下実行。 【作成】 $ aws cloudformation deploy --template-file cf_network.yml --stack-name CFNetwork $ aws cloudformation deploy --template-file cf_security.yml --stack-name CFSecurity $ aws cloudformation deploy --template-file cf_application.yml --stack-name CFApplication --parameter-overrides $(cat dev.cfg) 【削除】 $ aws cloudformation delete-stack --stack-name CFApplication $ aws cloudformation delete-stack --stack-name CFSecurity $ aws cloudformation delete-stack --stack-name CFNetwork
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

話題の「AWSコンテナ設計・構築 本格入門」ハンズオンやってみた(その1)

発売前から各所で話題のこいつ。実は後半が本格的なハンズオンになっている。 https://www.amazon.co.jp/dp/B09DKZC1ZH/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1 環境準備 作業端末:Macbook AWSアカウント:自社で勉強用に用意していたものを利用。 IAMユーザー:個人ユーザーを作成しAdminAccessを付与。 4-2章 ネットワークの構築 初めにCIDRブロックの割り当てを考えておく。 特に今回利用するアカウントは他のメンバーと共用のため、設定例にあるような10.台だと既存VPCと被る可能性大。 指定可能なCIDRのアドレス範囲ってどれだっけ、というのをこれで参照。 https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/VPC_Subnets.html 東京リージョンの既存VPC見ると10.100.0.0/16が空いていたので採用。 以降、書籍の設定例の第2オクテットを0→100に読み替える形で設定する。 リソース作成はCFnテンプレートがDL提供されている。URLはこちら。 https://www.sbcr.jp/support/4815609994/ CFnテンプレート内にCIDR設定も記述されているので、VSCodeで先に修正しておく。 AWSマネコンからCFnサービス画面を起動。 「スタックの作成」から修正したyamlファイルを指定する。 …ところがyamlのアップロードが終わらない。AWSのバグ?を踏んだ模様。 https://stackoverflow.com/questions/58125181/cloud-formation-cant-upload-template-file 回避策としてS3バケット経由での読み込みを試みたところ成功。 ※バケットはパブリックアクセス有効にしたうえ、S3 URIではなくオブジェクトURLを指定する必要あり。 CFnスタック名など、基本的にパラメーター類は本書記載の設定例どおりに指定(忘れるので) グローバルで一意にする必要あるもの等のみユニークな値をつど決めることとする。 「Create complete」ステータスになったので念のため実物も確認。 たしかにVPCが作成されていた。 4-3章 アプリケーションの構築 マネコンからCloud9を起動。「Create environment」する。 (Cloud9はコンソール英語なのね) 環境が立ち上がったらCFnで作ったセキュリティグループを追加。 Cloud9の実態はEC2インスタンスなので、そいつにSGを追加アタッチする。 ここからはCloud9のコンソール操作。 サンプルアプリをGitHubの著者リポジトリからクローンしてくる。 クローンしたフォルダーに移動し、Git操作を開始。 helloworld用コードが格納されているブランチへスイッチ。 (Cloud9、gitコマンドのTab補完に対応してる!便利) そのあとNode.jsとYarnを仕込んでおく。 最後にバックエンド用アプリもcloneすれば、本章は完了! その1あとがき Mac版Kindle、なんでページめくりこんなに重いんだろう…。 これがなければもっとサクサクハンズオン出来たのにな〜。 → 追記:この記事を参考にKindle for Mac再インスコしたら重さ改善した! https://note.com/yn047/n/nba318c9819d2
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

AWS - CloudWatch Logs Insightsで日付の期間指定する場合はAbsoluteを選択

AWS - CloudWatch Logs Insightsで日付の期間指定する場合はAbsoluteを選択すべし。 クライアントで --start-time --end-timeを指定する方法はよく見かけたけど、コンソール版はあまり見かけなかった。常識なのかな。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

CloudFormationでImportValueを使うとJSONObjectが見つかったと言われる

経緯 セキュリティグループをクロススタックで使いたくてyamlでテンプレートを書いていたものの、Outputsの結果がIDになっているのは確認できているのに #/SecurityGroups/0: expected type: String, found: JSONObject とか言われてぐぬぬ…となっていた。 うまくいく方法を見つけた結果からすると、最終的に行き着くのは「一旦フルで書いてみよう」というところ…なのかもしれない。 修正前 MountTarget1: Type: AWS::EFS::MountTarget Properties: FileSystemId: Ref: NfsBatch SubnetId: Ref: Subnet SecurityGroups: - ImportValue: NfsSecurityGroupId 修正後 MountTarget1: Type: AWS::EFS::MountTarget Properties: FileSystemId: Ref: NfsBatch SubnetId: Ref: Subnet SecurityGroups: - Fn::ImportValue: NfsSecurityGroupId 終わりに 関数名ちゃんと全部書こうぜという、かれこれ1時間近く悩んでいたのがバカらしくなるような結果でした。 (ほかにもやりようはあるのかもしれない) Fn::がついていないImportValueで実行した結果がMappingじゃなくてJSONObjectとして認識されているのがちょっと疑問。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

作成したEC2インスタンスにTerminalからssh接続する

前提 EC2インスタンスの作成やpem.keyのダウンロードなどは省いています。 pem.keyを新規に作成、ダウンロードした後からの手順について説明しています。 Macに標準装備されているTerminalを利用しています。 準備 ダウンロードしたpemキーをsshフォルダに移動させる $ MV ~/Downloads/hogehoge.pem ~/ .ssh/ MV ファイル移動をするコマンド hogehoge.pemには秘密鍵(自身でダウンロードしたpemファイル名)を記載 ダウンロードした秘密鍵ファイルをsshフォルダへ移動 権限変更をしてUserKeyを読み込めるようにする $ chmod 400 ~/.ssh/hogehoge.pem/ chmod 権限変更をするコマンド 読み取り権限をUserKeyのみに設定 実行 sshで接続してみる $ ssh -i ~/.ssh/hogehoge.pem ec2-user@xxx.xxx.xxx.xxx ssh ssh接続するためのコマンド -i 秘密鍵を指定するオプション @以降はEC2インスタンスのパブリックIPアドレス 接続完了 kzknoMacBook-Pro:~ kzk$ ssh -i ~/.ssh/hogehoge.pem ec2-user@xx.xxx.xxx.xxx __| __|_ ) _| ( / Amazon Linux 2 AMI ___|\___|___| https://aws.amazon.com/amazon-linux-2/ [ec2-user@ip-10-0-0-110 ~]$ 注意点 Permission denied (publickey,gssapi-keyex,gssapi-with-mic). 上記のエラーが返って来た場合にはコマンドの打ちミス可能性が高いです
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

ruby on rails tutorial3章を始めたら出てきたThere was insufficient space〜 というエラーの解決方法

やっと3章に突入して意気揚々と進めていくと、 qiita.rb There was an error while trying to write to `/tmp/xxxxxxxxxxxxxxxxxxxx/versions`. There was insufficient space remaining on the device. がこんにちは。 どうやら何かの容量がないということらしい。 そうこうしているうちに、awsのターミナルにコードを入力できなくなる。 ちょwどうするんこれ ま、やる事は2択!消すか、増やすかでしょ。 と言うことで調べてみるとこれらの記事が参考になりそうだったので読み進めました。が、解決できませんでした。 解決方法はいつもシンプル 壁にぶち当たるとモチベーションにデバフかかって睡魔召喚し始めますよね私だけですかw AWS Cloud9 の容量不足を解決する 第3章に入ったら hello_app, toy_app は削除しよう 書いてあるやん! hello_app、toy_appを delete してターミナルを再起動して解決しました。 …解決したと思っていました。続く…
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

AWSでIAMユーザーを作成しMFAを設定する

IAMユーザーとは AWSにはrootユーザーとIAMユーザーがあり、rootユーザーはなんでもできるアカウント、IAMユーザーはAWSにログインできる権限つきのアカウント(ユーザー)のこと。 IAMユーザーはこれはできるけど、これはできない!みたいに使える機能を制限できる。 細かく権限を与えることもできるが、今回は基本的にrootユーザーとして使えるようなIAMユーザーを作成することとする。 IAMユーザーを作成する IAMのダッシュボードを開く IAMリソースのユーザー部分の数字をクリック ユーザーの追加を選択 ユーザー詳細を設定する アクセスキーは必要があれば作るとして今回は作らないようにする。 設定できたら 次のステップ:アクセス権限 をクリック 既存のポリシーを直接アタッチを選択 AdministratorAccessを選択する(ここをクリックしたら詳細が見れる) 次のステップ:タグ をクリック タグの追加(オプション)は何も選択せずに、次のステップ:確認 をクリック ユーザーの作成をクリック 表示されるパスワードは覚えておく 新しく作ったIAMユーザーにログインする 先ほど作ったユーザー名をクリック 先ほど作ったIAMユーザーのユーザー名と、覚えておいたパスワードを入力してログイン。 MFAとは アカウントのログインをより安全なものにするための機能。 ユーザー名とパスワードを入力した後に求められる認証コード。 MFAを設定する MFAを設定するためにAuthyというアプリをインストールしなければならない。AppStoreでできる。 サインインの時にも表示したユーザーの概要ページを開き、MFAの割り当ての管理をクリック 今回はAuthyを使用するので仮装MFAデバイスにチェックを入れて続行 AWS:シークレットきーを表示してコピー Authy:Add Account→Enter Key manually→貼り付け Authy:好きなロゴを選択→Continue Authy:Account Nicknameを入力する。先ほど作ったIAMユーザーの認証コードとわかればなんでもいいので、今回はIAMユーザー名と同じにしておく。 Authy:30秒ごとに更新されるトークンをコピー AWS:貼り付ける 同じことを繰り返す MFAを割り当てをクリックするとMFAの設定が完了する
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

AWS EC2でWebサーバを構築しよう Part2

AWS EC2でWebサーバを構築しよう Part2 Part1をまだ見ていない方は、こちらからご覧ください EC2のインスタンスを作成しよう AWSのマネジメントコンソールに遷移すると、サインイン画面が表示されますので、「ルートユーザー」を選択してログインしてください。 ログインが完了するとAWSのホーム画面が表示されます。右上にあるリージョンを「東京」に変更してください。 (デフォルトのオハイオリージョンのままだと、日本からのアクセスだと遅くなってしまいます。) マネジメントコンソール画面が表示されます。今回はEC2を使うので、「仮想マシンの起動」をクリックしてください。 サーバのOSを選択する画面が表示されます。私が大好きなRedHatEnterpriseLinuxが無料利用枠の対象ですので、今回はこちらを使っていきます。 ※RedHatEnterpriseLinuxは企業や軍事レベルで使われている、安定したOSですのでオススメです。 (あと名前とロゴがイケてる) インスタンスタイプの選択画面が表示されます。高性能なインスタンスタイプを選択すると高額になります。ここでは12ヶ月無料利用枠の対象であるt2.microを選択します。 ※アカウントを新規登録してから12ヶ月は無料利用枠があり、利用枠の範囲内であれば無料でAWSの様々なサービスを利用することができます。 インスタンスの詳細設定画面が表示されます。特にこのまま変更せず、「次のステップ:ストレージの追加」をクリックしてください。 ストレージの追加画面が表示されます。デフォルトでは10GBのストレージですが、30GBまでは無料利用枠の範囲内ですので30GBに変更しちゃいましょう。 タグの追加画面が表示されますが、このまま「次のステップ:セキュリティグループの設定」をクリックしてください。 VPC(セキュリティグループ)の設定をしよう セキュリティグループの設定画面が表示されます。開放したいポートをここで設定します。SSHとHTTPとHTTPSの3つのルールを追加しましょう。 SSH,HTTP,HTTPSのルールを追加するとこのような画面になるかと思います。問題なければ、「確認と作成」をクリックしてください。 長かったですが最終ステップです。今まで設定した項目に問題がないか確認してみてください。問題が無さそうであれば右下にある「起動」をクリックしてください。 サーバに接続するために必要な秘密鍵の作成画面が表示されます。 「新しいキーペアの作成」を選択して、RSAを選択して、好きなキーペア名を入力してください。 ここではaws2021としました。 秘密鍵を作成すると、インスタンスが作成されます。 予期せぬ請求額に気付けるように請求アラートの作成も設定しておくことをオススメします。 インスタンスへログインしてみよう インスタンスが作成されると、インスタンス(1)となっているはずです。インスタンスIDの青文字の部分をクリックしてください。 インスタンス概要ページが表示されます。右上にある「接続」をクリックしてください。 接続画面が表示されます。今回はMacのターミナルを用いて接続しますので、SSHクライアントをクリックしてください。 先程作成したaws2021.pemが存在する場所までターミナルで移動して、例に書いてあるコマンドを実行してください。(ssh -i から始まるコマンド) 初回接続時にこのような事を言われると思いますが、yesを入力してください。 RedHatEnterpriseLinuxのライセンスを登録しよう # 言語パック(日本語)をインストール sudo dnf -y install langpacks-ja # Viでサブスクリプションマネージャの設定ファイルを編集 sudo vi /etc/yum/pluginconf.d/subscription-manager.conf (enabled=1を0に変更してください) # Viのかんたんな使い方(ViはVimの簡易版みたいなやつで、デフォルトでインストールされてます) Escキー 操作モード Aキー 入力モード (操作モードの状態で):wq 保存して終了 Nginx(Webサーバ)をインストールしよう サーバに接続できたら、以下の手順でNginxをインストールしてみましょう # nginxをインストール (-y を付与することでインストール時の確認を省略) sudo yum install -y nginx # nginxを起動 sudo systemctl start nginx # サーバ起動時にnginxを起動するように設定 sudo systemctl enable nginx # (オプション)nginxが起動しているか確認 sudo systemctl status nginx これでNginxのインストールは完了です!お疲れ様でした! サーバのIPv4アドレスにアクセスしてみよう AWSのインスタンス概要ページにあるIPv4パブリックアドレスにアクセスしてみましょう。 Welcome to Nginxのページが表示されていたらNginxのインストール、VPCの設定が正常に完了しています! お疲れさまでした! FileZilla(ファイル転送ソフト)をインストールしよう こちらからFileZillaをインストールしてください FileZillaを起動するとこのような画面が表示されます。左上にあるアイコンをクリックしてください。 サイトマネージャーが開きます。以下の設定に変更してください。 プロトコル:SFTP ホスト:インスタンスのIPv4アドレス ログオンタイプ:鍵ファイル ユーザ:ec2-user 鍵ファイル:インスタンス作成時に作成した鍵ファイルを指定 接続時にこのようなダイアログが表示された場合はOKをクリックしてください。 接続に成功するとリモートサイトに「/home/ec2-user」と表示されています。 これは、ec2-userのホームディレクトリが表示されています。 Nginxのディレクトリに移動したいので/usr/share/nginx/html と入力してください。 このような表示になっていると、正常にNginxのディレクトリに移動できています。 デフォルトでは、 Nginxは/usr/share/nginx/html配下にあるディレクトリからウェブページを配信します。 「サーバのIPv4アドレスにアクセスしてみよう」で表示されたWelcome to Nginxのページは、この配下にあるindex.htmlが表示されています。 クソデカうんちのウェブページをGitHubからダウンロードしよう Nginxのインストールも無事に終わり、FileZillaでファイルを転送する準備ができました。 いよいよクソデカうんちページをNginxから全世界に配信できます! 私のGitHubからbig-untiのリポジトリをダウンロードしてください。 GitHub big-unti GitHubページの「Code」をクリックして「Download ZIP」をクリックするとダウンロードできます。 ダウンロードしたら展開してください。 FileZillaを使ってファイルを転送しよう 先程ダウンロードしたファイルをFileZillaで/usr/share/nginx/htmlにアップロードすればOKなのですが、恐らく権限エラーが表示されます。 それは、ec2-userが/usr/share/nginx/htmlにファイルを書き込む権限を有していないためです。 まずは、以下のコマンドを入力してください。 # /usr/share/nginx/html以下のディレクトリの所有者をec2-userに変更する sudo chown -R ec2-user /usr/share/nginx/html ec2-userで/usr/share/nginx/htmlにファイルを書き込む権限を得たので、FileZillaでファイルを転送していきましょう。 FileZillaで/usr/share/nginx/htmlのディレクトリを表示した状態で、先程のクソデカうんちのウェブページ(css,images,index.htmlなど)をドラッグ&ドロップしてください。 ファイルが転送されます。(上書きの確認画面が表示された場合は、上書きをしてください。) 全世界にクソデカうんちのウェブページを公開してみよう FileZillaでファイルを転送したら、インスタンスのIPv4アドレスをブラウザのアドレスバーに入力してアクセスしてみてください。 きれいな可愛いクソでかうんちくんが表示されたら成功です! お疲れ様でした。 まとめ 本当はSSHとかSFTPとか公開鍵暗号方式とか、色々説明しながら書きたかったんですが後日追加したいと思います。 初めてのQiita記事だったので、「こういう所直したほうがいい」とか「ここ間違ってるよ」とかありましたら教えてくださると幸いです。 ここまで長い間見ていただきありがとうございました。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

AWS EC2でWebサーバを構築しよう Part1

AWS EC2でWebサーバを構築しよう Part1 このシリーズでは、AWS EC2でWebサーバを構築する方法を解説していきます。 AWSのアカウント作成から解説しているため、既にアカウントを持っている方はゴール(目標)だけ見てPart2へ進んでOKです! ゴール(目標) 「AWSのEC2上でNginxを動かして全世界にクソデカうんちページを公開する」 ※クソデカうんちページはこちらで開発したので、GitHub上からダウンロードしてもらいます! AWSってなに? AWSはAmazon Web Servicesの略です。 Amazonのクソデカサーバを使って、仮想サーバを構築したり(EC2)、データを格納したり(S3)、データベースサーバを構築したり(RDS)、様々なことができます。 今回のシリーズでは、AWSのEC2を使ってWebサーバを構築していきます。 ちなみに、AWSには他にも沢山のサービスがありますが、ここで紹介するとPart100くらいにまでなってしまうため割愛させていただきます。 AWSのアカウントを作成しよう AWS公式ページにアクセスして、右上にある「今すぐ無料サインアップ」をクリックしてください。 サインアップページが表示されますので、「メールアドレス」「パスワード」「AWSアカウント名」を入力してください。 AWSの利用目的、フルネーム、住所などの連絡先情報を入力してください。 電話番号は日本の場合 +81 を先頭につけて、最初の0を削除して入力してください。(例:08012345678 → +818012345678) 請求情報の入力画面が表示されるので、クレジットカードやデビットカードの番号を入力してください。 デビットカードの場合、口座に数百円以上の残高がないと登録できない可能性があるので注意してください。(登録時に、カードが使えるか1~200円程度の引き落としを行うため) 本人確認の画面が表示されるので、電話番号を入力してください。 電話番号に送られてきたコードを入力してください。 AWSのサポートプラン選択画面が表示されます。無料のベーシックサポートプランを選択して「サインアップを完了」をクリックしてください。 このような画面になればAWSのアカウント作成は完了です!お疲れ様でした! 「AWSマネジメントコンソールへ進む」をクリックすると、AWSのホーム画面に飛びます。 Part2に続きます こちらをクリックしてPart2をご覧ください
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

お名前.comでドメインを購入してRoute53でホストゾーンを作成する

ドメインを買う(お名前.com) ほしいドメイン名を検索→ドメイン名を選択→お申し込みへ進む 今回はサーバはRoute53を使用するのでお名前.comのサーバは利用しないを選択→次へ 申し込む ドメインの自動更新設定→自動更新設定申込内容の部分を解除で申し込む(自動更新なしの自分で更新する場合) ホストゾーンの作成(AWSでホストゾーンを作成する) Route53のページを開く ホストゾーンを選択→お名前.comで買ったドメイン名を入力→公開したいドメイン名ならパブリックホストゾーン(デフォルト)を選択→ホストゾーンの作成 これでホストゾーン完成。 Aレコードを作るためにオレンジ部分のレコードを作成を選択→ 諸々登録できたらレコードを作成を選択。 お名前.comでRoute53のホストゾーンのNSレコードのサーバ名を登録する ドメイン>ドメイン詳細>ネームサーバー設定で変更したいドメイン名を選択 2.ネームサーバーの選択のその他→その他のネームサーバーを使うの部分で 赤で囲んである部分のNSレコード名を一つずつ選択して入力していく。 これで完了! Aレコードの名前解決をする(ターミナルを使用) これで先ほど登録したネームサーバーが反映(浸透?)したことがわかった この流れで失敗したこと NSサーバーが返ってきて欲しかったのにstasusにエラーが出ていた。 (正常に動いた時は status: NOERROR となっている) これは公式情報から権威DNSが応答しない問題。 ということでお名前.comに対する権威DNSの紐づけをmounmoun.netではなく、別のホストゾーンのNSにしてしまっていた!!!(凡ミス)
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Amazon SageMakerでセマンティックセグメンテーション

SageMakerについて 機械学習のモデリングや、デプロイしてAWS上のアプリケーションで使うこともできるSageMaker(セージメーカー)。 いくつかビルトインでアルゴリズムが使用可能で、ハイパーパラメータの調整だけでもお手軽に試すことができるシロモノです。 #sage makerってつまり賢いやーつを生成するやーつってコトですね SageMakerでセマンティックセグメンテーションを試してみる 今回はセマンティックセグメンテーション(semantic segmentation)を試してみます。画像のピクセル(画素)ごとにラベルづけをします。 下記のように、左が入力画像(学習データ)で、右がマスク画像(教師データ)となります。 入出力の画像を使って、物体切り抜きなんかできると面白いなあ!と思ったのでやってみます。 学習データの準備 こちらのサイトからデータを拝借。 学習データをS3に保存 解凍されたVOC2012フォルダのうち、「train」と「train_annotation」フォルダをS3に保存します。 aws cli使えば楽ちんです。--recursiveでフォルダごとコピーします。 下記は「your-bucket-name」というバケットの中の、「segmentation」というサブフォルダに保存する場合です。 aws s3 cp ~/train s3://your-bucket-name/segmentation --recursive aws s3 cp ~/train_annotation s3://your-bucket-name/segmentation --recursive SageMakerを立ち上げる ノートブックインスタンス→ノートブックインスタンスの作成。 ノートブックインスタンス名を書いて(sagemaker-semanticsegmentationとか)、残りはデフォルトのままでインスタンス作成します。 notebookでコーディング 基本的にはこちらのサイトを参考にしています。英語なので自分なりに日本語でまとめてみます。 config sagemakerをimportしてconfig設定します。 ここで[3]の部分で、semantic-segmentationと書いています。このほかビルトインの画像処理DLアルゴは、ResNetを用いた画像認識(image-classification)や、SSDベースの物体検出(object-detection)があるようです。 計算リソースとパラメータセッティング さて、次は訓練に用いる計算リソースやハイパーパラメータをセッティングします。 [6] ml.p3.2xlargeというGPUの高速リソースを選びます。詳細はAWS公式ドキュメントに記載があります。これでGPU使えるのは良いですね。しっかりお金はかかります(東京リージョンで5.242USD/h)。 [7] ハイパーパラメータのセットです。semantic-segmentationモデルを行うにあたり、学習済みモデル(backbone)を何にするか、アルゴ(algorithm)を何にするかを指定できます。エポックや学習率、optimizerなどのおなじみのパラメータもここで指定することができます。 データ置き場を設定して、学習&デプロイ! [8] データ置き場を設定します。 sagemaker.inputs.TrainingInputにS3のパスを設定します。 data_channelsは↑に記述している4つのキー(と対応するS3パス)が必須です。 このへんの詳細もAWS公式ドキュメントに記載があります。 [9] モデル学習!2時間ぐらいかかりました。1000円以上しました。メシ抜きです。 [11]学習したモデルを使って予測/推論できるようにするために、Sagemakerのエンドポイントにデプロイします!これでLambdaから呼び出したりできるってことですね。デプロイに使うインスタンスは学習時と同じである必要はなくて、推論の時はもっとローコストなインスタンスでも良いです。ということでここではml.m4.xlargeを選びました。 これでモデルの作成ができました!推論はせっかくなのでLambda上でやってみようと思います。 エンドポイントお片付け デプロイされたエンドポイントはInServiceのあいだ課金され続けます。なので終わったらお片付けが必要です。 これはGUIで簡単にできます。 上記の画面で、「アクション▼」→「削除」で削除することができます。 「え、せっかくモデル作ったのに!!」という場合も、後から簡単にエンドポイント作成できます。 その場合は、「エンドポイント」→「エンドポイントの作成」で楽ちんです。 まとめ 今回はSagemakerを用いてセマンティックセグメンテーションのモデル学習を試してみました。 画像だけでなくseq2seqなどの自然言語処理のビルトインモデルもあったり、マーケットプレイスでモデル購入したりして簡単にモデル学習/使用を試すことができます。 AWS上のいろんなサービスと連携できるので、ひとまずLambdaで呼び出して試してみようと思います。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む