ヤマムギ vol.9 (AWS)EC2からAWS CLIコマンドを実行してみようハンズオン 手順
このブログは2020/5/5に開催しました、「ヤマムギ vol.9 (AWS)EC2からAWS CLIコマンドを実行してみようハンズオン」の手順です。
「AWSではじめるLinux入門ガイド」出版 & 「AWS認定資格試験テキスト AWS認定 クラウドプラクティショナー」出版一周年記念勉強会を開催しました。
解説は、勉強会内で説明しますので、こちらのブログには手順のみを記載します。
※個人の検証アカウントとしての設定です。
目次
検証環境
デフォルトVPCのEC2にSystemsManager セッションマネージャーから接続します。
EC2からAWS CLIコマンドで、S3、EC2の操作を試します。
AWSアカウントをお持ちでない方は、「ヤマムギ vol.7 AWSアカウント作成 & 最初の設定ハンズオン 手順」をご参考の上、作成してください。
検証用のEC2インスタンスは「ヤマムギ vol.8 (AWS)EC2でLinuxサーバー構築 手順」をご参考の上、作成してください。
デフォルトリージョン設定
セッションマネージャで操作をします。
1). デフォルトリージョンを設定します。
aws configure コマンドを実行します。
1 2 3 4 5 6 |
$ aws configure AWS Access Key ID [None]: AWS Secret Access Key [None]: Default region name [None]: ap-northeast-1 Default output format [None]: json |
ap-northeast-1 は、東京リージョンのコードです。
各リージョンのコードは利用できるリージョンで確認できます。
output formatは、json, text, tableが設定できます。
2). configファイルを確認しましょう。
1 2 3 4 5 6 |
$ cd $ cat .aws/config [default] output = json region = ap-northeast-1 |
.aws/configファイルにoutputとregionが設定されていることが確認できます。
S3を操作してみよう
3). 新規バケットをs3 mb コマンドで作成してみます。
1 2 3 |
$ aws s3 mb s3://bucketname make_bucket failed: s3://bucketname An error occurred (AccessDenied) when calling the CreateBucket operation: Access Denied |
※ bucketname は世界で一意になるように変更してください。
今、EC2のIAMロールには、SystemsManagerで管理するためだけの権限しかありません。
ですので、s3 mbコマンドでバケットを新規作成することはできません。
4). S3バケットを作成するために、EC2に設定しているIAMロールにポリシーを追加します。
マネジメントコンソールで操作します。
EC2のIAMロールに以下のポリシーをインラインポリシーとして追加します。
1 2 3 4 5 6 7 8 9 10 11 |
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:CreateBucket", "Resource": "*" } ] } |
5). もう一度新規バケット作成を試します。
1 2 3 |
$ aws s3 mb s3://bucketname make_bucket: bucketname |
※ bucketname は世界で一意になるように変更してください。
マネジメントコンソールで確認すると、バケットが作成できていることが確認できます。
6). IAMロールのインラインポリシーを編集しましょう。
以下にします。
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 |
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:ListAllMyBuckets", "s3:CreateBucket" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObjectAcl", "s3:GetObject", "s3:ListBucket", "s3:DeleteObject", "s3:DeleteBucket", "s3:PutObjectAcl" ], "Resource": [ "arn:aws:s3:::bucketname", "arn:aws:s3:::bucketname/*" ] } ] } |
※bucketnameはそれぞれのバケット名に置き換えてください。
7). バケットの一覧
1 2 |
$ aws s3 ls |
8). オブジェクトのアップロード
1 2 3 4 |
$ echo Hello > hello.html $ aws s3 cp hello.html s3://bucketname/hello.html upload: ./hello.html to s3://bucketname/hello.html |
※bucketnameはそれぞれのバケット名に置き換えてください。
アップロードされました。
オブジェクト名をクリックして、[オブジェクトURL]をクリックしてみてください。
ブラウザに「AccessDenied」と表示されてアクセスが拒否されることが確認できます。
9). アクセスコントロールリストを確認
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
$ aws s3api get-object-acl --bucket bucketname --key hello.html { "Owner": { "DisplayName": "accountname", "ID": "xxxxxxxxxxxxxxxxxxxxxxxxxxx" }, "Grants": [ { "Grantee": { "Type": "CanonicalUser", "DisplayName": "accountname", "ID": "xxxxxxxxxxxxxxxxx" }, "Permission": "FULL_CONTROL" } ] } |
アカウントにしかアクセス権限がないことがわかりました。
マネジメントコンソールでオブジェクトの[アクセス権限]タブを確認しても、Everyoneに権限がないことがわかります。
10). アクセスコントロールリストの設定
1 2 |
$ aws s3api put-object-acl --acl public-read --bucket bucketname --key hello.html |
もう一度確認します。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$ aws s3api get-object-acl --bucket yamashita-20200503 --key hello.html { ~省略~ { "Grantee": { "Type": "Group", "URI": "http://acs.amazonaws.com/groups/global/AllUsers" }, "Permission": "READ" } ] } |
AllUsersに対してのREAD権限が追加されました。
マネジメントコンソールアクセスコントロールリストでもEveryoneに読み取り許可がされました。
オブジェクト名をクリックして、[オブジェクトURL]をクリックしてみてください。
ブラウザに Hello という文字が表示されます。
11). オブジェクト一覧の表示
1 2 |
$ aws s3 ls s3://bucketname |
バケット内のオブジェクトの一覧が表示されます。
12). オブジェクトの削除
1 2 3 |
$ aws s3 rm s3://bucketname/hello.html delete: s3://bucketname/hello.html |
13). バケットの削除
1 2 3 |
$ aws s3 rb s3://bucketname remove_bucket: bucketname |
EC2を操作してみよう
14). EC2インスタンスを操作するために以下にインラインポリシーをIAMロールに追加
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:DescribeInstances", "ec2:TerminateInstances", "ec2:RunInstances" ], "Resource": "*" } ] } |
15). EC2インスタンスの起動
1 2 |
$ aws ec2 run-instances --image-id ami-0f310fced6141e627 --instance-type t2.micro |
EC2インスタンスを起動するときにAMIが必須のパラメータです。
ただし、そのAMIがサポートしているインスタンスタイプを指定する必要もありますし、アカウントを作成して12ヶ月無料利用枠のt2.microを指定するために、instance-typeパラメータも指定しています。
他のパラメータは自動設定されます。
マネジメントコンソールでもEC2インスタンスが起動していることを確認してみてください。
16). EC2インスタンスを確認
1 2 |
$ aws ec2 describe-instances |
1 2 |
$ aws ec2 describe-instances --output=table --query 'Reservations[].Instances[].{InstanceId: InstanceId, PrivateIp: join(`, `, NetworkInterfaces[].PrivateIpAddress), GlobalIP: join(`, `, NetworkInterfaces[].Association.PublicIp), Platform:Platform, State: State.Name, SecurityGroupId: join(`, `, SecurityGroups[].GroupId) ,Name: Tags[?Key==`Name`].Value|[0]}' |
17). EC2インスタンスを終了
1 2 |
$ aws ec2 terminate-instances --instance-ids xxxxxxxxxxxxxxx |
実行したらすぐにマネジメントコンソールで確認してみましょう。
ステータスがshutting-downになって、teminatedになることが確認できます。
いろいろやってみよう
AWS CLI リファレンスでサービスを探して、やってみたいコマンドにチャレンジしてみましょう。
サービスによっては課金に注意しましょう。
(オプション) AWS CLIバージョン2にアップグレード
AWS CLIにはバージョン1と2があります。
2020年5月4日時点でのAmazon Linux 2 はAWS CLIはバージョン1です。
1 2 3 |
$ aws --version aws-cli/1.16.300 Python/2.7.16 Linux/4.14.173-137.229.amzn2.x86_64 botocore/1.13.36 |
Linux での AWS CLI バージョン 2 のインストールの手順に従い、v1をアンインストールして2をインストールします。
1 2 3 |
$ which aws /usr/bin/aws |
1 2 3 |
$ sudo rm /usr/bin/aws $ sudo rm /usr/bin/aws_completer |
1 2 3 4 5 |
$ cd $ curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" $ unzip awscliv2.zip $ sudo ./aws/install |
1 2 3 |
$ aws --version aws-cli/2.0.10 Python/3.7.3 Linux/4.14.173-137.229.amzn2.x86_64 botocore/2.0.0dev14 |
v1との共存ではなく、アップグレードできました。
最後までお読みいただきましてありがとうございました!
「AWS認定資格試験テキスト&問題集 AWS認定ソリューションアーキテクト - プロフェッショナル 改訂第2版」という本を書きました。
「AWS認定資格試験テキスト AWS認定クラウドプラクティショナー 改訂第3版」という本を書きました。
「ポケットスタディ AWS認定 デベロッパーアソシエイト [DVA-C02対応] 」という本を書きました。
「要点整理から攻略するAWS認定ソリューションアーキテクト-アソシエイト」という本を書きました。
「AWSではじめるLinux入門ガイド」という本を書きました。
開発ベンダー5年、ユーザ企業システム部門通算9年、ITインストラクター5年目でプロトタイプビルダーもやりだしたSoftware Engineerです。
質問はコメントかSNSなどからお気軽にどうぞ。
出来る限りなるべく答えます。
このブログの内容/発言の一切は個人の見解であり、所属する組織とは関係ありません。
このブログは経験したことなどの共有を目的としており、手順や結果などを保証するものではありません。
ご参考にされる際は、読者様自身のご判断にてご対応をお願いいたします。
また、勉強会やイベントのレポートは自分が気になったことをメモしたり、聞いて思ったことを書いていますので、登壇者の意見や発表内容ではありません。
ad
ad
関連記事
-
API GatewayのアクセスログをCloudWatchに記録する
Amazon API GatewayのアクセスログをCloudWatchに記録で …
-
AWS CloudShellでboto3(SDK for Python)使うならpython3
本の執筆をしていて、ちょっとAWS CLIやSDKのふるまいを確認したいことがあ …
-
Amazon Elasticsearch ServiceにMySQLのデータを投入してkibanaで可視化してみる
MySQLのデータの可視化にAmazon Elasticsearch Servi …
-
AWSのサービス数を数えてみました(2020/5/23)
何をもってサービスという単位にするかというのはあるかもしれませんが、とりあえず情 …
-
AWS Snowファミリーのジョブ作成画面を確認
使わないのですが、画面を見ておきたかったので確認しました。 Snowファミリージ …
-
AWS LambdaのSQSへの自前ポーリングをやめてSQSイベントソーストリガーに変更した
以前は、LambdaがSQSからメッセージを受信するには、キューをポーリングして …
-
「IBM Cloud Community Summit 2018 フルマネージドデータベースというのは使えるのか?IBM Cloudでのデータ活用事例いろいろ」でIBm Cloudのデータベースサービスを聞かせていただいた
IBM Cloud Community Summit 2018におじゃましました …
-
「Serverless Days Tokyo 2023 重厚長大な企業の内製開発組織で成果を出すためのサーバーレスアーキテクチャ」を見ました
2023/9/23にServerless Days Tokyo 2023に参加し …
-
PyCharmにAWS CloudFormationプラグインをインストールして入力補完してみる
JetBrainsのPython統合開発環境(IDE)のPyCharmを1年ちょ …
-
「AWS re:Invent報告会 by Yappli」で機械学習を始めてみようという気になった
YappliさんとSpeeeさん合同のre:Invent報告会におじゃましました …