かべぎわブログ

ブログです

CodePipelineでGitHub上のコードをS3にデプロイする

概要

CodePipelineを利用してGitHub上のコードをS3にデプロイしてみたいと思います。

やりたいことはだいたい以下のようなかんじ。
f:id:kabegiwakun:20190215132001p:plain

手順

こんなかんじでできます。

マネジメントコンソールのCodePipelineから「パイプラインの作成」を選択します。
f:id:kabegiwakun:20190216161541p:plain

適当にパイプライン名をつけてあげて「次へ」を選択します。 f:id:kabegiwakun:20190216161713p:plain

ソースプロバイダをGitHubにし、「GitHubに接続」します。
f:id:kabegiwakun:20190216161925p:plain

新たにウインドウが立ち上がるので「Authorize aws-codesuite」を選択してAWSとGitHubを接続してあげます。

f:id:kabegiwakun:20190216162101p:plain

デプロイしたいリポジトリとブランチをえらんで「次へ」を選択します。
f:id:kabegiwakun:20190216162253p:plain

今回はビルドは行わないのでスキップします。
「ビルドステージのスキップ」を選択します。スキップしますか?みたいな確認メッセージが出ますが、かまわずスキップします。
f:id:kabegiwakun:20190216162356p:plain

デプロイプロバイダにS3を選択し、デプロイしたいバケットを選びます。
また、「デプロイする前にファイルを展開する」にチェックを入れておきます。これにチェックをしておかないと、リポジトリの中身がzip圧縮されてS3にデプロイされます。
えらんだら「次へ」を選択します。
f:id:kabegiwakun:20190216162623p:plain

内容に間違いがないことを確認して「パイプラインを作成」します。
f:id:kabegiwakun:20190216162832p:plain

作成が完了すると自動でデプロイが開始されます。
GitHubからS3にデプロイが行われたようです。
以後、このリポジトリにPushされるたびに自動でS3にデプロイしてくれます。
f:id:kabegiwakun:20190216163325p:plain

S3を見に行くと、デプロイされていることがわかります。
f:id:kabegiwakun:20190216163516p:plain

ちなみにつかったリポジトリはこれ。

GitHub - takakabe/blog_python

おわりに

べんりよねー

DevOps導入指南 Infrastructure as Codeでチーム開発・サービス運用を効率化する (DEV Engineer’s Books)

DevOps導入指南 Infrastructure as Codeでチーム開発・サービス運用を効率化する (DEV Engineer’s Books)

  • 作者: 河村聖悟,北野太郎,中山貴尋,日下部貴章,株式会社リクルートテクノロジーズ
  • 出版社/メーカー: 翔泳社
  • 発売日: 2016/10/14
  • メディア: 単行本(ソフトカバー)
  • この商品を含むブログを見る

CloudFormationでIAMロールアタッチしたEC2インスタンスを作成する

概要

CloudFormationを利用してIAMロールをアタッチした状態のEC2インスタンスを構築してみたいと思います。

template

CloudFormationのテンプレートはこんなかんじ。

ちょっとした説明

マネジメントコンソールをポチポチしているとなにも意識しませんが、EC2インスタンスに紐付けられるのはIAMロールではなく、インスタンスプロファイルです。

おわりに

たまにハマる。

徹底攻略 AWS認定 ソリューションアーキテクト ? アソシエイト教科書

徹底攻略 AWS認定 ソリューションアーキテクト ? アソシエイト教科書

  • 作者: ??部昭寛,宮?光平,菖蒲淳司,株式会社ソキウス・ジャパン
  • 出版社/メーカー: インプレス
  • 発売日: 2019/01/18
  • メディア: 単行本(ソフトカバー)
  • この商品を含むブログを見る

Cannot delete entity, must detach all policies firstの対処法

CloudFormation Stackを削除しようと思ったらこんなかんじのエラーがでてスタックが削除されなくなった。(DELETE_FAILEDになった)

のでその対処法です。

Cannot delete entity, must detach all policies first. (Service: AmazonIdentityManagement; Status Code: 409; Error Code: DeleteConflict; Request ID: d1eaf41d-2aa)

