<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Falcon</title>
    <description>The latest articles on Forem by Falcon (@gelopfalcon).</description>
    <link>https://forem.com/gelopfalcon</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F218103%2Fc0c97afd-19b6-4fc2-9d65-2e4cde617887.jpeg</url>
      <title>Forem: Falcon</title>
      <link>https://forem.com/gelopfalcon</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/gelopfalcon"/>
    <language>en</language>
    <item>
      <title>Building Collaborative AI Agent Ecosystems: A Deep Dive into ADK, MCP &amp; A2A with Pokemon</title>
      <dc:creator>Falcon</dc:creator>
      <pubDate>Thu, 08 Jan 2026 17:31:52 +0000</pubDate>
      <link>https://forem.com/gde/building-collaborative-ai-agent-ecosystems-a-deep-dive-into-adk-mcp-a2a-with-pokemon-4ceh</link>
      <guid>https://forem.com/gde/building-collaborative-ai-agent-ecosystems-a-deep-dive-into-adk-mcp-a2a-with-pokemon-4ceh</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftopoa09it0dz6xfklaxe.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftopoa09it0dz6xfklaxe.png" alt=" " width="800" height="794"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Introduction: The Future of AI is Collaborative&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Imagine asking an AI agent about Pokémon and getting not just basic information, but comprehensive analysis comparing battle statistics, type effectiveness calculations, and fun trivia — all generated through seamless collaboration between specialized AI agents. This isn’t science fiction; it’s what we can build today using Google’s cutting-edge agent technologies.&lt;/p&gt;

&lt;p&gt;In this blog post, we’ll explore how to build a production-ready ecosystem of collaborative AI agents using three revolutionary technologies:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;ADK (Agent Development Kit)&lt;/strong&gt; — Google’s framework for building intelligent agents&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;MCP (Model Context Protocol)&lt;/strong&gt;— A standardized way to give agents external tools and capabilities&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;A2A (Agent-to-Agent)&lt;/strong&gt;— Inter-agent communication and collaboration protocol&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We’ll walk through building a complete Pokémon information system that demonstrates these concepts in action, and you’ll learn how to implement similar architectures for your own domains.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Understanding the Core Technologies&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;ADK: The Agent Development Kit&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Google’s Agent Development Kit is a comprehensive framework for building intelligent agents powered by large language models. Think of it as the “operating system” for AI agents — it handles the complex orchestration of LLM interactions, tool integration, and agent lifecycle management.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key ADK Concepts:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;python&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Basic ADK agent structure
agent = LlmAgent(
model="gemini-2.5-flash", # The LLM powering the agent
name="pokemon_agent", # Agent identifier
description="Pokemon information specialist", # What the agent does
instruction=SYSTEM_INSTRUCTION, # The agent's behavioral programming
tools=[tool1, tool2] # External capabilities
)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ADK abstracts away the complexity of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;LLM conversation management&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Tool invocation and result handling&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Agent state and memory management&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Error handling and recovery&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Performance optimization&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;MCP: The Model Context Protocol&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;The Model Context Protocol is a game-changer for AI agent capabilities. Instead of hardcoding functionality into agents, MCP allows you to create modular, reusable “tool servers” that agents can connect to dynamically.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The MCP Architecture:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Agent ←→ MCP Client ←→ HTTP/SSE ←→ MCP Server ←→ External APIs/Services
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Why MCP Matters:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Modularity&lt;/strong&gt;: Tools are separate services, not embedded code&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Reusability:&lt;/strong&gt; Multiple agents can use the same tool server&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Scalability&lt;/strong&gt;: Tool servers can be deployed independently&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Security&lt;/strong&gt;: Tools run in isolated environments with controlled access&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Example MCP Tool:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@mcp.tool()
def get_pokemon_info(pokemon_name: str):
"""Get comprehensive information about a Pokemon."""
response = httpx.get(f"https://pokeapi.co/api/v2/pokemon/{pokemon_name}")
return process_pokemon_data(response.json())
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;A2A: Agent-to-Agent Communication&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Agent-to-Agent communication enables the holy grail of AI systems: specialized agents that can collaborate to solve complex problems. Instead of building monolithic “do-everything” agents, you can create focused specialists that work together.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A2A Communication Patterns:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Direct Collaboration&lt;/strong&gt;: Agent A requests specific help from Agent B&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Intelligent Routing&lt;/strong&gt;: Master agents delegate tasks to specialists&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Collaborative Analysis&lt;/strong&gt;: Multiple agents contribute to complex queries&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# A2A in action
comparison_result = await pokemon_agent.request_analysis_from(
assistant_agent,
"Compare Charizard vs Blastoise stats"
)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  &lt;strong&gt;Architecture Deep Dive: The Pokémon Agent Ecosystem&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;This project is a comprehensive demonstration of an intelligent agent ecosystem specialized in Pokemon information, implemented using three key Google technologies:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  ADK (Agent Development Kit) — Framework for creating LLM-powered agents&lt;/li&gt;
&lt;li&gt;  MCP (Model Context Protocol) — Protocol for external tools and functionalities&lt;/li&gt;
&lt;li&gt;  A2A (Agent-to-Agent) — Communication and interoperability between agents&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Our demonstration system showcases all three technologies working together in a real-world scenario. Here’s how we’ve architected it:&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;System Components&lt;/strong&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;🌐 User Interface
↓
🎭 Master Agent (Orchestrator)
↓
🤝 A2A Communication Layer
/ \
↓ ↓
🔵 Pokemon Agent ←→ 🟡 Pokedex Assistant
↓ ↓
📡 Pokemon MCP Server 📊 Analytics MCP Server
↓ ↓
🌍 PokeAPI 🌍 PokeAPI
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  🤖 System Agents
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Pokemon Agent (&lt;code&gt;pokemon_agent/&lt;/code&gt;)
&lt;/h3&gt;

&lt;p&gt;Port: 10001&lt;br&gt;
Specialty: Basic Pokemon information&lt;/p&gt;
&lt;h3&gt;
  
  
  Features:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  ✅ Detailed individual Pokemon information&lt;/li&gt;
&lt;li&gt;  ✅ Species data and descriptions&lt;/li&gt;
&lt;li&gt;  ✅ Pokemon search and listing&lt;/li&gt;
&lt;li&gt;  ✅ A2A communication with Pokedex Assistant&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  MCP Tools:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;code&gt;get_pokemon_info(pokemon_name)&lt;/code&gt; - Complete Pokemon information&lt;/li&gt;
&lt;li&gt;  &lt;code&gt;get_pokemon_species(pokemon_name)&lt;/code&gt; - Species and evolution data&lt;/li&gt;
&lt;li&gt;  &lt;code&gt;search_pokemon(limit, offset)&lt;/code&gt; - Paginated search&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  A2A Capabilities:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  Can request comparative analysis from Pokedex Assistant&lt;/li&gt;
&lt;li&gt;  Handles analytical query delegations&lt;/li&gt;
&lt;li&gt;  Automatic collaboration for complex responses&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Pokedex Assistant (&lt;code&gt;pokedex_assistant/&lt;/code&gt;)
&lt;/h2&gt;

&lt;p&gt;Port: 10002&lt;br&gt;
Specialty: Pokemon analysis, comparisons, and team building&lt;/p&gt;
&lt;h3&gt;
  
  
  Features:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  📊 Detailed statistical comparisons&lt;/li&gt;
&lt;li&gt;  ⚔️ Type effectiveness analysis&lt;/li&gt;
&lt;li&gt;  🎯 Trivia and fun facts generation&lt;/li&gt;
&lt;li&gt;  📈 Statistical rankings&lt;/li&gt;
&lt;li&gt;  🏆 Strategic team building&lt;/li&gt;
&lt;li&gt;  🔍 Team composition analysis&lt;/li&gt;
&lt;li&gt;  ⚡ Team optimization suggestions&lt;/li&gt;
&lt;li&gt;  🎨 Type coverage calculations&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  MCP Tools:
&lt;/h3&gt;

&lt;p&gt;Analysis Tools:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;code&gt;compare_pokemon_stats(pokemon1, pokemon2)&lt;/code&gt; - Statistical comparison&lt;/li&gt;
&lt;li&gt;  &lt;code&gt;calculate_type_effectiveness(attacker_type, defender_types)&lt;/code&gt; - Type effectiveness&lt;/li&gt;
&lt;li&gt;  &lt;code&gt;generate_pokemon_trivia(pokemon_name)&lt;/code&gt; - Trivia and curiosities&lt;/li&gt;
&lt;li&gt;  &lt;code&gt;get_stat_rankings(stat_name, limit)&lt;/code&gt; - Rankings by statistic&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Team Building Tools:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;code&gt;build_pokemon_team(strategy, team_size)&lt;/code&gt; - Create strategic teams&lt;/li&gt;
&lt;li&gt;  &lt;code&gt;analyze_team_composition(pokemon_list)&lt;/code&gt; - Analyze team strengths/weaknesses&lt;/li&gt;
&lt;li&gt;  &lt;code&gt;suggest_team_improvements(current_team, strategy)&lt;/code&gt; - Optimization suggestions&lt;/li&gt;
&lt;li&gt;  &lt;code&gt;calculate_team_coverage(pokemon_list)&lt;/code&gt; - Type coverage analysis&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Team Building Strategies:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  Balanced: Well-rounded teams with good type coverage and stat distribution&lt;/li&gt;
&lt;li&gt;  Offensive: High-damage teams focused on overwhelming opponents&lt;/li&gt;
&lt;li&gt;  Defensive: Tanky teams designed to outlast opponents&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  A2A Capabilities:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  Can request basic information from Pokemon Agent&lt;/li&gt;
&lt;li&gt;  Specialized in deep analysis and educational insights&lt;/li&gt;
&lt;li&gt;  Provides advanced strategic insights and team composition advice&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Master Agent (&lt;code&gt;master-agent/&lt;/code&gt;)
&lt;/h3&gt;

