AWS OpsWorkとは?

AWS OpsWorkとは?
 Chef(Rubyで記述)やPuppet(manufestで記述)のマネージド型インスタンスを利用できるようになる構成管理サービス
 Cloudformationと異なり、アプリケーション周りのリソースに限られる

Add Stackで始めてみます。

IAMでopsworksのfullaccessの権限を付与したroleを作成し、add stackとする。

My Sample Stackが出来ているのがわかる。
Statusがstopedなので、startをrequestする。
なるほど、簡易化されているのか…
これも何となくわかったわ

AWS Elastic Beanstalkとは?

リソース配置、アプリケーション導入、バージョン管理、負荷分散など迅速にデプロイの実行と管理をまとめて行うサービス
プロビジョニング、AutoScaling, 状態モニタリングなどの作業を自動で行う
Elastic Benstalkはサーバ構築の設定を自動でやるサービス

とりあえず触ってみましょう

PlatformはPHPとして、branchはPHP 8.0 running on 64bit Amazonlinux 2にします。
そうすると、securitygroupの設定など、後は自動で設定してくれる

なんかErrorが出まくってるけど…

まあ やりたいことはわかった

AWS CodePipelineとは?

コードソフトウェアの構築、テスト、でプライを自動化し、ci/cdをサポートする継続デリバリーサービス
パイプラインは複数のステージで構成されており、UIから手動で行うか、Cloudformationでstackを定義して行う

### 用語の定義
ステージ: 処理を実行する環境の単位
アクション: 実際に行われる処理の単位 source, build, test, deploy, approval

まずpipelineを作っていきます。

build stateでaws code buildを選択する
pipelineができる

git pushするとprogressになる。

なるほど、CIをAWSがやるのね。
何となく、イメージは掴めた。

AWS CodeCommitとは?

CodeCommitとはAWSにあるバージョン管理システム

userに「AWSCodeCommitPowerUser」のpermissionを付与します。
userのsecurity credentialで、「HTTPS Git credentials for AWS CodeCommit」でuser nameとpasswordをgetします。

$ git init
Initialized empty Git repository in /home/vagrant/dev/app/.git/
$ git add .
$ git commit -m “first commit”
[master (root-commit) 2f0e85b] first commit
1 file changed, 11 insertions(+)
create mode 100644 index.html
$ git remote add origin https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/hpscript
$ git push -u origin master

なるほど、レポジトリね。
git hubの方が使いやすそうだが…
まー吉としましょう。

Kinesis Firehouseとは

AWS Kinesis Firehouseとは?
ストリームデータをS3やRedshiftに送るサービス

import boto3
import uuid
import json

accesskey = "*"
secretkey = "*"
region = "ap-northeast-1"

  
client = boto3.client('firehose', aws_access_key_id=accesskey, aws_secret_access_key= secretkey, region_name=region)
data = {
	"musicID": 'xxxxxxxxxx',
	"userId": 1,
	"artistId": 1
}