原因

CloudFormationのIAMロールの内容と、実際のIAMロールの内容がちがうときにこのエラーがでます。

CloudFormationで作成したあとにマネジメントコンソールで新たにIAMポリシーをアタッチするとか。

対処法

手作業で追加したであろうポリシーをマネジメントコンソールかなにかでデタッチしてあげる。
そうすればOK!!!!!!

おわりに

書いてあることそのままだけどね。

徹底攻略 AWS認定 ソリューションアーキテクト ? アソシエイト教科書

徹底攻略 AWS認定 ソリューションアーキテクト ? アソシエイト教科書

  • 作者: ??部昭寛,宮?光平,菖蒲淳司,株式会社ソキウス・ジャパン
  • 出版社/メーカー: インプレス
  • 発売日: 2019/01/18
  • メディア: 単行本(ソフトカバー)
  • この商品を含むブログを見る

Ansibleでgoofysをインストールする

概要

AnsibleでgoofysをインストールするPlaybookを書いた。

playbook

こんなかんじ。

おわりに

epel-releaseとfuse,golangを分けたのはなんかそうしないとうまくいかなかったんだよね。

Ansible実践ガイド 第2版 (impress top gear)

Ansible実践ガイド 第2版 (impress top gear)

CentOS7にgoofysをインストールしてS3をマウントしてみる

概要

CentOS7にS3をマウントできるツールであるgoofysをインストールして、S3バケットをマウントしてみたいと思います。

インストール手順

epelリポジトリを追加する

$ sudo yum install epel-release

fuseをインストールする

$ sudo yum install fuse

goをインストールする

$ sudo yum install golang

GitHubからgoofysをもってくる
(ちょっとじかんかかります)

$ go get github.com/kahing/goofys

goofysをインストールする
(ちょっとじかんかかります)

$ go install github.com/kahing/goofys

無事にgoofysがインストールできました!

$ ls -l ~/go/bin/goofys 
-rwxrwxr-x. 1 vagrant vagrant 15201906 Feb  5 12:00 /home/vagrant/go/bin/goofys

goofysでS3をマウントする

マウントする場所用にディレクトリをつくります。

$ mkdir kabegiwa-bucket

goofysでS3バケットをマウントします。
goofys バケット名 マウント先です。

$ ~/go/bin/goofys kabegiwa-bucket ./kabegiwa-bucket/

無事にマウントできました!!!

$ df -h | grep kabegiwa
kabegiwa-bucket  1.0P     0  1.0P   0% /home/vagrant/kabegiwa-bucket

バケットの中身をいじることもできます

$ ls -l kabegiwa-bucket/
total 1
-rw-r--r--. 1 vagrant vagrant 6 Feb  5 11:53 wawawa.txt

おわりに

べんりだよね。

徹底攻略 AWS認定 ソリューションアーキテクト ? アソシエイト教科書

徹底攻略 AWS認定 ソリューションアーキテクト ? アソシエイト教科書

  • 作者: ??部昭寛,宮?光平,菖蒲淳司,株式会社ソキウス・ジャパン
  • 出版社/メーカー: インプレス
  • 発売日: 2019/01/18
  • メディア: 単行本(ソフトカバー)
  • この商品を含むブログを見る

CloudFormationでセキュリティグループとそれをアタッチしたインスタンスをつくる

こんなかんじでつくれます。

セキュリティグループの指定のところで!RefをつかってあげるとそのリソースID(sg-xxxxxxみたいなやつ)がわたされます。

徹底攻略 AWS認定 ソリューションアーキテクト ? アソシエイト教科書

徹底攻略 AWS認定 ソリューションアーキテクト ? アソシエイト教科書

  • 作者: ??部昭寛,宮?光平,菖蒲淳司,株式会社ソキウス・ジャパン
  • 出版社/メーカー: インプレス
  • 発売日: 2019/01/18
  • メディア: 単行本(ソフトカバー)
  • この商品を含むブログを見る

CloudFormationでセキュリティグループをつくる