&lt;p&gt;Execution: ADK Web&lt;br&gt;
Specialty: Orchestration and coordination&lt;/p&gt;
&lt;h3&gt;
  
  
  Features:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  🎭 Coordination between specialized agents&lt;/li&gt;
&lt;li&gt;  🔀 Intelligent query routing&lt;/li&gt;
&lt;li&gt;  📋 Complex workflow management&lt;/li&gt;
&lt;li&gt;  🤝 A2A collaboration orchestration&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  MCP Servers
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Pokemon MCP Server (&lt;code&gt;mcp-server/&lt;/code&gt;)
&lt;/h3&gt;

&lt;p&gt;Port: 8080&lt;br&gt;
Purpose: Basic Pokemon tools&lt;/p&gt;
&lt;h3&gt;
  
  
  Available Tools:
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Basic information
get_pokemon_info(pokemon_name: str) -&amp;gt; Dict
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Species data
get_pokemon_species(pokemon_name: str) -&amp;gt; Dict
# Search and listing
search_pokemon(limit: int = 20, offset: int = 0) -&amp;gt; Dict
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Analytics MCP Server (&lt;code&gt;analytics-mcp-server/&lt;/code&gt;)
&lt;/h3&gt;

&lt;p&gt;Port: 8081&lt;br&gt;
Purpose: Advanced analysis, comparisons, and team building&lt;/p&gt;
&lt;h3&gt;
  
  
  Available Tools:
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Statistical comparisons
compare_pokemon_stats(pokemon1: str, pokemon2: str) -&amp;gt; Dict
# Battle analysis
calculate_type_effectiveness(attacker_type: str, defender_types: List[str]) -&amp;gt; Dict
# Trivia generation
generate_pokemon_trivia(pokemon_name: str) -&amp;gt; Dict
# Statistical rankings
get_stat_rankings(stat_name: str, limit: int = 10) -&amp;gt; Dict
# Team building tools
build_pokemon_team(strategy: str = "balanced", team_size: int = 6) -&amp;gt; Dict
analyze_team_composition(pokemon_list: List[str]) -&amp;gt; Dict
suggest_team_improvements(current_team: List[str], strategy: str = "balanced") -&amp;gt; Dict
calculate_team_coverage(pokemon_list: List[str]) -&amp;gt; Dict
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  🔄 A2A (Agent-to-Agent) Communication
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Communication Protocol
&lt;/h3&gt;

&lt;p&gt;The system implements bidirectional A2A communication between agents:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Pokemon Agent requesting analysis
comparison = await pokemon_agent.request_pokemon_comparison("Pikachu", "Raichu")
# Pokedex Assistant requesting basic information
basic_info = await assistant_agent.request_pokemon_info("Charizard")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Collaboration Patterns
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt; Intelligent Delegation&lt;/li&gt;
&lt;li&gt; Pokemon Agent delegates analytical queries → Pokedx Assistant&lt;/li&gt;
&lt;li&gt; Pokedx Assistant requests basic information → Pokemon Agent&lt;/li&gt;
&lt;li&gt; Collaborative Analysis&lt;/li&gt;
&lt;li&gt; Combination of basic data + deep analysis&lt;/li&gt;
&lt;li&gt; Enriched responses with multiple perspectives&lt;/li&gt;
&lt;li&gt; Complex Workflows&lt;/li&gt;
&lt;li&gt; Orchestration via Master Agent&lt;/li&gt;
&lt;li&gt; Coordinated task sequences&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;The Power of Specialization&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;This architecture demonstrates a key principle: &lt;strong&gt;specialized agents outperform generalist agents&lt;/strong&gt; in complex domains. Each agent becomes an expert in its niche, leading to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Better Performance&lt;/strong&gt;: Focused training and optimization&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Easier Maintenance&lt;/strong&gt;: Clear boundaries and responsibilities&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Scalability&lt;/strong&gt;: Add new specialists without touching existing agents&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Reliability&lt;/strong&gt;: Isolated failures don’t bring down the entire system&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Implementation Guide: Building Your Own Agent Ecosystem&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Ready to build this system yourself? Let’s walk through the implementation step by step.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Prerequisites&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Before we start, ensure you have:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Python 3.10 or higher
python - version
# UV package manager (faster than pip)
curl -LsSf https://astral.sh/uv/install.sh | sh
# Google API key for Gemini
export GOOGLE_API_KEY="your-api-key-here"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;Step 1: Project Setup&lt;/strong&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Clone and set up the project
git clone https://github.com/falconcr/workshop-adk-a2a.git
cd pokemon-agent
# Install all dependencies
uv sync
# Set up environment variables
cp .env.example .env
# Edit .env with your configuration
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Environment Configuration
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# .env
GOOGLE_GENAI_USE_VERTEXAI=TRUE
GOOGLE_CLOUD_PROJECT=your-project-id
GOOGLE_CLOUD_LOCATION=us-central1
# A2A Agent Configuration
A2A_HOST=localhost
A2A_PORT=10001
A2A_PORT_ASSISTANT=10002
# MCP Server URLs
MCP_SERVER_URL=http://localhost:8080/mcp
ANALYTICS_MCP_SERVER_URL=http://localhost:8081/mcp
# Inter-agent Communication URLs
POKEMON_AGENT_URL=http://localhost:10001
ASSISTANT_AGENT_URL=http://localhost:10002
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;Step 2: Build Your First MCP Server&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Let’s start with the Pokemon MCP Server that provides basic &lt;a href="https://github.com/falconcr/workshop-adk-a2a/tree/master/mcp-server" rel="noopener noreferrer"&gt;Pokémon data:&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Step 3: Create Your First ADK Agent&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Now let’s build the  &lt;a href="https://github.com/falconcr/workshop-adk-a2a/tree/master/pokemon_agent" rel="noopener noreferrer"&gt;Pokemon Agent&lt;/a&gt; that uses our MCP server. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4: Add A2A Communication&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Enable your agents to communicate with each other:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Define Pokemon-related skills
pokemon_info_skill = AgentSkill(
    id='get_pokemon_info',
    name='Pokemon Information Tool',
    description='Get detailed information about a specific Pokemon including stats, abilities, and types',
    tags=['pokemon info', 'pokemon stats', 'pokemon abilities'],
    examples=['Tell me about Pikachu', 'What are the stats for Charizard?'],
)
pokemon_species_skill = AgentSkill(
    id='get_pokemon_species',
    name='Pokemon Species Tool',
    description='Get species information about Pokemon including descriptions and evolution details',
    tags=['pokemon species', 'pokemon description', 'pokemon evolution'],
    examples=['What is the description of Bulbasaur?', 'Tell me about Eevee evolution'],
)
pokemon_search_skill = AgentSkill(
    id='search_pokemon',
    name='Pokemon Search Tool',
    description='Search and list Pokemon with pagination to discover new Pokemon',
    tags=['pokemon search', 'pokemon list', 'discover pokemon'],
    examples=['Show me a list of Pokemon', 'Find Pokemon starting from number 100'],
)
# A2A Agent Card definition
agent_card = AgentCard(
    name='Pokemon Agent',
    description='Helps with Pokemon information, stats, descriptions, and discovery using the PokeAPI',
    url=f'http://{host}:{port}/',
    version='1.0.0',
    defaultInputModes=["text"],
    defaultOutputModes=["text"],
    capabilities=AgentCapabilities(streaming=True),
    skills=[pokemon_info_skill, pokemon_species_skill, pokemon_search_skill],
)
# Make the agent A2A-compatible
a2a_app = to_a2a(root_agent, port=port)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;Step 5: Build the Analytics MCP Server&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Create specialized  &lt;a href="https://github.com/falconcr/workshop-adk-a2a/tree/master/analytics-mcp-server" rel="noopener noreferrer"&gt;analytical tools&lt;/a&gt;. &lt;/p&gt;

&lt;h3&gt;
  
  
  Step 6: Build the Pokedex
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/falconcr/workshop-adk-a2a/tree/master/pokedex_assistant" rel="noopener noreferrer"&gt;Code&lt;/a&gt; &lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Step 7:&lt;/strong&gt; Execution
&lt;/h3&gt;