response = client.put_record(
	DeliveryStreamName = "PUT-S3-UNJQf",
	Record = {
		'Data': f'{json.dumps(data)}\n'
	}
)
{
            "Effect": "Allow",
            "Action": [
                "firehose:PutRecord",
                "firehose:PutRecordBatch"
            ],
            "Resource": [
                "arn:aws:firehose:ap-northeast-1:*:deliverystream/PUT-S3-UNJQf"
            ]
        },
        {

raise error_class(parsed_response, operation_name)
botocore.exceptions.ClientError: An error occurred (AccessDeniedException) when calling the PutRecord operation: User: arn:aws:iam::702423327513:user/kinesis is not authorized to perform: firehose:PutRecord on resource: arn:aws:firehose:ap-northeast-1:*:deliverystream/PUT-S3-UNJQf because no identity-based policy allows the firehose:PutRecord action

うむー なんかよくわからんが、どういうことができるかは何となく理解したかも

AWS WAFを使っていく

WAFはWeb Application Firewallの略でWebアプリケーションを保護するためのソリューション
ALB, CloudFront, API Gatewayに割り当てて利用する
リソースにWebACLを割り当てたら、WebACLにルールを登録する
番号が小さい順に評価される
– IP制限
– レートベース(同一IPからの接続数制限)
– 脆弱性に関するルール
– 悪意あるhttpリクエスト

WAF template
L DLします
https://aws.amazon.com/jp/about-aws/whats-new/2017/07/use-aws-waf-to-mitigate-owasps-top-10-web-application-vulnerabilities/

iamでAdministratorAccessを付与したロールを作成します。
cloudformationで先ほどDLしたowasp_10_base.ymlをuploadしてstackを作成します。
その際に、iam roleでcloudformation_roleを付与します。

これでWAFのWebACLsに作られているはずなのだが、、、、
なんとなくわかったようなわかってないような…

AWS CIDR

CIDR(Classless Inter-Domain Routing)
CIDRはIPアドレスの範囲で、172.10.0.0〜172.10.255.255と書くと面倒なので、172.10.0.0/16と書く
この”/16″というのは左の”16ビット固定” という意味
“172.10.0.4/32” は、32ビット(全部固定)という意味
RFC1918とは、プライベートIPアドレスについて記載したRFC文章

RFC1918の範囲
– クラスA(大規模ネットワーク): 10.0.0.0 ~ 10.255.255.255
– クラスB(大規模ネットワーク): 172.16.0.0 ~ 172.31.255.255
– クラスC(大規模ネットワーク): 192.168.0.0 ~ 192.168.255.255

予約されている5つのアドレス
10.0.0.0 ネットワークアドレス
10.0.0.1 VPCルータ
10.0.0.2 Amazonが提供するDNS
10.0.0.3 AWSで予約されているアドレス
10.0.0.255 ブロードキャストアドレス

そーゆーことか、めちゃくちゃ勉強になった

AWS Session Managerを使ってみよう

AWS Session Managerを使うと、SSHを使わずにEC2に接続できる

### Session Managerの使い方
IAM -> Roles -> Create role -> EC2
AmazonEC2RoleforSSM を選択する

Role Name: SSM
ssmはsession managerの略だと思われる。smでもよかったのにww

IAM role “SSM” で再度EC2インスタンスを作成します。

### AWS Systems Manager
Start sessionを押下すると、Target instanceが表示される

sh-4.2$ pwd
/usr/bin

うおおおおおおおおおおおお
なんだこれ

というか、最初は/usr/binがcurrentになるのね。
なかなか面白い。

AWS Global Acceleratorとは?

AWS Global AcceleratorはALB, NLB, EC2などのコンポーネントの前段に配置することで、可用性とパフォーマンスを改善してくれるネットワークサービス

既存のALBに追加したり、ALB新規作成時に追加できる

### 使ってみる
– Create accelerator
– Listenerを80 TCPに設定します
– Endpointに対象リージョンのEC2を紐付ける

Global Acceleratorを作成すると、Static IPアドレス2つとDNSが作られる。
なるほど、なんとなくイメージはわかったかも。

AWS Aurora入門

Amazon Auroraとは?
-> MySQL及びPostgreSQLに互換性を持った完全マネージド型のリレーショナルデータベース
-> MySQLの5倍、PostgreSQLの3倍のスループットを発揮
-> ストレージは10GBから最大64TBまで自動スケール

### 構成
Primary/Secondary構成とは異なり、クラスタ単位で構成される
クラスタエンドポイント、読み取りエンドポイント、カスタムエンドポイントがある

### 実際に作ってみる
– 前準備のrds-subnet-groupとrds security group作るまでに少し時間がかかった…

$ sudo yum install https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
$ rpm –import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
$ sudo yum install –enablerepo=mysql80-community mysql-community-server

$ mysql -h database-1.hoge.ap-northeast-1.rds.amazonaws.com –ssl-ca=.ssh/rds-ca-2019-root.pem -u admin -p

うおおおおおおおおおお
なんか超久しぶりだから焦りまくった…

Auroraでregional clusterとwriter instanceの違いがイマイチよくわからんが…
keep going