こんなかんじでつくれる。

SecurityGroupIngressがインバウンドでSecurityGroupEgressがアウトバウンド

徹底攻略 AWS認定 ソリューションアーキテクト ? アソシエイト教科書

徹底攻略 AWS認定 ソリューションアーキテクト ? アソシエイト教科書

  • 作者: ??部昭寛,宮?光平,菖蒲淳司,株式会社ソキウス・ジャパン
  • 出版社/メーカー: インプレス
  • 発売日: 2019/01/18
  • メディア: 単行本(ソフトカバー)
  • この商品を含むブログを見る

AWSCLIとCloudtrailでインスタンスを停止した犯人をさがす

概要

AWSCLIでCloudtrailを操作してインスタンスを停止した犯人をコマンド一発でさがしだしてみたいとおもいます。

コマンド

コマンドはこんなかんじ。

$ aws cloudtrail lookup-events --start-time 2019-01-23T17:00:02+0900 --end-time 2019-01-24T17:1
1:02+0900 --query 'Events[?EventName==`StopInstances`].{user:Username,event:EventName}'

--start-time--end-timeにさがす時間帯をいれてあげます。
結構時間がかかるので時間帯はしぼったほうがいいです。

EventNameをさがしたいイベントにかえてあげるとインスタンスを停止した犯人の他にも、削除したひとをさがしだすこともできます。

ちなみに

こんなかんじのコマンドで--start-time--end-timeに利用できるフォーマットで時間帯を取得することができます。

$ date -Iseconds --date '1days ago'
2019-01-28T07:02:32+09:00

おわりに

罪を憎んで人を憎まず

徹底攻略 AWS認定 ソリューションアーキテクト ? アソシエイト教科書

徹底攻略 AWS認定 ソリューションアーキテクト ? アソシエイト教科書

  • 作者: ??部昭寛,宮?光平,菖蒲淳司,株式会社ソキウス・ジャパン
  • 出版社/メーカー: インプレス
  • 発売日: 2019/01/18
  • メディア: 単行本(ソフトカバー)
  • この商品を含むブログを見る

AWSCLIでキーペアを作成する

概要

AWSCLIを利用してキーペアを作成してみます。

環境

  • Amazon Linux2
  • キーペアをつくれる権限のIAMロールがアタッチされている

手順

キーペアをつくれる権限のIAMロールがアタッチされているAmazonLinux2で以下のコマンドを実行します。
wawawa_keyの部分は適当に変えてあげてください。

$ aws ec2 create-key-pair --key-name wawawa_key --query 'KeyMaterial' --output text > ~/.ssh/wawawa_key.pem

キーができました。

$ cat ~/.ssh/wawawa_key.pem
-----BEGIN RSA PRIVATE KEY-----
MIIEogIBAAKCAQEAjRFTwhosQclZNVif2u0rFvk2IIidsDcLHRTDyQZaZcAhwMTFNxqDBo50vWWz
bnklpIC4M6jESwvIFhmd8CuVKYG/qyQJ2AfETXLHkm+AQjZN/iFxiuQSWGczRxe8HBt2ZB906McQ
cuEewjAtXVHNCJ6YuCFiVzhOQsnVpwRTy3y/5dFfyPZJMlumK+z/rjqFqLojU3OoSPdvxNnhqzMt
VvQ39Dnjiu7zNeVkeapsSBnsoJkWdrPUckjCStkjtlmGuPkCPwSuY53hderZlbnmmJ07duCshAcz
~~~省略~~~
-----END RSA PRIVATE KEY-----

マネジメントコンソールにも登録されています。
f:id:kabegiwakun:20190112101244p:plain

このLinux上からキーとして利用するために権限を変えてあげます。

$ sudo chmod 600 ~/.ssh/wawawa_key.pem

これでキーペアの作成は完了です。
こんなかんじでssh接続する際に利用することができます。

$ ssh -i ~/.ssh/wawawa_key.pem ec2-user@192.168.1.xxx



徹底攻略 AWS認定 ソリューションアーキテクト ? アソシエイト教科書