&lt;p&gt;Start MCP servers&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Terminal 1 - Pokemon MCP Server
cd mcp-server
uv run server.py
# Terminal 2 - Analytics MCP Server
cd analytics-mcp-server
uv run server.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Start agents&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Terminal 3 - Pokemon Agent
uv run uvicorn pokemon_agent.agent:a2a_app --host localhost --port 10001
# Terminal 4 - Pokedex Assistant
uv run uvicorn pokedex_assistant.agent:a2a_app --host localhost --port 10002
# Terminal 5 - Master Agent
uv run adk web
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Usage Examples
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Basic Pokemon Information
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"Tell me about Pikachu"
"What are Charizard's stats?"
"Show me Pokemon starting from number 100
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Pokemon Comparisons
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"Compare Pikachu vs Raichu"
"Which has better stats: Charizard or Blastoise?"
"Analyze the differences between Eevee evolutions"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Type Effectiveness Analysis
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"How effective is Electric type against Water and Flying?"
"Calculate Fire type effectiveness against Grass/Poison Pokemon"
"What types are super effective against Dragon type?"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Team Building Commands
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"Build me a balanced Pokemon team"
"Create an offensive team for competitive play"
"I need a defensive team strategy"
"Build a team with 4 Pokemon using offensive strategy"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Team Analysis
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"Analyze my team: Pikachu, Charizard, Blastoise, Venusaur, Alakazam, Machamp"
"What are the strengths and weaknesses of my team?"
"Evaluate this team composition"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Team Optimization
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"How can I improve my current team?"
"Suggest better Pokemon for my offensive strategy"
"What changes would make my team more balanced?"
"Suggest improvements for: Garchomp, Rotom, Ferrothorn"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Type Coverage Analysis
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"Calculate type coverage for my team"
"What types am I missing in my team?"
"Analyze the type balance of my Pokemon team"
"Check coverage for: Charizard, Blastoise, Venusaur, Pikachu"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Fun Facts and Trivia
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"Generate interesting trivia about Charizard"
"Tell me fun facts about Eevee"
"What are some curious facts about legendary Pokemon?"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  &lt;strong&gt;Future Enhancements and Roadmap&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Planned Features&lt;/strong&gt;
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Visual Agent Designer&lt;/strong&gt;*: Drag-and-drop agent workflow creation&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Advanced Analytics&lt;/strong&gt;: Agent performance dashboards and insights&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Multi-Modal Support&lt;/strong&gt;: Image and voice interaction capabilities&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Auto-Scaling&lt;/strong&gt;: Kubernetes-based dynamic agent scaling&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Agent Marketplace&lt;/strong&gt;: Shared repository of specialized agents and MCP tools&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Integration Opportunities&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Langsmith&lt;/strong&gt;: Enhanced agent observability and debugging&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Weights &amp;amp; Biases&lt;/strong&gt;: Agent performance tracking and optimization&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Ray Serve&lt;/strong&gt;: Distributed agent deployment and serving&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Conclusion: The Agent-Powered Future&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The Pokemon agent ecosystem we’ve built demonstrates the transformative potential of collaborative AI systems. By combining ADK’s robust agent framework, MCP’s modular tool architecture, and A2A’s seamless communication protocols, we can create AI systems that are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;More Capable&lt;/strong&gt;: Specialized agents excel in their domains&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;More Maintainable&lt;/strong&gt;: Clear separation of concerns and responsibilities&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;More Scalable&lt;/strong&gt;: Independent scaling of different system components&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;More Resilient&lt;/strong&gt;: Isolated failures don’t cascade through the system&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Key Takeaways&lt;/strong&gt;
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Specialization Beats Generalization&lt;/strong&gt;: Focused agents outperform jack-of-all-trades systems&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Modular Tools Scale Better&lt;/strong&gt;: MCP servers provide reusable, maintainable capabilities&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Agent Collaboration Unlocks New Possibilities&lt;/strong&gt;: A2A communication creates emergent capabilities&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Real-World Impact&lt;/strong&gt;: These patterns apply across industries and use cases&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Additional Resources&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Documentation&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;a href="https://cloud.google.com/agent-builder" rel="noopener noreferrer"&gt;Google ADK Documentation&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://spec.modelcontextprotocol.io/" rel="noopener noreferrer"&gt;Model Context Protocol Specification&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://developers.google.com/agent-platform" rel="noopener noreferrer"&gt;A2A Protocol Documentation&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>googlecloud</category>
      <category>adk</category>
      <category>mcp</category>
      <category>a2a</category>
    </item>
    <item>
      <title>Civo: Simplificando Kubernetes para todos</title>
      <dc:creator>Falcon</dc:creator>
      <pubDate>Wed, 16 Oct 2024 21:39:54 +0000</pubDate>
      <link>https://forem.com/gelopfalcon/civo-simplificando-kubernetes-para-todos-27hi</link>
      <guid>https://forem.com/gelopfalcon/civo-simplificando-kubernetes-para-todos-27hi</guid>
      <description>&lt;h2&gt;
  
  
  ¿Qué es Civo?
&lt;/h2&gt;

&lt;p&gt;Civo es una plataforma de computación en la nube que ofrece servicios de Kubernetes rápidos y fáciles de usar. Su principal oferta, Civo Kubernetes, utiliza K3s, una versión ligera y optimizada de Kubernetes desarrollada por Rancher Labs. K3s es ideal para aplicaciones y entornos en la nube pequeños o medianos. Civo permite a los desarrolladores configurar un clúster funcional de Kubernetes en menos de 90 segundos, lo que lo convierte en una excelente opción para principiantes.&lt;/p&gt;

&lt;h2&gt;
  
  
  ¿Por qué usar Civo?
&lt;/h2&gt;

&lt;p&gt;Velocidad y simplicidad: Para los principiantes, Civo ofrece una forma rápida de crear un clúster de Kubernetes, permitiéndote empezar a experimentar sin complicarte con configuraciones complejas.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Uso de K3s:&lt;/strong&gt; Civo funciona con K3s, que consume menos recursos que una instalación estándar de Kubernetes. Esto lo convierte en una excelente opción para proyectos que no requieren todas las capacidades de Kubernetes, asegurando que puedas desplegar aplicaciones de manera rápida y eficiente.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Interfaz amigable:&lt;/strong&gt; Civo ofrece una plataforma web intuitiva, una CLI y una API, que simplifican el despliegue, la gestión y la eliminación de clústeres sin necesidad de tener un conocimiento profundo de Kubernetes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Precios competitivos:&lt;/strong&gt; Con precios asequibles y facturación transparente, Civo es una opción atractiva para los desarrolladores que desean aprovechar Kubernetes sin incurrir en los altos costos asociados a los grandes proveedores de nube.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Comunidad y soporte:&lt;/strong&gt; Civo cuenta con una comunidad activa que comparte recursos y conocimientos. Su equipo de soporte es conocido por ser receptivo, ayudándote a resolver problemas mientras aprendes Kubernetes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Enfoque centrado en desarrolladores:&lt;/strong&gt; Diseñado pensando en los desarrolladores, Civo ofrece características que permiten la experimentación rápida y el desarrollo, facilitando que los recién llegados comprendan los conceptos de Kubernetes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Beneficios de usar Civo
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Creación rápida de clústeres:&lt;/strong&gt; Puedes tener un clúster de Kubernetes completamente operativo en menos de 90 segundos, lo cual es invaluable cuando tienes ganas de empezar a aprender y experimentar.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;K3s ligero:&lt;/strong&gt; Al aprovechar K3s, tu clúster utilizará menos recursos, reduciendo costos y optimizando el uso de la infraestructura.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Facilidad de uso:&lt;/strong&gt; Tanto la plataforma como la CLI/API están diseñadas para simplificar la experiencia con Kubernetes, haciéndola accesible incluso para aquellos que no son expertos.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bajo costo:&lt;/strong&gt; Mientras te familiarizas con Kubernetes, no tendrás que preocuparte por altos gastos, permitiendo una experimentación económica.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Escalabilidad:&lt;/strong&gt; Aunque Civo es ligero, sigue siendo compatible con Kubernetes, por lo que puedes escalar tus aplicaciones según sea necesario, proporcionando un equilibrio entre simplicidad y potencial de crecimiento.&lt;/p&gt;

&lt;h2&gt;
  
  
  Características del Marketplace
&lt;/h2&gt;

&lt;p&gt;Una de las características destacadas de Civo es su Marketplace, que te permite agregar componentes adicionales a tu clúster de Kubernetes fácilmente. Esto es especialmente beneficioso para los principiantes que desean integrar herramientas populares sin tener que lidiar con configuraciones complejas.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Integración fácil:&lt;/strong&gt; El Marketplace ofrece una selección de aplicaciones preconfiguradas como Prometheus para monitoreo, Grafana para visualización, Linkerd para gestión de mallas de servicio y Traefik para control de ingress. Puedes desplegar estas herramientas con solo unos clics.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Despliegues optimizados:&lt;/strong&gt; Las aplicaciones en el Marketplace están optimizadas para funcionar a la perfección con K3s, asegurando un proceso de integración fluido sin problemas de compatibilidad.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Acceso rápido:&lt;/strong&gt; Puedes implementar rápidamente herramientas esenciales en tu clúster, lo que te permite experimentar de forma ágil y enfocarte más en el desarrollo de aplicaciones en lugar de en procedimientos de instalación.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Oportunidades de aprendizaje:&lt;/strong&gt; El Marketplace te permite explorar herramientas comúnmente utilizadas en el ecosistema de Kubernetes sin necesidad de instalarlas manualmente, lo cual es útil mientras aprendes a utilizar estas herramientas de manera efectiva.&lt;/p&gt;

&lt;h2&gt;
  
  
  Experiencia personal
&lt;/h2&gt;

&lt;p&gt;Habiendo enseñado Kubernetes a muchos desarrolladores y probado diversos proveedores de nube, puedo decir con confianza que pocos me han impresionado tanto, aparte de Google Kubernetes Engine (GKE). Sin embargo, después de probar Civo, rápidamente se convirtió en una de mis dos mejores opciones junto a GKE. Civo destaca por su simplicidad, documentación completa y su contribución al ecosistema de cloud-native, lo que lo convierte en una excelente opción para los desarrolladores que desean aprender y crecer con Kubernetes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusión
&lt;/h2&gt;

&lt;p&gt;En resumen, Civo es una opción ideal para desarrolladores que son nuevos en Kubernetes. Permite un despliegue rápido y sencillo de clústeres de Kubernetes usando K3s, ofrece una interfaz fácil de usar y proporciona acceso rápido a herramientas esenciales a través de su Marketplace. Con precios competitivos y una fuerte comunidad de soporte, Civo facilita adentrarse en el mundo de Kubernetes, permitiéndote centrarte en construir y desplegar aplicaciones sin complicaciones. Su lugar en mis dos opciones principales junto a GKE habla mucho de su valor para los desarrolladores que buscan una solución cloud-native.&lt;/p&gt;

&lt;p&gt;Para verlo por ti mismo, puedes obtener $250.00 de crédito gratis al registrarte en &lt;a href="https://civo.com" rel="noopener noreferrer"&gt;Civo.com&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>civo</category>
      <category>kubernetes</category>
      <category>cloud</category>
    </item>
    <item>
      <title>How to Get Automatic Code Review Using LLM Before Committing</title>
      <dc:creator>Falcon</dc:creator>
      <pubDate>Mon, 12 Aug 2024 14:26:17 +0000</pubDate>
      <link>https://forem.com/docker/how-to-get-automatic-code-review-using-llm-before-committing-3nkj</link>
      <guid>https://forem.com/docker/how-to-get-automatic-code-review-using-llm-before-committing-3nkj</guid>
      <description>&lt;p&gt;Traditional code reviews can be time-consuming and prone to human error. To streamline this process and enhance code quality, developers are increasingly turning to AI-powered solutions. In this blog post, you'll explore how to leverage Code Llama, a cutting-edge AI model for code analysis, in conjunction with Docker to create an efficient and automated code review workflow. By integrating Code Llama into your local development environment, you can catch potential issues early in the development cycle, reduce the burden on human reviewers, and ultimately deliver higher-quality code. This guide is designed for developers of all levels who want to improve their coding practices.&lt;/p&gt;

&lt;p&gt;Currently, developers spend a significant amount of time reviewing code written by their peers, which can become a bottleneck for software delivery. Sometimes, code reviews are not conducted promptly, delaying the continuous integration and continuous deployment (CI/CD) process. Moreover, reviewing a Pull Request (PR) or a Merge Request (MR) is not always easy, as it requires a well-defined set of rules, as well as knowledge and expertise in the specific technology.&lt;/p&gt;

&lt;h2&gt;
  
  
  Challenges in Traditional Code Review Processes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Lack of Consistency: Code reviews can be inconsistent, as different reviewers may have different standards and approaches.&lt;/li&gt;
&lt;li&gt;Review Delays: Developers may take time to review code due to heavy workloads, impacting delivery speed.&lt;/li&gt;
&lt;li&gt;Lack of Experience: Not all reviewers may have the same level of knowledge or expertise, leading to important omissions or insufficient problem detection.&lt;/li&gt;
&lt;li&gt;Performance Bottlenecks: The manual nature of code reviews can lead to delays, especially when multiple reviews are needed before a merge.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How Can AI Help?
&lt;/h2&gt;

&lt;p&gt;Artificial Intelligence (AI) can provide a preliminary code review before a commit, which can alleviate many of these problems. Here are some ways AI can help:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Automatic Code Analysis: AI can perform static code analysis to identify common issues such as syntax errors, style problems, security vulnerabilities, and deprecated code patterns.&lt;br&gt;
Tools like Codacy, SonarQube, and DeepCode are already using advanced AI techniques to analyze code and provide feedback.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Improvement Recommendations: AI can suggest code improvements based on best practices and industry standards.&lt;br&gt;
Using deep learning models, AI can recommend changes to improve code efficiency, readability, and maintainability.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Anomaly Detection: AI can learn from previous code patterns and detect anomalies that might indicate potential problems.&lt;br&gt;
This is especially useful for identifying code that doesn't align with the team's coding style and practices.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Facilitating Peer Review: By providing a preliminary review, AI can reduce the workload for human reviewers, allowing them to focus on more complex and contextual aspects of the code.&lt;br&gt;
AI can highlight areas that need special attention, making the review process more efficient.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Example of AI in Code Review
&lt;/h2&gt;

&lt;p&gt;Let's assume we're using an AI tool to review our code before committing. Here's an example of how it might work:&lt;/p&gt;

&lt;h3&gt;
  
  
  Integration with Version Control System
&lt;/h3&gt;

&lt;p&gt;When attempting to commit, the AI tool activates and automatically analyzes the code.&lt;br&gt;
The tool provides a detailed report of any issues found and suggestions for improvements.&lt;/p&gt;

&lt;h3&gt;
  
  
  Contextual Analysis
&lt;/h3&gt;

&lt;p&gt;The tool analyzes not only the current code but also the commit history and project context to offer more accurate recommendations.&lt;br&gt;
For instance, it may suggest changes to maintain consistency with existing code or highlight areas where similar errors have been introduced in the past.&lt;/p&gt;

&lt;h3&gt;
  
  
  Report and Recommended Actions
&lt;/h3&gt;

&lt;p&gt;The generated report may include refactoring suggestions, vulnerability detection, style recommendations, and more.&lt;br&gt;
The developer can review these suggestions and make the necessary changes before proceeding with the commit.&lt;/p&gt;

&lt;h2&gt;
  
  
  LLMs and Codellama
&lt;/h2&gt;

&lt;p&gt;Large Language Models (LLMs) are advanced machine learning models trained on vast amounts of text data. They have the ability to understand, generate, and interact with human language, making them powerful tools for a variety of applications, including code analysis. LLMs are capable of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Syntax and Semantics Understanding: LLMs can parse and understand the structure and meaning of code, which allows them to identify syntax errors, suggest improvements, and ensure that the code adheres to best practices.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Code Generation: LLMs can generate new code snippets based on natural language descriptions or partial code inputs. This capability is useful for automating repetitive coding tasks, prototyping, and even exploring new programming paradigms.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Bug Detection and Correction: By understanding the intent behind code, LLMs can identify potential bugs or issues and suggest corrections. They can detect common programming mistakes, such as off-by-one errors, and provide recommendations for resolving them.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Code Refactoring: LLMs can suggest ways to improve code readability, maintainability, and efficiency. This includes recommending changes to variable names, restructuring code blocks, and optimizing algorithms.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Code Llama is a specialized version of an LLM, fine-tuned specifically for understanding and generating code. As an AI model trained on a diverse set of programming languages and coding tasks, Code Llama excels in:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Language-Agnostic Code Understanding: Code Llama can work with multiple programming languages, providing analysis and suggestions regardless of the specific syntax or semantics.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Contextual Code Suggestions: It offers context-aware recommendations, making it an invaluable tool for suggesting code completions, improvements, and bug fixes that are relevant to the specific programming scenario.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Detailed Code Reviews: Code Llama can conduct in-depth code reviews, pointing out areas for optimization, highlighting code smells, and suggesting best practices. It can generate comprehensive feedback that helps maintain high code quality.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Custom Prompt Responses: By using custom prompts, developers can guide Code Llama to focus on specific aspects of the code, such as security vulnerabilities, performance enhancements, or stylistic consistency.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Efficient Code Documentation: Code Llama can automatically generate documentation for codebases, including function descriptions, parameter explanations, and usage examples, streamlining the documentation process.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In summary, LLMs, and specifically Code Llama, provide a powerful suite of tools for enhancing the software development process. They not only assist in writing and reviewing code but also help in ensuring code quality, consistency, and maintainability across projects.&lt;/p&gt;

&lt;h2&gt;
  
  
  Docker's role
&lt;/h2&gt;