徹底攻略 AWS認定 ソリューションアーキテクト ? アソシエイト教科書

  • 作者: ??部昭寛,宮?光平,菖蒲淳司,株式会社ソキウス・ジャパン
  • 出版社/メーカー: インプレス
  • 発売日: 2019/01/18
  • メディア: 単行本(ソフトカバー)
  • この商品を含むブログを見る

WSLのUbuntuにAWSCLIをインストールする

概要

Windows Subsystem for Linux上のUbuntuにAWSCLIをインストールしてみたいと思います。

手順

こんなかんじでやるとインストールできます。

pipをインストールする

curlでpipをもってきて

$ curl -O https://bootstrap.pypa.io/get-pip.py

実行する

$ python get-pip.py --user

.bash_profileにpipインストール場所のPATHを追加して

$ echo 'export PATH=~/.local/bin:$PATH' >> ~/.bash_profile

再読込させる

$ source ~/.bash_profile


AWSCLIをインストールする

pip install でAWCLIをインストールします。

$ pip install awscli --upgrade --user

無事にインストールできました!!!!!

$ aws --version
aws-cli/1.16.85 Python/2.7.15rc1 Linux/4.4.0-17134-Microsoft botocore/1.12.75



徹底攻略 AWS認定 ソリューションアーキテクト ? アソシエイト教科書

徹底攻略 AWS認定 ソリューションアーキテクト ? アソシエイト教科書

  • 作者: ??部昭寛,宮?光平,菖蒲淳司,株式会社ソキウス・ジャパン
  • 出版社/メーカー: インプレス
  • 発売日: 2019/01/18
  • メディア: 単行本(ソフトカバー)
  • この商品を含むブログを見る

AWSCLIでcloudtrailを利用してインスタンスになにがあったのかを調べる

概要

AWSCLIとcloudtrailを利用して特定のインスタンスになにがあったのかを調べてみたいと思います。

だれかが雑にインスタンスを停止してしまって誰が止めたんだ!!!!みたいな犯人探しのときにつかえます(遠い目)

コマンド例

コマンドは以下のとおり。
AttributeValueのところは調べたいインスタンスIDをいれてあげます。

$ aws cloudtrail lookup-events --lookup-attributes AttributeKey=ResourceName,AttributeValue=i-XXXXXXXXXXXX --query 'Events[].{username:Username,time:EventTime,event:EventName}'

[
    {
        "username": "kabegiwa", 
        "event": "StopInstances", 
        "time": 1530802833.0
    }, 
    {
        "username": "kabegiwa", 
        "event": "StartInstances", 
        "time": 1530801178.0
    }
]

timeの箇所はUNIXTIMEです。
若干わかりにくい。

おわりに

遠い目

AWS Security Automation and Orchestration: Modernizing Governance through Security Design

AWS Security Automation and Orchestration: Modernizing Governance through Security Design

AWSCLIでS3バケットを削除する

概要

AWSCLIをつかってS3バケット自体を削除してみようと思います。

削除する

以下のコマンドで削除することができます。

$ aws s3api delete-bucket --bucket wawawa-dst

ちなみに

バケットの中にオブジェクトが残っている場合 以下のようにエラーが出ます。

$ aws s3api delete-bucket --bucket wawawa-dst

An error occurred (BucketNotEmpty) when calling the DeleteBucket operation: The bucket you tried to delete is not empty

その場合は以下のコマンドで全部のオブジェクトを削除してから、バケットを削除します。

$ aws s3 rm --recursive s3://wawawa-dst
delete: s3://wawawa-dst/wawawa_dir/test.txt
delete: s3://wawawa-dst/sasasa.txt

おわりに

誤爆したらしぬ

Amazon Web Services パターン別構築・運用ガイド 改訂第2版 (Informatics&IDEA)

Amazon Web Services パターン別構築・運用ガイド 改訂第2版 (Informatics&IDEA)

同じリージョンのS3同士を同期させる

概要

同じリージョンにあるS3バケットを同期させてみようと思います。

同期させる方法

AWSCLIをつかいます。
以下のようにすることでS3バケット2つを同期させることができます。