&lt;p&gt;Docker allows developers to create isolated, consistent environments for code testing by using containers. These containers encapsulate an application's code, dependencies, and runtime environment, ensuring that tests are run in the same conditions regardless of the underlying host system. This isolation eliminates the "works on my machine" problem and makes it easier to manage and replicate testing environments.&lt;/p&gt;

&lt;h3&gt;
  
  
  Benefits of Combining Docker and Code Llama
&lt;/h3&gt;

&lt;p&gt;Combining Docker with Code Llama offers several benefits:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Consistency: Docker ensures that Code Llama runs in a consistent environment, eliminating issues related to different configurations or dependencies.&lt;/li&gt;
&lt;li&gt;Scalability: Docker makes it easy to scale the use of Code Llama across different projects or teams by simply sharing a container image.&lt;/li&gt;
&lt;li&gt;Automation: By using Docker, you can automate the setup and execution of code reviews, integrating Code Llama seamlessly into your CI/CD pipeline.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Integrating Code Llama with Code Editors or IDEs
&lt;/h3&gt;

&lt;p&gt;To integrate Code Llama into your preferred code editor or IDE, you can set up a language server or use a plugin that interfaces with Code Llama's API. Many editors like VSCode, PyCharm, or Sublime Text support external tools through extensions or plugins. You can configure these tools to send code to Code Llama for analysis, review, or refactoring.&lt;/p&gt;

&lt;h2&gt;
  
  
  Architecture
&lt;/h2&gt;

&lt;p&gt;This project sets up "llama" to run via a Docker container and integrates a "pre-commit" hook. Whenever someone modifies or commits a Python file, the hook triggers a code review using the codellama model. The review is then saved into a "review.md" file, allowing developers to compare their code against the review feedback. It's important to note that AI models can take varying amounts of time to process, depending on the computer's CPU and memory. In my experience, the review process typically takes between 2 to 5 minutes, which is comparable to the time a human might spend conducting a thorough review.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgzly16ozdkn6ap9y911e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgzly16ozdkn6ap9y911e.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Download and install the latest version of Docker&lt;/li&gt;
&lt;li&gt;Have git tool installed in the computer.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Step 1. Clone the repository
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;git clone https://github.com/dockersamples/codellama-python&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2: Start the Ollama container
&lt;/h3&gt;

&lt;p&gt;Change the directory to codellama-python and run the following command:&lt;br&gt;
&lt;code&gt;sh start-ollama.sh&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3. Create the following file .git/hooks/pre-commit
&lt;/h3&gt;

&lt;p&gt;Copy the content below and put it in the right directory:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

  #!/bin/sh

# Find all modified Python files
FILES=$(git diff --cached --name-only --diff-filter=ACM | grep '\.py$')

if [ -z "$FILES" ]; then
  echo "No Python files to check."
  exit 0
fi

# Clean the review.md file before starting
&amp;gt; review.md

# Review each modified Python file
for FILE in $FILES; do
  content=$(cat "$FILE")
  prompt="\n Review this code, provide suggestions for improvement, coding best practices, improve readability, and maintainability. Remove any code smells and anti-patterns. Provide code examples for your suggestion. Respond in markdown format. If the file does not have any code or does not need any changes, say 'No changes needed'."

  # get model review suggestions
  suggestions=$(docker exec ollama ollama run codellama "Code: $content $prompt")

  # Añadir el prefijo del nombre del archivo y las sugerencias al archivo review.md
  echo "## Review for $FILE" &amp;gt;&amp;gt; review.md
  echo "" &amp;gt;&amp;gt; review.md
  echo "$suggestions" &amp;gt;&amp;gt; review.md
  echo "" &amp;gt;&amp;gt; review.md
  echo "---" &amp;gt;&amp;gt; review.md
  echo "" &amp;gt;&amp;gt; review.md
done

echo "All Python files were applied the code review."
exit 0


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;The provided shell script automates the code review process by finding all modified Python files, cleaning the review.md file, and iterating through each file to generate suggestions using the Ollama model. The suggestions are then appended to the review.md file, providing developers with immediate feedback on their code changes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 4. Proper permission to execute
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;chmod +x .git/hooks/pre-commit&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 5. Add or modify the python files
&lt;/h3&gt;

&lt;p&gt;Go ahead and make changes to the Python files.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 6. Apply the changes
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

&lt;p&gt;git add .&lt;br&gt;
git commit -m "Test code review in pre-commit hook"&lt;/p&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
&lt;br&gt;
  &lt;br&gt;
  &lt;br&gt;
  Results&lt;br&gt;
&lt;/h3&gt;

&lt;p&gt;Apply a commit message and wait for the review. You might see something like&lt;/p&gt;

&lt;p&gt;pulling manifest&lt;br&gt;
pulling 3a43f93b78ec... 100% ▕████████████████▏ 3.8 GB&lt;br&gt;
pulling 8c17c2ebb0ea...   0% ▕                ▏    0 B&lt;br&gt;
pulling 590d74a5569b...   0% ▕                ▏    0 B&lt;br&gt;
pulling 2e0493f67d0c... 100% ▕████████████████▏   59 B&lt;br&gt;
pulling 7f6a57943a88... 100% ▕████████████████▏  120 B&lt;br&gt;
pulling 316526ac7323...   0% ▕                ▏    0 B&lt;br&gt;
verifying sha256 digest&lt;br&gt;
writing manifest&lt;br&gt;
removing any unused layers&lt;br&gt;
success&lt;/p&gt;

&lt;p&gt;It might take some minutes, but the final result is a review.md with all suggestions.&lt;/p&gt;

&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;Integrating Docker and Code Llama into your development workflow offers a seamless and powerful way to automate code reviews. By triggering Code Llama on every commit, developers can ensure that their code is peer-reviewed instantly, catching potential issues early in the process. This not only enhances code quality but also fosters a culture of continuous improvement and collaboration. As development teams increasingly adopt AI-driven tools, the combination of Docker’s isolated environments and Code Llama’s intelligent insights becomes an invaluable asset, enabling developers to focus on innovation while maintaining robust code standards. Give it a try in your next project, and see the difference it makes!&lt;/p&gt;

</description>
      <category>docker</category>
      <category>ollama</category>
      <category>devops</category>
      <category>softwaredevelopment</category>
    </item>
    <item>
      <title>To implement canary deployments using Istio</title>
      <dc:creator>Falcon</dc:creator>
      <pubDate>Wed, 05 Jul 2023 15:08:40 +0000</pubDate>
      <link>https://forem.com/gelopfalcon/to-implement-canary-deployments-using-istio-53ll</link>
      <guid>https://forem.com/gelopfalcon/to-implement-canary-deployments-using-istio-53ll</guid>
      <description>&lt;p&gt;To implement canary deployments using Istio, you can follow these general steps:&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Install and Configure Istio
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Install Istio on your Kubernetes cluster by following the official Istio installation guide.&lt;/li&gt;
&lt;li&gt;Enable automatic sidecar injection for your target namespaces to allow Istio to manage traffic routing and apply other features.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  2. Define Canary Deployment Strategy
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Decide on the deployment strategy for your canary release. This typically involves deploying a new version of your application alongside the existing production version and gradually shifting traffic to the new version.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  3. Configure Istio Virtual Services and Destination Rules
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Define Virtual Services and Destination Rules in Istio to control traffic routing between the different versions of your application.&lt;/li&gt;
&lt;li&gt;Create a Virtual Service that splits traffic between the existing production version and the new canary version based on defined weights.&lt;/li&gt;
&lt;li&gt;Configure Destination Rules to specify subsets for different versions and enable outlier detection, circuit breakers, or other traffic management features.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  4. Implement Canary Release Workflow
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Build and deploy the new version of your application, either as a separate Kubernetes Deployment or a new version of your existing Deployment.&lt;/li&gt;
&lt;li&gt;Configure the Istio Virtual Service to gradually shift traffic towards the canary version. Start with a small percentage and gradually increase it based on monitoring and evaluation.&lt;/li&gt;
&lt;li&gt;Monitor the performance, metrics, and user feedback of the canary version to ensure it's functioning as expected.&lt;/li&gt;
&lt;li&gt;If issues are detected, you can roll back by adjusting the traffic split or reverting to the previous version.&lt;/li&gt;
&lt;li&gt;Once you are confident in the canary version's stability, you can fully shift traffic to the new version or perform a gradual rollout to all users.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  5. Observe and Analyze Metrics
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Leverage Istio's observability features, such as metrics, tracing, and logging, to monitor the canary deployment and gather insights on its performance.&lt;/li&gt;
&lt;li&gt;Analyze metrics like latency, error rates, and resource utilization to ensure the canary version meets your requirements and doesn't negatively impact the user experience.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Remember that the specifics of implementing canary deployments using Istio may vary based on your application's architecture, requirements, and deployment workflow. It is recommended to refer to the Istio documentation and explore Istio's traffic management features, including Virtual Services, Destination Rules, and other components, for detailed instructions and configurations tailored to your use case.&lt;/p&gt;

&lt;h2&gt;
  
  
  Example
&lt;/h2&gt;

&lt;p&gt;Certainly! Here's an example of how you can implement a canary deployment using Istio:&lt;/p&gt;

&lt;h3&gt;
  
  
  Install and Configure Istio
&lt;/h3&gt;

&lt;p&gt;Follow the official Istio installation guide to install and configure Istio on your Kubernetes cluster.&lt;/p&gt;

&lt;h3&gt;
  
  
  Define Canary Deployment Strategy
&lt;/h3&gt;

&lt;p&gt;Assume you have an existing Kubernetes Deployment called myapp running version 1.0 as your production version.&lt;br&gt;
Create a new Kubernetes Deployment called myapp-canary for the canary version of your application running version 2.0.&lt;/p&gt;
&lt;h3&gt;
  
  
  Configure Istio Virtual Services and Destination Rules
&lt;/h3&gt;

&lt;p&gt;Define a Virtual Service to split traffic between the production version and the canary version. For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: myapp
spec:
  hosts:
    - myapp.example.com
  http:
  - route:
    - destination:
        host: myapp
        subset: v1
      weight: 90
    - destination:
        host: myapp-canary
        subset: v2
      weight: 10

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Configure Destination Rules to define subsets for your versions and enable outlier detection. For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: myapp
spec:
  host: myapp
  subsets:
  - name: v1
    labels:
      version: v1
  - name: v2
    labels:
      version: v2
  trafficPolicy:
    outlierDetection:
      consecutiveErrors: 5
      interval: 5s
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Implement Canary Release Workflow
&lt;/h2&gt;

&lt;p&gt;Deploy the myapp-canary Deployment with version 2.0 of your application.&lt;/p&gt;

&lt;p&gt;Update the Virtual Service weights to gradually shift traffic towards the canary version. For example, increase the weight of the canary version to 50 and reduce the weight of the production version to 50.&lt;/p&gt;

&lt;p&gt;Monitor the canary version's performance, logs, and metrics to ensure it's functioning as expected.&lt;/p&gt;

&lt;h2&gt;
  
  
  Observe and Analyze Metrics
&lt;/h2&gt;

&lt;p&gt;Use Istio's observability features to monitor the canary deployment.&lt;/p&gt;

&lt;p&gt;Analyze metrics like latency, error rates, and request volume for both the production and canary versions.&lt;/p&gt;

&lt;p&gt;Based on the observed metrics, make adjustments to the traffic split or roll back if issues are detected.&lt;/p&gt;

&lt;p&gt;This example demonstrates a simple canary deployment using Istio. You can further customize and extend it based on your specific application requirements and Istio configuration options.&lt;/p&gt;

</description>
      <category>istio</category>
      <category>cloudnative</category>
      <category>cloudcomputing</category>
    </item>
    <item>
      <title>AWS Amplify for beginners</title>
      <dc:creator>Falcon</dc:creator>
      <pubDate>Tue, 04 Jul 2023 15:03:39 +0000</pubDate>
      <link>https://forem.com/aws-builders/aws-amplify-for-beginners-589m</link>
      <guid>https://forem.com/aws-builders/aws-amplify-for-beginners-589m</guid>
      <description>&lt;p&gt;AWS Amplify is a development platform provided by Amazon Web Services (AWS) that simplifies the process of building full-stack applications. It offers a range of tools, services, and libraries to accelerate the development of web and mobile applications.&lt;/p&gt;

&lt;p&gt;To create an app using AWS Amplify, you can follow these general steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Set up the AWS Amplify CLI:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Install the Amplify CLI on your local development machine. The CLI is available for Windows, macOS, and Linux.&lt;/li&gt;
&lt;li&gt;Configure the CLI by running &lt;code&gt;amplify configure&lt;/code&gt;. This will guide you through setting up your AWS credentials and region.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Initialize an Amplify Project:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create a new directory for your app and navigate to it in your terminal or command prompt.&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;amplify init&lt;/code&gt; to initialize a new Amplify project. This will prompt you to provide details such as the app name, environment, and default editor.&lt;/li&gt;
&lt;li&gt;Select the AWS profile and region to associate with your project.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Add Backend Services:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use the Amplify CLI to add backend services such as authentication, APIs, storage, and databases.&lt;/li&gt;
&lt;li&gt;For example, you can run &lt;code&gt;amplify add auth&lt;/code&gt; to add authentication, or &lt;code&gt;amplify add api&lt;/code&gt; to add a GraphQL or REST API.&lt;/li&gt;
&lt;li&gt;Follow the prompts to configure the specific details of each service.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Deploy Backend Services:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Once you have added the desired backend services, run &lt;code&gt;amplify push&lt;/code&gt; to deploy your backend resources to AWS.&lt;/li&gt;
&lt;li&gt;The CLI will create the necessary AWS resources and configure them based on your specifications.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Integrate Amplify into your App:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Depending on the type of app you are building, you can use Amplify libraries and SDKs to integrate with your frontend code.&lt;/li&gt;
&lt;li&gt;Amplify provides libraries for JavaScript frameworks like React, React Native, Angular, Vue.js, and more.&lt;/li&gt;
&lt;li&gt;Install the necessary Amplify libraries via npm or yarn, and follow the documentation and examples to integrate Amplify functionality into your app.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Build and Deploy your App:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;With Amplify integrated into your app, you can now build and test your application locally.&lt;/li&gt;
&lt;li&gt;Once you are ready to deploy, run &lt;code&gt;amplify publish&lt;/code&gt; to build and deploy your app to a hosting environment provided by Amplify.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;These steps provide a general overview of creating an app using AWS Amplify. The specific implementation details and configurations may vary based on your app requirements and the backend services you choose to incorporate. It is recommended to refer to the official AWS Amplify documentation, guides, and examples for more detailed instructions and to explore the various capabilities and features offered by Amplify.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>serverless</category>
    </item>
    <item>
      <title>Fleet = Scaling deployments on demand</title>
      <dc:creator>Falcon</dc:creator>
      <pubDate>Thu, 29 Jun 2023 21:41:35 +0000</pubDate>
      <link>https://forem.com/gelopfalcon/fleet-scaling-deployments-on-demand-1p7k</link>
      <guid>https://forem.com/gelopfalcon/fleet-scaling-deployments-on-demand-1p7k</guid>
      <description>&lt;p&gt;Fleet is an open-source GitOps framework that enables managing and deploying Kubernetes clusters and applications at scale. Rancher, on the other hand, is a complete Kubernetes management platform that provides features like multi-cluster management, centralized authentication, and user-friendly UI. Let's explore both Fleet and Rancher in more detail:&lt;/p&gt;

&lt;h2&gt;
  
  
  Fleet:
&lt;/h2&gt;

&lt;p&gt;Fleet is a GitOps framework built on top of Kubernetes. It allows you to declare your desired cluster state and application configurations in Git repositories. Fleet then reconciles the state of your Kubernetes clusters to match the desired state defined in the Git repositories. Key features of Fleet include:&lt;br&gt;
GitOps Workflow: Fleet follows the GitOps approach, where the desired state of clusters and applications is stored in Git repositories. This enables version-controlled, auditable, and collaborative management of infrastructure and application configurations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cluster Fleet Management:&lt;/strong&gt; Fleet allows you to manage multiple Kubernetes clusters, ensuring consistency across all clusters by applying declarative configurations stored in Git.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Application Deployment:&lt;/strong&gt; Fleet facilitates deploying and managing applications across multiple clusters. It can synchronize applications defined in Git repositories to the desired state in the target clusters.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Configuration Drift Detection:&lt;/strong&gt; Fleet continuously monitors the actual state of clusters and alerts you of any configuration drift, ensuring that clusters remain in the desired state.&lt;/p&gt;

&lt;p&gt;Fleet is often used in conjunction with Rancher, which provides a user-friendly interface and additional management capabilities for Kubernetes clusters.&lt;/p&gt;

&lt;h2&gt;
  
  
  Rancher:
&lt;/h2&gt;

&lt;p&gt;Rancher is a comprehensive Kubernetes management platform that simplifies the deployment, management, and operation of Kubernetes clusters. It supports various Kubernetes distributions and provides the following features:&lt;br&gt;
Multi-Cluster Management: Rancher allows you to manage multiple Kubernetes clusters from a centralized control plane. You can provision and scale clusters, monitor cluster health, and perform upgrades and maintenance tasks across all clusters.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;User-Friendly UI:&lt;/strong&gt; Rancher provides an intuitive web-based user interface for managing Kubernetes clusters and applications. It offers a graphical representation of clusters, resource monitoring, and simplified workflows for managing deployments.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Authentication and Access Control:&lt;/strong&gt; Rancher provides centralized authentication and access control, allowing you to define user roles, permissions, and fine-grained access policies for clusters and resources.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Application Catalog:&lt;/strong&gt; Rancher offers an application catalog with pre-configured templates for deploying popular applications. It simplifies the process of deploying and managing applications on Kubernetes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Infrastructure Provisioning:&lt;/strong&gt; Rancher integrates with various cloud providers to simplify the provisioning of infrastructure resources for Kubernetes clusters.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;High Availability and Scalability:&lt;/strong&gt; Rancher supports high availability configurations and can scale horizontally to handle large-scale deployments.&lt;/p&gt;