$ aws s3 sync s3://wawawa-src s3://wawawa-dst

実際にやってみる

実際にやってみます。

前提としてバケットの中身は以下のような感じだとします。

$ aws s3 ls --recursive s3://wawawa-src/
2018-10-02 03:31:37         20 sasasa.txt
2018-10-02 03:30:29          0 wawawa_dir/
2018-10-02 03:31:10         20 wawawa_dir/test.txt
$ aws s3 ls --recursive s3://wawawa-dst/
$ 


aws syncコマンドで同期させます。

$ aws s3 sync s3://wawawa-src s3://wawawa-dst
copy: s3://wawawa-src/wawawa_dir/test.txt to s3://wawawa-dst/wawawa_dir/test.txt
copy: s3://wawawa-src/sasasa.txt to s3://wawawa-dst/sasasa.txt    

同期できました!!!

$ aws s3 ls --recursive s3://wawawa-src/
2018-10-02 03:31:37         20 sasasa.txt
2018-10-02 03:30:29          0 wawawa_dir/
2018-10-02 03:31:10         20 wawawa_dir/test.txt
$ aws s3 ls --recursive s3://wawawa-dst/
2018-10-02 03:35:59         20 sasasa.txt
2018-10-02 03:35:59         20 wawawa_dir/test.txt

おわりに

これを定期的にcronで動かすとかするとゆるーい同期が実現できる。

Amazon Web Services パターン別構築・運用ガイド 改訂第2版 (Informatics&IDEA)

Amazon Web Services パターン別構築・運用ガイド 改訂第2版 (Informatics&IDEA)

複数のEC2インスタンスに一気にIAMロールをつけるシェルスクリプト

概要

複数のEC2インスタンスに一気にIAMロールを付ける必要があって、マネコンでポチポチするのめんどくさいなーと思ったのでつくった。

スクリプト

つかいかた

./role_fukusuu.sh IAMロール名 インスタンスID インスタンスID...

$ ./role_fukusuu.sh wawawa_role i-070c13018a4405xxx i-098ebad2dee1c5yyy

Amazon Web Services パターン別構築・運用ガイド 改訂第2版 (Informatics&IDEA)

Amazon Web Services パターン別構築・運用ガイド 改訂第2版 (Informatics&IDEA)

シェルスクリプトで複数インスタンスに一気にタグをつける

概要

シェルスクリプトとAWSCLIを利用して複数のインスタンスに一気にタグを付けてみたいと思います。

スクリプト

こんなかんじでやってます。
肝心のAWSCLI実行部がJSONのなかに変数をしこむために地獄の様相を呈していますけれど仕方がなかった。

実行してみる

実際に実行してみます。
./tag_fukusuu.sh つけたいタグのKey つけたいタグのValue インスタンスID ... といったかんじで実行してあげます。
インスタンスIDはいくつでもならべることができます。

$ ./tag_fukusuu.sh tes wawawa i-070c13018a4405fca i-098ebad2dee1c58d1

無事にタグをつけることができました!

$ aws ec2 describe-instances --query 'Reservations[].Instances[].{instanceid:InstanceId,Tags:Tags[?Key==`tes`].Value|[0]}' --instance-ids i-098ebad2dee1c58d1  i-070c13018a4405fca
[
    {
        "instanceid": "i-070c13018a4405fca", 
        "Tags": "wawawa"
    }, 
    {
        "instanceid": "i-098ebad2dee1c58d1", 
        "Tags": "wawawa"
    }
]

おわりに

タグをいっきにつけたいときにべんり

Amazon Web Services パターン別構築・運用ガイド 改訂第2版 (Informatics&IDEA)

Amazon Web Services パターン別構築・運用ガイド 改訂第2版 (Informatics&IDEA)

  • 作者: NRIネットコム株式会社,佐々木拓郎,林晋一郎,小西秀和,佐藤瞬
  • 出版社/メーカー: SBクリエイティブ
  • 発売日: 2018/03/23
  • メディア: 単行本
  • この商品を含むブログを見る