&lt;p&gt;Rancher incorporates Fleet as a core component, allowing users to leverage GitOps workflows and Fleet's cluster management capabilities through the Rancher UI.&lt;/p&gt;

&lt;p&gt;In summary, Fleet is an open-source GitOps framework focused on cluster and application management, while Rancher is a comprehensive Kubernetes management platform that provides features like multi-cluster management, user-friendly UI, and additional management capabilities.&lt;/p&gt;

</description>
      <category>devops</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Cloud Native: Overview about Thanos</title>
      <dc:creator>Falcon</dc:creator>
      <pubDate>Sun, 25 Jun 2023 04:09:43 +0000</pubDate>
      <link>https://forem.com/gelopfalcon/cloud-native-overview-about-thanos-297e</link>
      <guid>https://forem.com/gelopfalcon/cloud-native-overview-about-thanos-297e</guid>
      <description>&lt;p&gt;Thanos is an open-source project developed by the Cloud Native Computing Foundation (CNCF) that provides a highly available and scalable solution for storing, querying, and visualizing Prometheus metrics.&lt;/p&gt;

&lt;p&gt;Prometheus is a popular monitoring and alerting tool used in cloud-native environments, but it has limitations when it comes to long-term storage and global querying. Thanos solves these limitations by adding a global query view and long-term storage capabilities to Prometheus.&lt;/p&gt;

&lt;p&gt;With Thanos, you can scale Prometheus horizontally and store metrics in a distributed, highly available manner. Thanos also provides a global query view of all metrics, regardless of their location, enabling you to query metrics from a single endpoint.&lt;/p&gt;

&lt;p&gt;Additionally, Thanos supports efficient query parallelization, allowing you to run queries on multiple Prometheus instances in parallel, which significantly reduces query latency.&lt;/p&gt;

&lt;p&gt;Thanos also includes a set of components, such as the query component, the sidecar component, and the store component, that can be used independently or together to build a complete monitoring solution.&lt;/p&gt;

&lt;p&gt;Overall, Thanos is a powerful and flexible tool that enhances the capabilities of Prometheus and provides a reliable solution for storing, querying, and visualizing metrics in cloud-native environments.&lt;/p&gt;

</description>
      <category>cloudcomputing</category>
      <category>cloudnative</category>
      <category>monitoring</category>
      <category>devops</category>
    </item>
    <item>
      <title>Introducción a CloudRun</title>
      <dc:creator>Falcon</dc:creator>
      <pubDate>Mon, 13 Mar 2023 20:36:44 +0000</pubDate>
      <link>https://forem.com/gelopfalcon/introduccion-a-cloudrun-n04</link>
      <guid>https://forem.com/gelopfalcon/introduccion-a-cloudrun-n04</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Crea y despliega aplicaciones en contenedores escalables y escritas en cualquier lenguaje (incluidos Go, Python, Java, Node.js, .NET y Ruby) en una plataforma totalmente gestionada.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Características principales
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Cualquier lenguaje, biblioteca o binario
&lt;/h3&gt;

&lt;p&gt;Usa el lenguaje de programación que prefieras o cualquier biblioteca de lenguaje o sistema operativo. Incluso puedes incorporar tus propios binarios.&lt;/p&gt;

&lt;h3&gt;
  
  
  Uso de estándares y flujos de trabajo de contenedores
&lt;/h3&gt;

&lt;p&gt;Los contenedores se han convertido en un estándar para empaquetar y desplegar tanto el código como sus dependencias. Cloud Run funciona a la perfección con las soluciones del ecosistema de contenedores, como Cloud Build, Cloud Code, Artifact Registry y Docker.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pago por uso
&lt;/h3&gt;

&lt;p&gt;Solo se te cobra el tiempo de ejecución de tu código. Para calcular dicho tiempo, se redondea a los 100 milisegundos más cercanos.&lt;/p&gt;

&lt;h2&gt;
  
  
  Usos
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Servicios web: sitios web
&lt;/h3&gt;

&lt;p&gt;Crea tu sitio web mediante una pila tecnológica avanzada, como nginx, ExpressJS o django, accede a tu base de datos SQL en Cloud SQL y renderiza páginas HTML dinámicas.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--b4rtAoUP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/v67o1clbggfg7axtpba3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--b4rtAoUP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/v67o1clbggfg7axtpba3.png" alt="Image description" width="454" height="277"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Servicios web: backend de las APIs REST
&lt;/h3&gt;

&lt;p&gt;En las aplicaciones móviles modernas se suelen utilizar APIs de backend RESTful para disponer de información en tiempo real sobre la aplicación y separar la actividad de los equipos de desarrollo de frontend y backend. Los servicios de API que se ejecutan en Cloud Run permiten a los desarrolladores conservar los datos de forma fiable en bases de datos gestionadas, como Cloud SQL o Firestore (NoSQL). Al iniciar sesión en Cloud Run, los usuarios pueden acceder a los datos de recursos de aplicaciones almacenados en bases de datos de Google Cloud.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--1seOI0UX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rfg029skj8hfttpqnp4t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--1seOI0UX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rfg029skj8hfttpqnp4t.png" alt="Image description" width="302" height="282"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Servicios web: administración interna
&lt;/h3&gt;

&lt;p&gt;La administración interna suele requerir el uso de documentos, hojas de cálculo y otras integraciones personalizadas, así como la ejecución de la aplicación web de un proveedor. Si la aplicación web interna empaquetada en un contenedor se aloja en Cloud Run, siempre está lista para usarse y solo se te cobra cuando se utiliza.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--wpF11KXt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dsdlz4ynyas863vlen1y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--wpF11KXt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dsdlz4ynyas863vlen1y.png" alt="Image description" width="426" height="299"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Procesamiento de datos: transformación de datos ligeros
&lt;/h3&gt;

&lt;p&gt;Crea aplicaciones de Cloud Run para procesar datos con las que transformar datos ligeros conforme llegan y almacenarlos como datos estructurados. Las transformaciones se pueden activar a partir de orígenes de Google Cloud.&lt;/p&gt;

&lt;p&gt;Cuando se crea un archivo .csv, se activa y se envía un evento a un servicio de Cloud Run. Finalmente, los datos se extraen, estructuran y almacenan en una tabla de BigQuery.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--4X5D7B6p--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dwx8jguxmxhovyo7a2rp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4X5D7B6p--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dwx8jguxmxhovyo7a2rp.png" alt="Image description" width="880" height="153"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Automatización: flujo de trabajo empresarial con webhooks
&lt;/h3&gt;

&lt;p&gt;Conecta tus operaciones mediante una estrategia basada en eventos. Cloud Run se escala según la demanda para implementar un objetivo de webhook y activar eventos que actúan como solicitudes. Además, solo se te cobra cuando recibes y procesas tal evento.&lt;/p&gt;

&lt;p&gt;Reacciona frente a eventos de GitHub o Slack, o envía webhooks cuando se haga una compra, cuando una tarea esté lista o cuando se active una alarma. Todo ello gracias a un servicio que puede reaccionar a tiempo para activar un microservicio en tu estructura.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--KV4nGPAc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/39srpx2gx46v0d2noq2y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--KV4nGPAc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/39srpx2gx46v0d2noq2y.png" alt="Image description" width="561" height="341"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>googlecloud</category>
      <category>serverless</category>
    </item>
    <item>
      <title>Firebase - Controlar y optimizar tu aplicación sobre la marcha</title>
      <dc:creator>Falcon</dc:creator>
      <pubDate>Thu, 02 Feb 2023 16:18:18 +0000</pubDate>
      <link>https://forem.com/gelopfalcon/firebase-controlar-y-optimizartu-aplicacion-sobre-la-marcha-47ed</link>
      <guid>https://forem.com/gelopfalcon/firebase-controlar-y-optimizartu-aplicacion-sobre-la-marcha-47ed</guid>
      <description>&lt;h2&gt;
  
  
  Hacer actualizaciones sin volver a publicar
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Remote Config&lt;/strong&gt; le brinda visibilidad y un control detallado sobre el comportamiento y la apariencia de su aplicación para que pueda realizar cambios simplemente actualizando tu configuración desde la consola de Firebase. Esto significa que puedes activar y desactivar funciones de forma dinámica, personalizar por segmentos de audiencia y ejecutar experimentos, todo sin configurar ninguna infraestructura compleja ni lanzar una nueva versión.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/_CXXVFPO6f0?start=13"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Implementa nuevas funciones con confianza
&lt;/h2&gt;

&lt;p&gt;Implementa indicadores de funciones para que puedas implementar gradualmente nuevas funciones para asegurarte de que sean estables y funcionen bien, antes de implementarlas ampliamente. Si las nuevas funciones no cumplen con las expectativas o causan bloqueos, puede revertirlas rápidamente. Remote Config proporciona señales y medidas de seguridad para garantizar que solo se publiquen las funciones más atractivas y de alta calidad para todos sus usuarios.&lt;/p&gt;

&lt;h2&gt;
  
  
  Personaliza tu aplicación para diferentes audiencias
&lt;/h2&gt;

&lt;p&gt;Personaliza tu aplicación para diferentes segmentos de usuarios en función de su perfil, preferencias, acciones pasadas y comportamiento futuro previsto. Por ejemplo, puedes modificar la pantalla de inicio para los usuarios según su país. También puedes simplificar un nivel de juego para los usuarios que se prevé que abandonen para mantenerlos interesados.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ejecutar experimentos para probar ideas
&lt;/h2&gt;

&lt;p&gt;Remote Config funciona a la perfección con las pruebas A/B para que puedas ejecutar experimentos para probar ideas y ver el impacto que tienen en los usuarios. ¿Quieres ver si tu nueva pantalla de pago realmente genera más compras? ¿Quieres probar un nuevo formato de anuncio para ver si aumenta los ingresos? Usa Remote Config con A/B Testing para obtener información sobre qué cambios están ayudando a lograr tus objetivos.&lt;/p&gt;

&lt;p&gt;Firebase Remote Config es una excelente herramienta que te permitirá hacer cambios en la marcha sin tener que perder el tiempo de hacer grandes configuraciones.&lt;/p&gt;

</description>
      <category>crypto</category>
      <category>web3</category>
      <category>blockchain</category>
    </item>
    <item>
      <title>Porque usar Cloud firestore Firebase</title>
      <dc:creator>Falcon</dc:creator>
      <pubDate>Tue, 17 Jan 2023 21:44:06 +0000</pubDate>
      <link>https://forem.com/gelopfalcon/porque-usar-cloud-firestore-firebase-lk2</link>
      <guid>https://forem.com/gelopfalcon/porque-usar-cloud-firestore-firebase-lk2</guid>
      <description>&lt;p&gt;Cloud Firestore es una base de datos de documentos NoSQL que le permite almacenar, sincronizar y consultar fácilmente datos para sus aplicaciones web y móviles, a escala global.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/QcsAb2RR52c?start=2"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Puedes estructurar tus datos fácilmente con colecciones y documentos. Crear jerarquías para almacenar datos relacionados y recuperar fácilmente los datos que necesitas mediante consultas expresivas. Todas las consultas escalan con el tamaño de su conjunto de resultados (nota: no su conjunto de datos), por lo que su aplicación está lista para escalar desde el primer día.&lt;/p&gt;

&lt;p&gt;Cloud Firestore se puede usar con SDK web y móvil y un conjunto integral de reglas de seguridad para que puedas acceder a tu base de datos sin necesidad de instalar tu propio servidor. Con Cloud Functions, puedes ejecutar un código de back-end alojado que responde a los cambios de datos en tu base de datos. Por supuesto, también puedes acceder a Cloud Firestore con bibliotecas de clientes tradicionales (es decir, Node, Python, Go y Java).&lt;/p&gt;

&lt;p&gt;Con Cloud Firestore, puedes sincronizar automáticamente los datos de su aplicación entre dispositivos. Te notificá los cambios de datos a medida que ocurran para que pueda crear fácilmente experiencias de colaboración y aplicaciones en tiempo real. Tus usuarios pueden acceder y realizar cambios en sus datos en cualquier momento, incluso cuando están desconectados. ¡El modo sin conexión está disponible en iOS, Android y Web!&lt;/p&gt;

&lt;p&gt;Con el lenguaje de seguridad declarativo, puedes restringir el acceso a los datos en función de los datos de identidad del usuario, la coincidencia de patrones en sus datos y más. Cloud Firestore también se integra con Firebase Authentication para brindarle una autenticación de usuario simple e intuitiva.&lt;/p&gt;

&lt;p&gt;Si gustas saber más, te invito a seguirme en mis redes sociales y eventos sobre cloud, firebase, etc.&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>career</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Observabilidad en Firebase</title>
      <dc:creator>Falcon</dc:creator>
      <pubDate>Mon, 05 Dec 2022 17:08:11 +0000</pubDate>
      <link>https://forem.com/gelopfalcon/observabilidad-en-firebase-ban</link>
      <guid>https://forem.com/gelopfalcon/observabilidad-en-firebase-ban</guid>
      <description>&lt;p&gt;Cloud Functions para Firebase facilita la creación y la implementación de un backend serverless para tu aplicación. Pero, ¿sabías que Cloud Functions para Firebase incluye integraciones nativas con el paquete de operaciones de Google Cloud, como Cloud Logging, Cloud Monitoring y Cloud Trace? &lt;/p&gt;

&lt;p&gt;Puedes aprovechar Google Cloud para adoptar un stack de observabilidad moderna como Open Telemetry para monitorear de manera efectiva sus funciones en la nube.&lt;/p&gt;

&lt;p&gt;L@s invito a ver esta sesión, donde se explica con mayor detalle el uso Open Telemetry con firebase y las ventajas de implementar un buen sistema de observabilidad en un ambiente serverless:&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/61WC7urgvQ4?start=181"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>firebase</category>
      <category>webdev</category>
      <category>googlecloud</category>
    </item>
    <item>
      <title>Flux on AWS (EKS)</title>
      <dc:creator>Falcon</dc:creator>
      <pubDate>Wed, 11 May 2022 14:27:25 +0000</pubDate>
      <link>https://forem.com/aws-builders/flux-on-aws-eks-143h</link>
      <guid>https://forem.com/aws-builders/flux-on-aws-eks-143h</guid>
      <description>&lt;p&gt;In the world of K8s, there is a very strong trending topic: Gitops. Which involves the use of Git + Fluxcd operator. Most people think that GitOps is something that belongs to Github, which is wrong. It can be used with any service that offers the use of git for code versioning, for example: CodeCommit.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwm1scy7tlgtk8r836h99.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwm1scy7tlgtk8r836h99.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Taken from &lt;a href="https://fluxcd.io/docs/" rel="noopener noreferrer"&gt;https://fluxcd.io/docs/&lt;/a&gt; &lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Cluster creation
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;eksctl create cb-cluster
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Flux Installation for AWS CodeCommit
&lt;/h2&gt;

&lt;p&gt;Clone the Git repository locally:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git clone ssh://git-codecommit.&amp;lt;region&amp;gt;.amazonaws.com/v1/repos/&amp;lt;my-cb-repository&amp;gt;
cd my-cb-repository
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create a directory inside the repository:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mkdir -p ./clusters/my-cb-cluster/flux-system
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Download the Flux CLI and generate the manifests with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;flux install \
  --export &amp;gt; ./clusters/my-cb-cluster/flux-system/gotk-components.yaml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Commit and push the manifest to the master branch:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git add -A &amp;amp;&amp;amp; git commit -m "add flux components" &amp;amp;&amp;amp; git push
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Apply the manifests on your cluster:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kubectl apply -f ./clusters/my-cb-cluster/flux-system/gotk-components.yaml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Verify that the controllers have started:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;flux check
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create a GitRepository object on your cluster by specifying the SSH address (my recommendation) of your repo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;flux create source git flux-system \
  --git-implementation=libgit2 \
  --url=ssh://git-codecommit.&amp;lt;region&amp;gt;.amazonaws.com/v1/repos/&amp;lt;my-repository&amp;gt; \
  --branch=&amp;lt;branch&amp;gt; \
  --ssh-key-algorithm=rsa \
  --ssh-rsa-bits=4096 \
  --interval=1m
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you prefer to use Git over HTTPS, then generate git credentials for HTTPS connections to codecommit and use these details as the username/password:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;flux create source git flux-system \
  --git-implementation=libgit2 \
  --url=https://git-codecommit.&amp;lt;region&amp;gt;.amazonaws.com/v1/repos/&amp;lt;my-repository&amp;gt; \
  --branch=main \
  --username=${AWS_IAM_GC_USER} \
  --password=${AWS_IAM_GC_PASS} \
  --interval=1m
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create a Kustomization object on your cluster:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;flux create kustomization flux-system \
  --source=flux-system \
  --path="./clusters/my-cb-cluster" \
  --prune=true \
  --interval=10m
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Export both objects, generate a kustomization.yaml, commit and push the manifests to Git:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;flux export source git flux-system \
  &amp;gt; ./clusters/my-cb-cluster/flux-system/gotk-sync.yaml

flux export kustomization flux-system \
  &amp;gt;&amp;gt; ./clusters/my-cb-cluster/flux-system/gotk-sync.yaml

cd ./clusters/my-cb-cluster/flux-system &amp;amp;&amp;amp; kustomize create --autodetect

git add -A &amp;amp;&amp;amp; git commit -m "add sync manifests files" &amp;amp;&amp;amp; git push
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Wait for Flux to get your previous commit with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;flux get kustomizations --watch
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Conclusions
&lt;/h2&gt;

&lt;p&gt;No more manual deploys, you can delegate it to Flux. Try and move to the new ways to work on K8s on AWS.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>devops</category>
      <category>programming</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
